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