518218 : set 'method parameters' option from m-c-p config

Change-Id: Ia23f123edf547e6310192fd25d3d22ea07f292c9
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java
index 980e1a9..e70e993 100644
--- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java
+++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java
@@ -526,11 +526,13 @@
     //New release flag in JDK 9. See http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-July/002414.html
     String release = null;
 
+    boolean generateParameters = false;
     for(MojoExecution execution : getCompilerMojoExecutions(request, monitor)) {
       release = getCompilerLevel(request.getMavenProject(), execution, "release", release, RELEASES, monitor);
       //XXX ignoring testRelease option, since JDT doesn't support main/test classpath separation - yet
       source = getCompilerLevel(request.getMavenProject(), execution, "source", source, SOURCES, monitor); //$NON-NLS-1$
       target = getCompilerLevel(request.getMavenProject(), execution, "target", target, TARGETS, monitor); //$NON-NLS-1$
+      generateParameters = generateParameters || isGenerateParameters(request.getMavenProject(), execution, monitor); //$NON-NLS-1$
     }
 
     if(release != null) {
@@ -549,16 +551,17 @@
 
     }
 
-    // While "5" and "6" ... are valid synonyms for Java 5, Java 6 ... source,
+    // While "5" and "6" ... are valid synonyms for Java 5, Java 6 ... source/target,
     // Eclipse expects the values 1.5 and 1.6 and so on.
     source = sanitizeJavaVersion(source);
-    // While "5" and "6" ... are valid synonyms for Java 5, Java 6 ... target,
-    // Eclipse expects the values 1.5 and 1.6 and so on.
     target = sanitizeJavaVersion(target);
 
     options.put(JavaCore.COMPILER_SOURCE, source);
     options.put(JavaCore.COMPILER_COMPLIANCE, source);
     options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, target);
+    if(generateParameters) {
+      options.put(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR, JavaCore.GENERATE);
+    }
 
     // 360962 keep forbidden_reference severity set by the user
     IJavaProject jp = JavaCore.create(request.getProject());
@@ -567,6 +570,43 @@
     }
   }
 
+  private boolean isGenerateParameters(MavenProject mavenProject, MojoExecution execution, IProgressMonitor monitor) {
+    Boolean generateParameters = null;
+    //1st, check the parameters option
+    try {
+      generateParameters = maven.getMojoParameterValue(mavenProject, execution, "parameters", Boolean.class, monitor);//$NON-NLS-1$
+    } catch(Exception ex) {
+      //ignore
+    }
+
+    //2nd, check the parameters flag in the compilerArgs list
+    if(!Boolean.TRUE.equals(generateParameters)) {
+      try {
+        List<?> args = maven.getMojoParameterValue(mavenProject, execution, "compilerArgs", List.class, monitor);//$NON-NLS-1$
+        if(args != null) {
+          generateParameters = args.contains("-parameters");//$NON-NLS-1$
+        }
+      } catch(Exception ex) {
+        //ignore
+      }
+    }
+
+    //3rd, check the parameters flag in the compilerArgument String
+    if(!Boolean.TRUE.equals(generateParameters)) {
+      try {
+        String compilerArgument = maven.getMojoParameterValue(mavenProject, execution, "compilerArgument", String.class, //$NON-NLS-1$
+            monitor);
+        if(compilerArgument != null) {
+          generateParameters = compilerArgument.contains("-parameters");//$NON-NLS-1$
+        }
+      } catch(CoreException ex) {
+        //ignore
+      }
+    }
+    //Let's ignore the <compilerArguments> Map, deprecated since maven-compiler-plugin 3.1 (in 2014).
+    return Boolean.TRUE.equals(generateParameters);
+  }
+
   private String sanitizeJavaVersion(String version) {
     switch(version) {
       case "5":