Adding support for parameter files.

diff --git a/cmdline/tool/src/org/netbeans/modules/jackpot30/cmdline/Main.java b/cmdline/tool/src/org/netbeans/modules/jackpot30/cmdline/Main.java
index bf64fd6..e97cc9f 100644
--- a/cmdline/tool/src/org/netbeans/modules/jackpot30/cmdline/Main.java
+++ b/cmdline/tool/src/org/netbeans/modules/jackpot30/cmdline/Main.java
@@ -19,9 +19,11 @@
 
 package org.netbeans.modules.jackpot30.cmdline;
 
+import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintStream;
@@ -155,7 +157,7 @@
         OptionSet parsed;
 
         try {
-            parsed = parser.parse(args);
+            parsed = parser.parse(inlineParameterFiles(args));
         } catch (OptionException ex) {
             System.err.println(ex.getLocalizedMessage());
             parser.printHelpOn(System.out);
@@ -350,6 +352,28 @@
         }
     }
 
+    private static String[] inlineParameterFiles(String... args) {
+        List<String> inlinedArgs = new ArrayList<>();
+
+        for (String arg : args) {
+            if (arg.startsWith("@")) {
+                try (BufferedReader r = new BufferedReader(new FileReader(arg.substring(1)))) {
+                    String line;
+
+                    while ((line = r.readLine()) != null) {
+                        inlinedArgs.add(line);
+                    }
+                } catch (IOException ex) {
+                    throw new OptionException(Collections.emptySet(), ex) {};
+                }
+            } else {
+                inlinedArgs.add(arg);
+            }
+        }
+
+        return inlinedArgs.toArray(new String[0]);
+    }
+
     private static Pair<ClassPath, ClassPath> jointSourceAndBinaryCP(List<RootConfiguration> groups) {
         Set<FileObject> sourceRoots = new HashSet<>();
         Set<FileObject> binaryRoots = new HashSet<>();
diff --git a/cmdline/tool/test/unit/src/org/netbeans/modules/jackpot30/cmdline/MainTest.java b/cmdline/tool/test/unit/src/org/netbeans/modules/jackpot30/cmdline/MainTest.java
index 5310b20..f5b7056 100644
--- a/cmdline/tool/test/unit/src/org/netbeans/modules/jackpot30/cmdline/MainTest.java
+++ b/cmdline/tool/test/unit/src/org/netbeans/modules/jackpot30/cmdline/MainTest.java
@@ -861,6 +861,33 @@
                       sourceLevel);
     }
 
+    public void testParameterFile() throws Exception {
+        String golden =
+            "package test;\n" +
+            "public class Test {\n" +
+            "    private void test(java.util.Collection c) {\n" +
+            "        boolean b = c.isEmpty();\n" +
+            "    }\n" +
+            "}\n";
+
+        doRunCompiler(golden,
+                      null,
+                      null,
+                      "src/test/Test.java",
+                      "package test;\n" +
+                      "public class Test {\n" +
+                      "    private void test(java.util.Collection c) {\n" +
+                      "        boolean b = c.size() == 0;\n" +
+                      "    }\n" +
+                      "}\n",
+                      "parameters.txt",
+                      "--apply\n" +
+                      "--hint\n" +
+                      "Usage of .size() == 0\n",
+                      null,
+                      "@" + getWorkDirPath() + "/parameters.txt");
+    }
+
     private static final String DONT_APPEND_PATH = new String("DONT_APPEND_PATH");
     private static final String IGNORE = new String("IGNORE");