This is an automated email from the ASF dual-hosted git repository.

jkf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ant.git

commit 8f903513877e81e1c2e180c80c467f1ad71fc1d9
Author: jkf <j...@famkruithof.net>
AuthorDate: Sat Jun 15 16:10:37 2019 +0200

    improved version handling in CompilerAdapter
---
 src/main/org/apache/tools/ant/taskdefs/Javac.java  |  61 ++++---
 .../taskdefs/compilers/DefaultCompilerAdapter.java | 183 +++++++++++++++------
 .../ant/taskdefs/compilers/JavacExternal.java      |   6 +-
 .../compilers/DefaultCompilerAdapterTest.java      | 108 ++++++++++--
 4 files changed, 266 insertions(+), 92 deletions(-)

diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java 
b/src/main/org/apache/tools/ant/taskdefs/Javac.java
index bdb0cc7..ae79630 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javac.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java
@@ -87,15 +87,15 @@ public class Javac extends MatchingTask {
 
     private static final String JAVAC10_PLUS = "javac10+";
     private static final String JAVAC9 = "javac9";
-    private static final String JAVAC19 = "javac1.9";
-    private static final String JAVAC18 = "javac1.8";
-    private static final String JAVAC17 = "javac1.7";
-    private static final String JAVAC16 = "javac1.6";
-    private static final String JAVAC15 = "javac1.5";
-    private static final String JAVAC14 = "javac1.4";
-    private static final String JAVAC13 = "javac1.3";
-    private static final String JAVAC12 = "javac1.2";
-    private static final String JAVAC11 = "javac1.1";
+    private static final String JAVAC9_ALIAS = "javac1.9";
+    private static final String JAVAC1_8 = "javac1.8";
+    private static final String JAVAC1_7 = "javac1.7";
+    private static final String JAVAC1_6 = "javac1.6";
+    private static final String JAVAC1_5 = "javac1.5";
+    private static final String JAVAC1_4 = "javac1.4";
+    private static final String JAVAC1_3 = "javac1.3";
+    private static final String JAVAC1_2 = "javac1.2";
+    private static final String JAVAC1_1 = "javac1.1";
     private static final String MODERN = "modern";
     private static final String CLASSIC = "classic";
     private static final String EXTJAVAC = "extJavac";
@@ -161,7 +161,7 @@ public class Javac extends MatchingTask {
 
     private String assumedJavaVersion() {
         if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
-            return JAVAC18;
+            return JAVAC1_8;
         }
         if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
             return JAVAC9;
@@ -959,29 +959,24 @@ public class Javac extends MatchingTask {
     private String getAltCompilerName(final String anImplementation) {
         if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation)
                 || JAVAC9.equalsIgnoreCase(anImplementation)
-                || JAVAC19.equalsIgnoreCase(anImplementation)
-                || JAVAC18.equalsIgnoreCase(anImplementation)
-                || JAVAC17.equalsIgnoreCase(anImplementation)
-                || JAVAC16.equalsIgnoreCase(anImplementation)
-                || JAVAC15.equalsIgnoreCase(anImplementation)
-                || JAVAC14.equalsIgnoreCase(anImplementation)
-                || JAVAC13.equalsIgnoreCase(anImplementation)) {
+                || JAVAC9_ALIAS.equalsIgnoreCase(anImplementation)
+                || JAVAC1_8.equalsIgnoreCase(anImplementation)
+                || JAVAC1_7.equalsIgnoreCase(anImplementation)
+                || JAVAC1_6.equalsIgnoreCase(anImplementation)
+                || JAVAC1_5.equalsIgnoreCase(anImplementation)
+                || JAVAC1_4.equalsIgnoreCase(anImplementation)
+                || JAVAC1_3.equalsIgnoreCase(anImplementation)) {
             return MODERN;
         }
-        if (JAVAC12.equalsIgnoreCase(anImplementation)
-                || JAVAC11.equalsIgnoreCase(anImplementation)) {
+        if (JAVAC1_2.equalsIgnoreCase(anImplementation)
+                || JAVAC1_1.equalsIgnoreCase(anImplementation)) {
             return CLASSIC;
         }
         if (MODERN.equalsIgnoreCase(anImplementation)) {
             final String nextSelected = assumedJavaVersion();
             if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation)
                     || JAVAC9.equalsIgnoreCase(nextSelected)
-                    || JAVAC18.equalsIgnoreCase(nextSelected)
-                    || JAVAC17.equalsIgnoreCase(nextSelected)
-                    || JAVAC16.equalsIgnoreCase(nextSelected)
-                    || JAVAC15.equalsIgnoreCase(nextSelected)
-                    || JAVAC14.equalsIgnoreCase(nextSelected)
-                    || JAVAC13.equalsIgnoreCase(nextSelected)) {
+                    || JAVAC1_8.equalsIgnoreCase(nextSelected)) {
                 return nextSelected;
             }
         }
@@ -1251,14 +1246,14 @@ public class Javac extends MatchingTask {
             || CLASSIC.equals(compilerImpl)
             || JAVAC10_PLUS.equals(compilerImpl)
             || JAVAC9.equals(compilerImpl)
-            || JAVAC18.equals(compilerImpl)
-            || JAVAC17.equals(compilerImpl)
-            || JAVAC16.equals(compilerImpl)
-            || JAVAC15.equals(compilerImpl)
-            || JAVAC14.equals(compilerImpl)
-            || JAVAC13.equals(compilerImpl)
-            || JAVAC12.equals(compilerImpl)
-            || JAVAC11.equals(compilerImpl);
+            || JAVAC1_8.equals(compilerImpl)
+            || JAVAC1_7.equals(compilerImpl)
+            || JAVAC1_6.equals(compilerImpl)
+            || JAVAC1_5.equals(compilerImpl)
+            || JAVAC1_4.equals(compilerImpl)
+            || JAVAC1_3.equals(compilerImpl)
+            || JAVAC1_2.equals(compilerImpl)
+            || JAVAC1_1.equals(compilerImpl);
     }
 
     /**
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java 
b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
index 94f1a5f..c996e38 100644
--- 
a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
+++ 
b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
@@ -264,7 +264,8 @@ public abstract class DefaultCompilerAdapter
             sourcepath = src;
         }
 
-        final String memoryParameterPrefix = assumeJava11() ? "-J-" : "-J-X";
+        final String memoryParameterPrefix = assumeJava1_2Plus() ? "-J-X" : 
"-J-";
+
         if (memoryInitialSize != null) {
             if (!attributes.isForkedJavac()) {
                 attributes.log(
@@ -304,7 +305,7 @@ public abstract class DefaultCompilerAdapter
 
         // Just add "sourcepath" to classpath (for JDK1.1)
         // as well as "bootclasspath" and "extdirs"
-        if (assumeJava11()) {
+        if (!assumeJava1_2Plus()) {
             final Path cp = new Path(project);
             Optional.ofNullable(getBootClassPath()).ifPresent(cp::append);
 
@@ -346,7 +347,7 @@ public abstract class DefaultCompilerAdapter
             cmd.createArgument().setValue(encoding);
         }
         if (debug) {
-            if (useDebugLevel && !assumeJava11()) {
+            if (useDebugLevel && assumeJava1_2Plus()) {
                 final String debugLevel = attributes.getDebugLevel();
                 if (debugLevel != null) {
                     cmd.createArgument().setValue("-g:" + debugLevel);
@@ -364,14 +365,14 @@ public abstract class DefaultCompilerAdapter
         }
 
         if (depend) {
-            if (assumeJava11()) {
+               if (assumeJava1_3Plus()) {
+                       attributes.log(
+                        "depend attribute is not supported by the modern 
compiler",
+                        Project.MSG_WARN);
+               } else if (assumeJava1_2Plus()) {
+                       cmd.createArgument().setValue("-Xdepend");
+               } else { //java 1.1
                 cmd.createArgument().setValue("-depend");
-            } else if (assumeJava12()) {
-                cmd.createArgument().setValue("-Xdepend");
-            } else {
-                attributes.log(
-                    "depend attribute is not supported by the modern compiler",
-                    Project.MSG_WARN);
             }
         }
 
@@ -392,7 +393,7 @@ public abstract class DefaultCompilerAdapter
      */
     protected Commandline setupModernJavacCommandlineSwitches(final 
Commandline cmd) {
         setupJavacCommandlineSwitches(cmd, true);
-        if (!assumeJava13()) { // -source added with JDK 1.4
+        if (assumeJava1_4Plus()) { // -source added with JDK 1.4
             final String t = attributes.getTarget();
             final String s = attributes.getSource();
             if (release == null || !assumeJava9Plus()) {
@@ -433,8 +434,7 @@ public abstract class DefaultCompilerAdapter
             cmd.createArgument().setPath(ump);
         }
         if (attributes.getNativeHeaderDir() != null) {
-            if (assumeJava13() || assumeJava14() || assumeJava15() || 
assumeJava16()
-                    || assumeJava17()) {
+            if (!assumeJava1_8Plus()) {
                 attributes.log(
                     "Support for javac -h has been added in Java8, ignoring 
it");
             } else {
@@ -621,75 +621,163 @@ public abstract class DefaultCompilerAdapter
      * Shall we assume JDK 1.1 command line switches?
      * @return true if jdk 1.1
      * @since Ant 1.5
+     * @deprecated since Ant 1.10.7, use assumeJava1_1Plus, if necessary 
combined with !assumeJava1_2Plus
      */
+    @Deprecated
     protected boolean assumeJava11() {
-        return "javac1.1".equals(attributes.getCompilerVersion());
+        return assumeJava1_1Plus() && !assumeJava1_2Plus();
     }
-
+    
+    /**
+     * Shall we assume JDK 1.1+ command line switches?
+     * @return true if jdk 1.1 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_1Plus() {
+        return "javac1.1".equals(attributes.getCompilerVersion()) || 
assumeJava1_2Plus() ;
+    }
+    
     /**
      * Shall we assume JDK 1.2 command line switches?
      * @return true if jdk 1.2
      * @since Ant 1.5
+     * @deprecated since Ant 1.10.7, use assumeJava1_2Plus, if necessary 
combined with !assumeJava1_3Plus
      */
+    @Deprecated
     protected boolean assumeJava12() {
-        return "javac1.2".equals(attributes.getCompilerVersion());
+       return assumeJava1_2Plus() && !assumeJava1_3Plus();
     }
 
     /**
+     * Shall we assume JDK 1.2+ command line switches?
+     * @return true if jdk 1.2 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_2Plus() {
+        return "javac1.2".equals(attributes.getCompilerVersion()) || 
assumeJava1_3Plus() ;
+    }
+    
+    /**
      * Shall we assume JDK 1.3 command line switches?
      * @return true if jdk 1.3
      * @since Ant 1.5
+     * @deprecated since Ant 1.10.7, use assumeJava1_3Plus, if necessary 
combined with !assumeJava1_4Plus
      */
+    @Deprecated
     protected boolean assumeJava13() {
-        return "javac1.3".equals(attributes.getCompilerVersion());
+       return assumeJava1_3Plus() && !assumeJava1_4Plus();
     }
 
     /**
+     * Shall we assume JDK 1.3+ command line switches?
+     * @return true if jdk 1.3 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_3Plus() {
+        return "javac1.3".equals(attributes.getCompilerVersion()) || 
assumeJava1_4Plus() ;
+    }
+    
+    /**
      * Shall we assume JDK 1.4 command line switches?
      * @return true if jdk 1.4
      * @since Ant 1.6.3
+     * @deprecated since Ant 1.10.7, use assumeJava1_4Plus, if necessary 
combined with !assumeJava1_5Plus
      */
+    @Deprecated
     protected boolean assumeJava14() {
-        return assumeJavaXY("javac1.4", JavaEnvUtils.JAVA_1_4);
+       return assumeJava1_4Plus() && !assumeJava1_5Plus();
+    }
+    
+    /**
+     * Shall we assume JDK 1.4+ command line switches?
+     * @return true if jdk 1.4 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_4Plus() {
+        return assumeJavaXY("javac1.4", JavaEnvUtils.JAVA_1_4) || 
assumeJava1_5Plus() ;
     }
 
     /**
      * Shall we assume JDK 1.5 command line switches?
      * @return true if JDK 1.5
      * @since Ant 1.6.3
+     * @deprecated since Ant 1.10.7, use assumeJava1_5Plus, if necessary 
combined with !assumeJava1_6Plus
      */
+    @Deprecated
     protected boolean assumeJava15() {
-        return assumeJavaXY("javac1.5", JavaEnvUtils.JAVA_1_5);
+       return assumeJava1_5Plus() && !assumeJava1_6Plus();
+    }
+    
+    /**
+     * Shall we assume JDK 1.5+ command line switches?
+     * @return true if jdk 1.5 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_5Plus() {
+        return assumeJavaXY("javac1.5", JavaEnvUtils.JAVA_1_5) || 
assumeJava1_6Plus() ;
     }
 
     /**
      * Shall we assume JDK 1.6 command line switches?
      * @return true if JDK 1.6
      * @since Ant 1.7
+     * @deprecated since Ant 1.10.7, use assumeJava1_6Plus, if necessary 
combined with !assumeJava1_7Plus
      */
+    @Deprecated
     protected boolean assumeJava16() {
-        return assumeJavaXY("javac1.6", JavaEnvUtils.JAVA_1_6);
+       return assumeJava1_6Plus() && !assumeJava1_7Plus();
     }
 
     /**
+     * Shall we assume JDK 1.6+ command line switches?
+     * @return true if jdk 1.6 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_6Plus() {
+        return assumeJavaXY("javac1.6", JavaEnvUtils.JAVA_1_6) || 
assumeJava1_7Plus() ;
+    }
+    
+    /**
      * Shall we assume JDK 1.7 command line switches?
      * @return true if JDK 1.7
      * @since Ant 1.8.2
+     * @deprecated since Ant 1.10.7, use assumeJava1_7Plus, if necessary 
combined with !assumeJava1_8Plus
      */
+    @Deprecated
     protected boolean assumeJava17() {
-        return assumeJavaXY("javac1.7", JavaEnvUtils.JAVA_1_7);
+       return assumeJava1_7Plus() && !assumeJava1_8Plus();
+    }
+    
+    /**
+     * Shall we assume JDK 1.7+ command line switches?
+     * @return true if jdk 1.7 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_7Plus() {
+        return assumeJavaXY("javac1.7", JavaEnvUtils.JAVA_1_7) || 
assumeJava1_8Plus() ;
     }
 
     /**
      * Shall we assume JDK 1.8 command line switches?
      * @return true if JDK 1.8
      * @since Ant 1.8.3
+     * @deprecated since Ant 1.10.7, use assumeJava1_8Plus, if necessary 
combined with !assumeJava9Plus
      */
+    @Deprecated
     protected boolean assumeJava18() {
-        return assumeJavaXY("javac1.8", JavaEnvUtils.JAVA_1_8);
+       return assumeJava1_8Plus() && !assumeJava9Plus();
     }
 
     /**
+     * Shall we assume JDK 1.8+ command line switches?
+     * @return true if jdk 1.8 and above
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava1_8Plus() {
+        return assumeJavaXY("javac1.8", JavaEnvUtils.JAVA_1_8) || 
assumeJava9Plus() ;
+    }
+    
+    /**
      * Shall we assume JDK 9 command line switches?
      * @return true if JDK 9
      * @since Ant 1.9.4
@@ -704,7 +792,9 @@ public abstract class DefaultCompilerAdapter
      * Shall we assume JDK 9 command line switches?
      * @return true if JDK 9
      * @since Ant 1.9.8
+     * @deprecated since Ant 1.10.7, use assumeJava9Plus, in the future if 
necessary combined with !assumeJava10Plus
      */
+    @Deprecated
     protected boolean assumeJava9() {
         return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_9)
                 || assumeJavaXY("javac9", JavaEnvUtils.JAVA_9);
@@ -718,23 +808,24 @@ public abstract class DefaultCompilerAdapter
     protected boolean assumeJava9Plus() {
         return "javac1.9".equals(attributes.getCompilerVersion())
             || "javac9".equals(attributes.getCompilerVersion())
-            || "javac10+".equals(attributes.getCompilerVersion())
-            || (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)
-                && ("classic".equals(attributes.getCompilerVersion())
-                || "modern".equals(attributes.getCompilerVersion())
-                || "extJavac".equals(attributes.getCompilerVersion())));
+            || assumeJava10Plus();
     }
 
     /**
+     * Shall we assume JDK 10+ command line switches?
+     * @return true if JDK 10+
+     * @since Ant 1.10.7
+     */
+    protected boolean assumeJava10Plus() {
+        return "javac10+".equals(attributes.getCompilerVersion());
+    }
+    
+    /**
      * Shall we assume command line switches for the given version of Java?
      * @since Ant 1.8.3
      */
     private boolean assumeJavaXY(final String javacXY, final String 
javaEnvVersionXY) {
-        return javacXY.equals(attributes.getCompilerVersion())
-            || (JavaEnvUtils.isJavaVersion(javaEnvVersionXY)
-                && ("classic".equals(attributes.getCompilerVersion())
-                 || "modern".equals(attributes.getCompilerVersion())
-                 || "extJavac".equals(attributes.getCompilerVersion())));
+        return javacXY.equals(attributes.getCompilerVersion());
     }
 
     /**
@@ -763,7 +854,7 @@ public abstract class DefaultCompilerAdapter
      * @since Ant 1.6.3
      */
     protected String getNoDebugArgument() {
-        return assumeJava11() ? null : "-g:none";
+       return assumeJava1_2Plus() ? "-g:none" : null;
     }
 
     private void setImplicitSourceSwitch(final Commandline cmd,
@@ -789,17 +880,17 @@ public abstract class DefaultCompilerAdapter
      * selected JDK's javac.
      */
     private String getDefaultSource() {
-        if (assumeJava15() || assumeJava16()) {
-            return "1.5 in JDK 1.5 and 1.6";
-        }
-        if (assumeJava17()) {
-            return "1.7 in JDK 1.7";
+        if (assumeJava9Plus()) {
+            return "9 in JDK 9";
         }
-        if (assumeJava18()) {
+        if (assumeJava1_8Plus()) {
             return "1.8 in JDK 1.8";
         }
-        if (assumeJava9Plus()) {
-            return "9 in JDK 9";
+        if (assumeJava1_7Plus()) {
+            return "1.7 in JDK 1.7";
+        }
+        if (assumeJava1_5Plus()) {
+            return "1.5 in JDK 1.5 and 1.6";
         }
         return "";
     }
@@ -814,17 +905,17 @@ public abstract class DefaultCompilerAdapter
      * @param t the -target value, must not be null
      */
     private boolean mustSetSourceForTarget(String t) {
-        if (assumeJava14()) {
+        if (!assumeJava1_5Plus()) {
             return false;
         }
         if (t.startsWith("1.")) {
             t = t.substring(2);
         }
         return "1".equals(t) || "2".equals(t) || "3".equals(t) || "4".equals(t)
-                || (("5".equals(t) || "6".equals(t)) && !assumeJava15() && 
!assumeJava16())
-                || ("7".equals(t) && !assumeJava17())
-                || ("8".equals(t) && !assumeJava18())
-                || ("9".equals(t) && !assumeJava9Plus());
+                || (("5".equals(t) || "6".equals(t)) && assumeJava1_7Plus())
+                || ("7".equals(t) && assumeJava1_8Plus())
+                || ("8".equals(t) && assumeJava9Plus())
+                || ("9".equals(t) && assumeJava10Plus());
     }
 
     /**
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java 
b/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java
index 5f2b9d5..35d1c64 100644
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java
+++ b/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java
@@ -46,12 +46,14 @@ public class JavacExternal extends DefaultCompilerAdapter {
 
         Commandline cmd = new Commandline();
         cmd.setExecutable(getJavac().getJavacExecutable());
-        if (!assumeJava11() && !assumeJava12()) {
+        if (assumeJava1_3Plus()) {
             setupModernJavacCommandlineSwitches(cmd);
         } else {
             setupJavacCommandlineSwitches(cmd, true);
         }
-        int openVmsFirstFileName = assumeJava11() ? -1 : cmd.size();
+
+        int openVmsFirstFileName = assumeJava1_2Plus() ? cmd.size() : -1;
+
         logAndAddFilesToCompile(cmd);
         //On VMS platform, we need to create a special java options file
         //containing the arguments and classpath for the javac command.
diff --git 
a/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
 
b/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
index ba02548..c3f2ea1 100644
--- 
a/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
+++ 
b/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
@@ -18,6 +18,15 @@
 
 package org.apache.tools.ant.taskdefs.compilers;
 
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
@@ -27,22 +36,15 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Javac;
 import org.apache.tools.ant.types.Commandline;
-import org.junit.Test;
-
-import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.util.JavaEnvUtils;
+import org.junit.Test;
 
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 
 public class DefaultCompilerAdapterTest {
 
@@ -411,7 +413,7 @@ public class DefaultCompilerAdapterTest {
         LogCapturingJavac javac = new LogCapturingJavac();
         Project p = new Project();
         javac.setProject(p);
-        javac.setCompiler("javac8");
+        javac.setCompiler("javac1.8");
         javac.setSource("6");
         javac.setTarget("6");
         javac.setRelease("6");
@@ -456,6 +458,90 @@ public class DefaultCompilerAdapterTest {
         assertEquals("6", args[4]);
     }
 
+    @Test
+    public void testAssumeJavaXPlus() {
+       LogCapturingJavac javac = new LogCapturingJavac();
+        Project p = new Project();
+        javac.setProject(p);
+        DefaultCompilerAdapter ca = new DefaultCompilerAdapter() {     
+                       @Override
+                       public boolean execute() throws BuildException {
+                               // TODO Auto-generated method stub
+                               return false;
+                       }
+               };
+               ca.setJavac(javac);
+               System.out.println(javac.getCompiler());
+               
+               if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_10)) {
+                       assertTrue(ca.assumeJava10Plus());
+                       assertTrue(ca.assumeJava9Plus());
+               } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
+                       assertFalse(ca.assumeJava10Plus());
+                       assertTrue(ca.assumeJava9Plus());
+                       assertTrue(ca.assumeJava1_8Plus());
+               } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
+                       assertFalse(ca.assumeJava9Plus());
+                       assertTrue(ca.assumeJava1_8Plus());
+                       assertTrue(ca.assumeJava1_7Plus());
+               }
+               javac.setCompiler("javac10+");
+               assertTrue(ca.assumeJava10Plus());
+               assertTrue(ca.assumeJava9Plus());
+               
+               javac.setCompiler("javac9");
+               assertFalse(ca.assumeJava10Plus());
+               assertTrue(ca.assumeJava9Plus());
+               assertTrue(ca.assumeJava1_8Plus());
+               
+               javac.setCompiler("javac1.9");
+               assertFalse(ca.assumeJava10Plus());
+               assertTrue(ca.assumeJava9Plus());
+               assertTrue(ca.assumeJava1_8Plus());
+               
+               javac.setCompiler("javac1.8");
+               assertFalse(ca.assumeJava9Plus());
+               assertTrue(ca.assumeJava1_8Plus());
+               assertTrue(ca.assumeJava1_7Plus());
+               
+               javac.setCompiler("javac1.7");
+               assertFalse(ca.assumeJava1_8Plus());
+               assertTrue(ca.assumeJava1_7Plus());
+               assertTrue(ca.assumeJava1_6Plus());
+               
+               javac.setCompiler("javac1.6");
+               assertFalse(ca.assumeJava1_7Plus());
+               assertTrue(ca.assumeJava1_6Plus());
+               assertTrue(ca.assumeJava1_5Plus());
+               
+               javac.setCompiler("javac1.5");
+               assertFalse(ca.assumeJava1_6Plus());
+               assertTrue(ca.assumeJava1_5Plus());
+               assertTrue(ca.assumeJava1_4Plus());
+               
+               javac.setCompiler("javac1.4");
+               assertFalse(ca.assumeJava1_5Plus());
+               assertTrue(ca.assumeJava1_4Plus());
+               assertTrue(ca.assumeJava1_3Plus());
+               
+               javac.setCompiler("javac1.3");
+               assertFalse(ca.assumeJava1_4Plus());
+               assertTrue(ca.assumeJava1_3Plus());
+               assertTrue(ca.assumeJava1_2Plus());
+               
+               javac.setCompiler("javac1.2");
+               assertFalse(ca.assumeJava1_3Plus());
+               assertTrue(ca.assumeJava1_2Plus());
+               assertTrue(ca.assumeJava1_1Plus());
+               
+               javac.setCompiler("javac1.1");
+               assertFalse(ca.assumeJava1_2Plus());
+               assertTrue(ca.assumeJava1_1Plus());
+    }
+    
+
+    
+
     private void commonSourceDowngrades(String javaVersion) {
         testSource("1.3", javaVersion,
                    "If you specify -target 1.1 you now must also specify"

Reply via email to