Avoid ambiguous varargs null in Prettify reflection Prettify looks up and invokes each language class' getFileExtensions() method reflectively when registering language handlers. The method has no parameters, but the reflection calls passed explicit null values to varargs APIs: Class.getMethod(String, Class<?>...) Method.invoke(Object, Object...) Newer javac reports this as an inexact non-varargs call because the null argument could mean either a null varargs array or one null argument. Call the zero-argument varargs forms instead. This keeps the behavior unchanged and removes the compiler warning. Add a regression test that calls the reflection helper directly through a test subclass. Change-Id: I1a839c71767d226050b6075087786a31438b4191
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java index 82b02a6..4999a8c 100644 --- a/src/prettify/parser/Prettify.java +++ b/src/prettify/parser/Prettify.java
@@ -854,8 +854,8 @@ } protected List<String> getFileExtensionsFromClass(Class<? extends Lang> clazz) throws Exception { - Method getExtensionsMethod = clazz.getMethod("getFileExtensions", (Class<?>[]) null); - return (List<String>) getExtensionsMethod.invoke(null, null); + Method getExtensionsMethod = clazz.getMethod("getFileExtensions"); + return (List<String>) getExtensionsMethod.invoke(null); } /**
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java index d85b4bd..f806e83 100644 --- a/test/prettify/PrettifyTest.java +++ b/test/prettify/PrettifyTest.java
@@ -16,6 +16,8 @@ import prettify.parser.Util; import prettify.parser.Job; import prettify.parser.Prettify; +import prettify.lang.Lang; +import prettify.lang.LangSql; import java.util.Arrays; import java.util.ListIterator; @@ -197,6 +199,18 @@ test("matlab", "matlab", false); } + @Test + public void getFileExtensionsFromClassInvokesStaticNoArgMethod() throws Exception { + assertEquals(Arrays.asList("sql"), + new TestPrettify().getFileExtensionsFrom(LangSql.class)); + } + + private static class TestPrettify extends Prettify { + List<String> getFileExtensionsFrom(Class<? extends Lang> clazz) throws Exception { + return getFileExtensionsFromClass(clazz); + } + } + /** * Read a test resource from the classpath and return its content as a byte * array. Test data is packaged as Java resources (see the java_test