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

sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 56eaba181fb09ad205b6dd4ea7a363c35f034b02
Author: Eric Milles <[email protected]>
AuthorDate: Sun Jan 19 16:07:11 2020 -0600

    GROOVY-9368: joint compilation options are null by default
    
    (cherry picked from commit 4ed12ade3866662ea3cf5c9dc88f7277234c2415)
---
 .../groovy/control/CompilerConfiguration.java      | 186 ++++++++++-----------
 .../groovy/control/CompilerConfigurationTest.java  | 186 +++++++++------------
 .../src/test/groovy/groovy/ant/AntTestCase.groovy  |   7 +-
 .../test/groovy/groovy/ant/Groovy9352Test.groovy   |  28 ++--
 4 files changed, 188 insertions(+), 219 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java 
b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
index 88733bd..896dea9 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
@@ -144,12 +144,12 @@ public class CompilerConfiguration {
 
         @Override
         public Set<String> getDisabledGlobalASTTransformations() {
-            return Collections.emptySet();
+            return 
Optional.ofNullable(super.getDisabledGlobalASTTransformations()).map(Collections::unmodifiableSet).orElse(null);
         }
 
         @Override
         public Map<String, Object> getJointCompilationOptions() {
-            return 
Collections.unmodifiableMap(super.getJointCompilationOptions());
+            return 
Optional.ofNullable(super.getJointCompilationOptions()).map(Collections::unmodifiableMap).orElse(null);
         }
 
         @Override
@@ -163,122 +163,122 @@ public class CompilerConfiguration {
         }
 
         @Override
-        public void setBytecodePostprocessor(BytecodeProcessor 
bytecodePostprocessor) {
+        public void setBytecodePostprocessor(final BytecodeProcessor 
bytecodePostprocessor) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setClasspath(String classpath) {
+        public void setClasspath(final String classpath) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setClasspathList(List<String> parts) {
+        public void setClasspathList(final List<String> parts) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public CompilerConfiguration 
addCompilationCustomizers(CompilationCustomizer... customizers) {
+        public CompilerConfiguration addCompilationCustomizers(final 
CompilationCustomizer... customizers) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setDebug(boolean debug) {
+        public void setDebug(final boolean debug) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setDefaultScriptExtension(String defaultScriptExtension) {
+        public void setDefaultScriptExtension(final String 
defaultScriptExtension) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setDisabledGlobalASTTransformations(Set<String> 
disabledGlobalASTTransformations) {
+        public void setDisabledGlobalASTTransformations(final Set<String> 
disabledGlobalASTTransformations) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setJointCompilationOptions(Map<String, Object> options) {
+        public void setJointCompilationOptions(final Map<String, Object> 
options) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setMinimumRecompilationInterval(int time) {
+        public void setMinimumRecompilationInterval(final int time) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setOptimizationOptions(Map<String, Boolean> options) {
+        public void setOptimizationOptions(final Map<String, Boolean> options) 
{
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setOutput(PrintWriter output) {
+        public void setOutput(final PrintWriter output) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setParameters(boolean parameters) {
+        public void setParameters(final boolean parameters) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setPluginFactory(ParserPluginFactory pluginFactory) {
+        public void setPluginFactory(final ParserPluginFactory pluginFactory) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setPreviewFeatures(boolean previewFeatures) {
+        public void setPreviewFeatures(final boolean previewFeatures) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setRecompileGroovySource(boolean recompile) {
+        public void setRecompileGroovySource(final boolean recompile) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setScriptBaseClass(String scriptBaseClass) {
+        public void setScriptBaseClass(final String scriptBaseClass) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setScriptExtensions(Set<String> scriptExtensions) {
+        public void setScriptExtensions(final Set<String> scriptExtensions) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setSourceEncoding(String encoding) {
+        public void setSourceEncoding(final String encoding) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setTargetBytecode(String version) {
+        public void setTargetBytecode(final String version) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setTargetDirectory(File directory) {
+        public void setTargetDirectory(final File directory) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setTargetDirectory(String directory) {
+        public void setTargetDirectory(final String directory) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setTolerance(int tolerance) {
+        public void setTolerance(final int tolerance) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setVerbose(boolean verbose) {
+        public void setVerbose(final boolean verbose) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setWarningLevel(int level) {
+        public void setWarningLevel(final int level) {
             throw new UnsupportedOperationException();
         }
     };
@@ -343,7 +343,7 @@ public class CompilerConfiguration {
     /**
      * extensions used to find a groovy files
      */
-    private Set<String> scriptExtensions = new LinkedHashSet<String>();
+    private Set<String> scriptExtensions = new LinkedHashSet<>();
 
     /**
      * if set to true recompilation is enabled
@@ -375,7 +375,7 @@ public class CompilerConfiguration {
      */
     private Map<String, Boolean> optimizationOptions;
 
-    private final List<CompilationCustomizer> compilationCustomizers = new 
LinkedList<CompilationCustomizer>();
+    private final List<CompilationCustomizer> compilationCustomizers = new 
LinkedList<>();
 
     /**
      * Global AST transformations which should not be loaded even if they are
@@ -417,10 +417,9 @@ public class CompilerConfiguration {
      * </blockquote>
      */
     public CompilerConfiguration() {
-        // Set in safe defaults
         warningLevel = WarningMessage.LIKELY_ERRORS;
-        classpath = new LinkedList<String>();
-        parameters = getSystemPropertySafe("groovy.parameters") != null;
+        classpath = new LinkedList<>();
+        parameters = 
Optional.ofNullable(getSystemPropertySafe("groovy.parameters")).map(Boolean::valueOf).orElse(Boolean.FALSE);
         tolerance = 10;
         minimumRecompilationInterval = 100;
 
@@ -429,7 +428,6 @@ public class CompilerConfiguration {
         previewFeatures = getSystemPropertySafe("groovy.preview.features") != 
null;
         defaultScriptExtension = 
getSystemPropertySafe("groovy.default.scriptExtension", ".groovy");
 
-        // Source file encoding
         String encoding = getSystemPropertySafe("file.encoding", 
DEFAULT_SOURCE_ENCODING);
         encoding = getSystemPropertySafe("groovy.source.encoding", encoding);
         setSourceEncodingOrDefault(encoding);
@@ -441,25 +439,17 @@ public class CompilerConfiguration {
         handleOptimizationOption(optimizationOptions, GROOVYDOC, 
"groovy.attach.groovydoc");
         handleOptimizationOption(optimizationOptions, RUNTIME_GROOVYDOC, 
"groovy.attach.runtime.groovydoc");
 
-        jointCompilationOptions = new HashMap<>(4);
-        handleJointCompilationOption(jointCompilationOptions, MEM_STUB, 
"groovy.generate.stub.in.memory");
-    }
-
-    private void handleOptimizationOption(Map<String, Boolean> options, String 
optionName, String sysOptionName) {
-        String propValue = getSystemPropertySafe(sysOptionName);
-        boolean optionEnabled = propValue == null
-                ? (DEFAULT != null && 
Boolean.TRUE.equals(DEFAULT.getOptimizationOptions().get(optionName)))
-                : Boolean.parseBoolean(propValue);
-
-        if (optionEnabled) {
-            options.put(optionName, Boolean.TRUE);
+        if 
(Optional.ofNullable(getSystemPropertySafe("groovy.generate.stub.in.memory"))
+                .map(Boolean::valueOf).orElse(DEFAULT != null && 
DEFAULT.isMemStubEnabled()).booleanValue()) {
+            jointCompilationOptions = new HashMap<>();
+            jointCompilationOptions.put(MEM_STUB, Boolean.TRUE);
         }
     }
 
-    private void handleJointCompilationOption(Map<String, Object> options, 
String optionName, String sysOptionName) {
+    private void handleOptimizationOption(final Map<String, Boolean> options, 
final String optionName, final String sysOptionName) {
         String propValue = getSystemPropertySafe(sysOptionName);
         boolean optionEnabled = propValue == null
-                ? (DEFAULT != null && 
Boolean.TRUE.equals(DEFAULT.getJointCompilationOptions().get(optionName)))
+                ? (DEFAULT != null && 
Boolean.TRUE.equals(DEFAULT.getOptimizationOptions().get(optionName)))
                 : Boolean.parseBoolean(propValue);
 
         if (optionEnabled) {
@@ -483,7 +473,7 @@ public class CompilerConfiguration {
      *
      * @param configuration The configuration to copy.
      */
-    public CompilerConfiguration(CompilerConfiguration configuration) {
+    public CompilerConfiguration(final CompilerConfiguration configuration) {
         setWarningLevel(configuration.getWarningLevel());
         setTargetDirectory(configuration.getTargetDirectory());
         setClasspathList(new LinkedList<String>(configuration.getClasspath()));
@@ -500,13 +490,13 @@ public class CompilerConfiguration {
         setSourceEncoding(configuration.getSourceEncoding());
         Map<String, Object> jointCompilationOptions = 
configuration.getJointCompilationOptions();
         if (jointCompilationOptions != null) {
-            jointCompilationOptions = new HashMap<String, 
Object>(jointCompilationOptions);
+            jointCompilationOptions = new HashMap<>(jointCompilationOptions);
         }
         setJointCompilationOptions(jointCompilationOptions);
         setPluginFactory(configuration.getPluginFactory());
         
setDisabledGlobalASTTransformations(configuration.getDisabledGlobalASTTransformations());
-        setScriptExtensions(new 
LinkedHashSet<String>(configuration.getScriptExtensions()));
-        setOptimizationOptions(new HashMap<String, 
Boolean>(configuration.getOptimizationOptions()));
+        setScriptExtensions(new 
LinkedHashSet<>(configuration.getScriptExtensions()));
+        setOptimizationOptions(new 
HashMap<>(configuration.getOptimizationOptions()));
         setBytecodePostprocessor(configuration.getBytecodePostprocessor());
     }
 
@@ -561,7 +551,7 @@ public class CompilerConfiguration {
      *
      * @param configuration The properties to get flag values from.
      */
-    public CompilerConfiguration(Properties configuration) throws 
ConfigurationException {
+    public CompilerConfiguration(final Properties configuration) throws 
ConfigurationException {
         this();
         configure(configuration);
     }
@@ -572,7 +562,7 @@ public class CompilerConfiguration {
      * @param bytecodeVersion The parameter can take one of the values in 
{@link #ALLOWED_JDKS}.
      * @return true if the bytecode version is JDK 1.5+
      */
-    public static boolean isPostJDK5(String bytecodeVersion) {
+    public static boolean isPostJDK5(final String bytecodeVersion) {
         return new BigDecimal(bytecodeVersion).compareTo(new BigDecimal(JDK5)) 
>= 0;
     }
 
@@ -582,7 +572,7 @@ public class CompilerConfiguration {
      * @param bytecodeVersion The parameter can take one of the values in 
{@link #ALLOWED_JDKS}.
      * @return true if the bytecode version is JDK 1.7+
      */
-    public static boolean isPostJDK7(String bytecodeVersion) {
+    public static boolean isPostJDK7(final String bytecodeVersion) {
         return new BigDecimal(bytecodeVersion).compareTo(new BigDecimal(JDK7)) 
>= 0;
     }
 
@@ -592,7 +582,7 @@ public class CompilerConfiguration {
      * @param bytecodeVersion The parameter can take one of the values in 
{@link #ALLOWED_JDKS}.
      * @return true if the bytecode version is JDK 1.8+
      */
-    public static boolean isPostJDK8(String bytecodeVersion) {
+    public static boolean isPostJDK8(final String bytecodeVersion) {
         return new BigDecimal(bytecodeVersion).compareTo(new BigDecimal(JDK8)) 
>= 0;
     }
 
@@ -602,7 +592,7 @@ public class CompilerConfiguration {
      * @param bytecodeVersion The parameter can take one of the values in 
{@link #ALLOWED_JDKS}.
      * @return true if the bytecode version is JDK 9.0+
      */
-    public static boolean isPostJDK9(String bytecodeVersion) {
+    public static boolean isPostJDK9(final String bytecodeVersion) {
         return new BigDecimal(bytecodeVersion).compareTo(new BigDecimal(JDK9)) 
>= 0;
     }
 
@@ -611,7 +601,7 @@ public class CompilerConfiguration {
      * For a list of available properties look at {@link 
#CompilerConfiguration(Properties)}.
      * @param configuration The properties to get flag values from.
      */
-    public void configure(Properties configuration) throws 
ConfigurationException {
+    public void configure(final Properties configuration) throws 
ConfigurationException {
         String text;
         int numeric;
 
@@ -695,7 +685,7 @@ public class CompilerConfiguration {
         text = 
configuration.getProperty("groovy.disabled.global.ast.transformations");
         if (text != null) {
             String[] classNames = text.split(",\\s*}");
-            Set<String> blacklist = new 
HashSet<String>(Arrays.asList(classNames));
+            Set<String> blacklist = new HashSet<>(Arrays.asList(classNames));
             setDisabledGlobalASTTransformations(blacklist);
         }
     }
@@ -711,11 +701,10 @@ public class CompilerConfiguration {
     /**
      * Sets the warning level. See {@link WarningMessage} for level details.
      */
-    public void setWarningLevel(int level) {
+    public void setWarningLevel(final int level) {
         if (level < WarningMessage.NONE || level > WarningMessage.PARANOIA) {
             this.warningLevel = WarningMessage.LIKELY_ERRORS;
-        }
-        else {
+        } else {
             this.warningLevel = level;
         }
     }
@@ -730,13 +719,12 @@ public class CompilerConfiguration {
     /**
      * Sets the encoding to be used when reading source files.
      */
-    public void setSourceEncoding(String encoding) {
+    public void setSourceEncoding(final String encoding) {
         setSourceEncodingOrDefault(encoding);
     }
 
-    private void setSourceEncodingOrDefault(String encoding) {
-        if (encoding == null) encoding = DEFAULT_SOURCE_ENCODING;
-        this.sourceEncoding = encoding;
+    private void setSourceEncodingOrDefault(final String encoding) {
+        this.sourceEncoding = 
Optional.ofNullable(encoding).orElse(DEFAULT_SOURCE_ENCODING);
     }
 
     /**
@@ -753,7 +741,7 @@ public class CompilerConfiguration {
      * @deprecated not used anymore, has no effect
      */
     @Deprecated
-    public void setOutput(PrintWriter output) {
+    public void setOutput(final PrintWriter output) {
         if (output == null) {
             this.output = new PrintWriter(NullWriter.DEFAULT);
         } else {
@@ -771,11 +759,11 @@ public class CompilerConfiguration {
     /**
      * Sets the target directory.
      */
-    public void setTargetDirectory(String directory) {
+    public void setTargetDirectory(final String directory) {
         setTargetDirectorySafe(directory);
     }
 
-    private void setTargetDirectorySafe(String directory) {
+    private void setTargetDirectorySafe(final String directory) {
         if (directory != null && directory.length() > 0) {
             this.targetDirectory = new File(directory);
         } else {
@@ -786,7 +774,7 @@ public class CompilerConfiguration {
     /**
      * Sets the target directory.
      */
-    public void setTargetDirectory(File directory) {
+    public void setTargetDirectory(final File directory) {
         this.targetDirectory = directory;
     }
 
@@ -800,8 +788,8 @@ public class CompilerConfiguration {
     /**
      * Sets the classpath.
      */
-    public void setClasspath(String classpath) {
-        this.classpath = new LinkedList<String>();
+    public void setClasspath(final String classpath) {
+        this.classpath = new LinkedList<>();
         StringTokenizer tokenizer = new StringTokenizer(classpath, 
File.pathSeparator);
         while (tokenizer.hasMoreTokens()) {
             this.classpath.add(tokenizer.nextToken());
@@ -812,8 +800,8 @@ public class CompilerConfiguration {
      * sets the classpath using a list of Strings
      * @param parts list of strings containing the classpath parts
      */
-    public void setClasspathList(List<String> parts) {
-        this.classpath = new LinkedList<String>(parts);
+    public void setClasspathList(final List<String> parts) {
+        this.classpath = new LinkedList<>(parts);
     }
 
     /**
@@ -826,7 +814,7 @@ public class CompilerConfiguration {
     /**
      * Turns verbose operation on or off.
      */
-    public void setVerbose(boolean verbose) {
+    public void setVerbose(final boolean verbose) {
         this.verbose = verbose;
     }
 
@@ -840,7 +828,7 @@ public class CompilerConfiguration {
     /**
      * Turns debugging operation on or off.
      */
-    public void setDebug(boolean debug) {
+    public void setDebug(final boolean debug) {
         this.debug = debug;
     }
 
@@ -854,7 +842,7 @@ public class CompilerConfiguration {
     /**
      * Turns parameter metadata generation on or off.
      */
-    public void setParameters(boolean parameters) {
+    public void setParameters(final boolean parameters) {
         this.parameters = parameters;
     }
 
@@ -870,7 +858,7 @@ public class CompilerConfiguration {
      * non-fatal errors (per unit) that should be tolerated before
      * compilation is aborted.
      */
-    public void setTolerance(int tolerance) {
+    public void setTolerance(final int tolerance) {
         this.tolerance = tolerance;
     }
 
@@ -886,7 +874,7 @@ public class CompilerConfiguration {
      * Sets the name of the base class for scripts.  It must be a subclass
      * of Script.
      */
-    public void setScriptBaseClass(String scriptBaseClass) {
+    public void setScriptBaseClass(final String scriptBaseClass) {
         this.scriptBaseClass = scriptBaseClass;
     }
 
@@ -898,25 +886,23 @@ public class CompilerConfiguration {
         return pluginFactory;
     }
 
-    public void setPluginFactory(ParserPluginFactory pluginFactory) {
+    public void setPluginFactory(final ParserPluginFactory pluginFactory) {
         this.pluginFactory = pluginFactory;
     }
 
-    public void setScriptExtensions(Set<String> scriptExtensions) {
-        if(scriptExtensions == null) scriptExtensions = new 
LinkedHashSet<String>();
-        this.scriptExtensions = scriptExtensions;
+    public void setScriptExtensions(final Set<String> scriptExtensions) {
+        this.scriptExtensions = 
Optional.ofNullable(scriptExtensions).orElseGet(() -> new LinkedHashSet<>());
     }
 
     public Set<String> getScriptExtensions() {
-        if(scriptExtensions == null || scriptExtensions.isEmpty()) {
+        if (scriptExtensions == null || scriptExtensions.isEmpty()) {
             /*
              *  this happens
              *  *    when groovyc calls FileSystemCompiler in forked mode, or
              *  *    when FileSystemCompiler is run from the command line 
directly, or
              *  *    when groovy was not started using groovyc or 
FileSystemCompiler either
              */
-            scriptExtensions = SourceExtensionHandler.getRegisteredExtensions(
-                    this.getClass().getClassLoader());
+            scriptExtensions = 
SourceExtensionHandler.getRegisteredExtensions(getClass().getClassLoader());
         }
         return scriptExtensions;
     }
@@ -925,37 +911,37 @@ public class CompilerConfiguration {
         return defaultScriptExtension;
     }
 
-    public void setDefaultScriptExtension(String defaultScriptExtension) {
+    public void setDefaultScriptExtension(final String defaultScriptExtension) 
{
         this.defaultScriptExtension = defaultScriptExtension;
     }
 
-    public void setRecompileGroovySource(boolean recompile) {
-        recompileGroovySource = recompile;
-    }
-
-    public boolean getRecompileGroovySource(){
+    public boolean getRecompileGroovySource() {
         return recompileGroovySource;
     }
 
-    public void setMinimumRecompilationInterval(int time) {
-        minimumRecompilationInterval = Math.max(0,time);
+    public void setRecompileGroovySource(final boolean recompile) {
+        recompileGroovySource = recompile;
     }
 
     public int getMinimumRecompilationInterval() {
         return minimumRecompilationInterval;
     }
 
+    public void setMinimumRecompilationInterval(final int time) {
+        minimumRecompilationInterval = Math.max(0,time);
+    }
+
     /**
      * Sets the bytecode compatibility level. The parameter can take one of 
the values
      * in {@link #ALLOWED_JDKS}.
      *
      * @param version the bytecode compatibility level
      */
-    public void setTargetBytecode(String version) {
+    public void setTargetBytecode(final String version) {
         setTargetBytecodeIfValid(version);
     }
 
-    private void setTargetBytecodeIfValid(String version) {
+    private void setTargetBytecodeIfValid(final String version) {
         if (JDK_TO_BYTECODE_VERSION_MAP.containsKey(version)) {
             this.targetBytecode = version;
         }
@@ -985,7 +971,7 @@ public class CompilerConfiguration {
      *
      * @param previewFeatures whether to support preview features
      */
-    public void setPreviewFeatures(boolean previewFeatures) {
+    public void setPreviewFeatures(final boolean previewFeatures) {
         this.previewFeatures = previewFeatures;
     }
 
@@ -1006,7 +992,7 @@ public class CompilerConfiguration {
      * Using null will disable joint compilation.
      * @param options the options
      */
-    public void setJointCompilationOptions(Map<String, Object> options) {
+    public void setJointCompilationOptions(final Map<String, Object> options) {
         jointCompilationOptions = options;
     }
 
@@ -1026,7 +1012,7 @@ public class CompilerConfiguration {
      * @param options the options.
      * @throws IllegalArgumentException if the options are null
      */
-    public void setOptimizationOptions(Map<String, Boolean> options) {
+    public void setOptimizationOptions(final Map<String, Boolean> options) {
         if (options == null) throw new IllegalArgumentException("provided 
option map must not be null");
         optimizationOptions = options;
     }
@@ -1037,7 +1023,7 @@ public class CompilerConfiguration {
      * @param customizers the list of customizers to be added
      * @return this configuration instance
      */
-    public CompilerConfiguration 
addCompilationCustomizers(CompilationCustomizer... customizers) {
+    public CompilerConfiguration addCompilationCustomizers(final 
CompilationCustomizer... customizers) {
         if (customizers == null) throw new IllegalArgumentException("provided 
customizers list must not be null");
         Collections.addAll(compilationCustomizers, customizers);
         return this;
@@ -1113,7 +1099,7 @@ public class CompilerConfiguration {
      * Checks if in-memory stub creation is enabled.
      */
     public boolean isMemStubEnabled() {
-        Object memStubEnabled = getJointCompilationOptions().get(MEM_STUB);
-        return Optional.ofNullable(memStubEnabled).map(value -> 
Boolean.parseBoolean(value.toString())).orElse(Boolean.FALSE).booleanValue();
+        return Optional.ofNullable(getJointCompilationOptions()).map(opts -> 
opts.get(MEM_STUB))
+                
.map(Object::toString).map(Boolean::valueOf).orElse(Boolean.FALSE).booleanValue();
     }
 }
diff --git 
a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java 
b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
index 411aaad..c29e973 100644
--- a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
+++ b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
@@ -18,65 +18,59 @@
  */
 package org.codehaus.groovy.control;
 
-import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.control.messages.WarningMessage;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.Collections;
 import java.util.Properties;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
 /**
  * Make sure CompilerConfiguration works.
  */
-public class CompilerConfigurationTest extends GroovyTestCase {
-    Properties savedProperties;
+public final class CompilerConfigurationTest {
 
-    // Use setUp/tearDown to avoid mucking with system properties for other 
tests...
+    private Properties savedProperties;
 
+    @Before
     public void setUp() {
         savedProperties = System.getProperties();
         System.setProperties(new Properties(savedProperties));
     }
 
+    @After
     public void tearDown() {
         System.setProperties(savedProperties);
     }
 
+    @Test
     public void testDefaultConstructor() {
-        final CompilerConfiguration config = CompilerConfiguration.DEFAULT;
+        CompilerConfiguration config = CompilerConfiguration.DEFAULT;
 
         assertEquals(WarningMessage.LIKELY_ERRORS, config.getWarningLevel());
         assertEquals(Boolean.getBoolean("groovy.output.debug"), 
config.getDebug());
         assertEquals(Boolean.getBoolean("groovy.output.verbose"), 
config.getVerbose());
-        assertEquals(false, config.getDebug());
-        assertEquals(false, config.getVerbose());
         assertEquals(10, config.getTolerance());
         assertEquals(100, config.getMinimumRecompilationInterval());
-        assertNull(config.getScriptBaseClass());
-        assertEquals(getSystemEncoding(), config.getSourceEncoding());
-        assertEquals(getVMVersion(), config.getTargetBytecode());
-        assertEquals(false, config.getRecompileGroovySource());
-        {
-            final List listCP = config.getClasspath();
-            assertNotNull(listCP);
-            assertEquals(0, listCP.size());
-        }
-        assertNull(config.getTargetDirectory());
+        assertEquals(System.getProperty("file.encoding", 
CompilerConfiguration.DEFAULT_SOURCE_ENCODING), config.getSourceEncoding());
+        assertEquals(CompilerConfiguration.JDK8, config.getTargetBytecode());
+        assertEquals(Boolean.FALSE, config.getRecompileGroovySource());
+        assertEquals(Collections.emptyList(), config.getClasspath());
         assertEquals(".groovy", config.getDefaultScriptExtension());
-        assertTrue(0 == config.getJointCompilationOptions().size());
+        assertEquals(Collections.emptyMap(), config.getOptimizationOptions());
+        assertNull(config.getJointCompilationOptions());
         assertNotNull(config.getPluginFactory());
+        assertNull(config.getScriptBaseClass());
+        assertNull(config.getTargetDirectory());
     }
 
-    private String getSystemEncoding() {
-        return System.getProperty("file.encoding", 
CompilerConfiguration.DEFAULT_SOURCE_ENCODING);
-    }
-
-    private static String getVMVersion() {
-        return CompilerConfiguration.JDK8;
-    }
-
+    @Test
     public void testSetViaSystemProperties() {
         System.setProperty("groovy.warnings", "PaRaNoiA");
         System.setProperty("groovy.output.verbose", "trUE");
@@ -84,31 +78,28 @@ public class CompilerConfigurationTest extends 
GroovyTestCase {
 
         assertEquals("PaRaNoiA", System.getProperty("groovy.warnings"));
 
-        final CompilerConfiguration config = new 
CompilerConfiguration(System.getProperties());
+        CompilerConfiguration config = new 
CompilerConfiguration(System.getProperties());
 
         assertEquals(WarningMessage.PARANOIA, config.getWarningLevel());
-        assertEquals(false, config.getDebug());
-        assertEquals(true, config.getVerbose());
+        assertEquals(Boolean.FALSE, config.getDebug());
+        assertEquals(Boolean.TRUE, config.getVerbose());
         assertEquals(10, config.getTolerance());
         assertEquals(867892345, config.getMinimumRecompilationInterval());
-        assertNull(config.getScriptBaseClass());
-        assertEquals(getSystemEncoding(), config.getSourceEncoding());
-        assertEquals(getVMVersion(), config.getTargetBytecode());
-        assertEquals(false, config.getRecompileGroovySource());
-        {
-            final List listCP = config.getClasspath();
-            assertNotNull(listCP);
-            assertEquals(0, listCP.size());
-        }
-        assertNull(config.getTargetDirectory());
+        assertEquals(CompilerConfiguration.DEFAULT.getSourceEncoding(), 
config.getSourceEncoding());
+        assertEquals(CompilerConfiguration.DEFAULT.getTargetBytecode(), 
config.getTargetBytecode());
+        assertEquals(Boolean.FALSE, config.getRecompileGroovySource());
+        assertEquals(Collections.emptyList(), config.getClasspath());
         assertEquals(".groovy", config.getDefaultScriptExtension());
-        assertTrue(0 == config.getJointCompilationOptions().size());
+        assertEquals(Collections.emptyMap(), config.getOptimizationOptions());
+        assertNull(config.getJointCompilationOptions());
         assertNotNull(config.getPluginFactory());
+        assertNull(config.getScriptBaseClass());
+        assertNull(config.getTargetDirectory());
     }
 
+    @Test
     public void testCopyConstructor1() {
-        final CompilerConfiguration init = new CompilerConfiguration();
-
+        CompilerConfiguration init = new CompilerConfiguration();
         init.setWarningLevel(WarningMessage.POSSIBLE_ERRORS);
         init.setDebug(true);
         init.setParameters(true);
@@ -117,64 +108,55 @@ public class CompilerConfigurationTest extends 
GroovyTestCase {
         init.setMinimumRecompilationInterval(234);
         init.setScriptBaseClass("blarg.foo.WhatSit");
         init.setSourceEncoding("LEAD-123");
-        init.setTargetBytecode(CompilerConfiguration.POST_JDK5);
+        init.setTargetBytecode(CompilerConfiguration.JDK5);
         init.setRecompileGroovySource(true);
         init.setClasspath("File1" + File.pathSeparator + "Somewhere");
-
-        final File initTDFile = new File("A wandering path");
-        init.setTargetDirectory(initTDFile);
+        File tergetDirectory = new File("A wandering path");
+        init.setTargetDirectory(tergetDirectory);
         init.setDefaultScriptExtension(".jpp");
-
-        final Map initJoint = new HashMap();
-        initJoint.put("somekey", "somevalue");
-        init.setJointCompilationOptions(initJoint);
-
-        final ParserPluginFactory initPPF = ParserPluginFactory.antlr4(init);
-        init.setPluginFactory(initPPF);
+        init.setJointCompilationOptions(Collections.singletonMap("somekey", 
"somevalue"));
+        ParserPluginFactory pluginFactory = ParserPluginFactory.antlr4(init);
+        init.setPluginFactory(pluginFactory);
 
         assertEquals(WarningMessage.POSSIBLE_ERRORS, init.getWarningLevel());
         assertEquals(true, init.getDebug());
         assertEquals(true, init.getParameters());
-        assertEquals(false, init.getVerbose());
+        assertEquals(Boolean.FALSE, init.getVerbose());
         assertEquals(720, init.getTolerance());
         assertEquals(234, init.getMinimumRecompilationInterval());
         assertEquals("blarg.foo.WhatSit", init.getScriptBaseClass());
         assertEquals("LEAD-123", init.getSourceEncoding());
-        assertEquals(CompilerConfiguration.POST_JDK5, 
init.getTargetBytecode());
+        assertEquals(CompilerConfiguration.JDK5, init.getTargetBytecode());
         assertEquals(true, init.getRecompileGroovySource());
-        {
-            final List listCP = init.getClasspath();
-            assertEquals("File1", listCP.get(0));
-            assertEquals("Somewhere", listCP.get(1));
-        }
-        assertEquals(initTDFile, init.getTargetDirectory());
+        assertEquals("File1", init.getClasspath().get(0));
+        assertEquals("Somewhere", init.getClasspath().get(1));
+        assertEquals(tergetDirectory, init.getTargetDirectory());
         assertEquals(".jpp", init.getDefaultScriptExtension());
-        assertEquals(initJoint, init.getJointCompilationOptions());
-        assertEquals(initPPF, init.getPluginFactory());
+        assertEquals("somevalue", 
init.getJointCompilationOptions().get("somekey"));
+        assertEquals(pluginFactory, init.getPluginFactory());
+
+        //
 
-        final CompilerConfiguration config = new CompilerConfiguration(init);
+        CompilerConfiguration config = new CompilerConfiguration(init);
 
         assertEquals(WarningMessage.POSSIBLE_ERRORS, config.getWarningLevel());
-        assertEquals(true, config.getDebug());
-        assertEquals(false, config.getVerbose());
+        assertEquals(Boolean.TRUE, config.getDebug());
+        assertEquals(Boolean.FALSE, config.getVerbose());
         assertEquals(720, config.getTolerance());
         assertEquals(234, config.getMinimumRecompilationInterval());
         assertEquals("blarg.foo.WhatSit", config.getScriptBaseClass());
         assertEquals("LEAD-123", config.getSourceEncoding());
-        assertEquals(CompilerConfiguration.POST_JDK5, 
config.getTargetBytecode());
-        assertEquals(true, config.getRecompileGroovySource());
-        {
-            final List listCP = config.getClasspath();
-            assertEquals("File1", listCP.get(0));
-            assertEquals("Somewhere", listCP.get(1));
-        }
-        assertEquals(initTDFile, config.getTargetDirectory());
+        assertEquals(CompilerConfiguration.JDK5, config.getTargetBytecode());
+        assertEquals(Boolean.TRUE, config.getRecompileGroovySource());
+        assertEquals("File1", config.getClasspath().get(0));
+        assertEquals("Somewhere", config.getClasspath().get(1));
+        assertEquals(tergetDirectory, config.getTargetDirectory());
         assertEquals(".jpp", config.getDefaultScriptExtension());
-        assertEquals(initJoint, config.getJointCompilationOptions());
-        assertEquals(initPPF, config.getPluginFactory());
-
+        assertEquals("somevalue", 
config.getJointCompilationOptions().get("somekey"));
+        assertEquals(pluginFactory, config.getPluginFactory());
     }
 
+    @Test
     public void testCopyConstructor2() {
         final CompilerConfiguration init = new CompilerConfiguration();
 
@@ -186,45 +168,39 @@ public class CompilerConfigurationTest extends 
GroovyTestCase {
         init.setMinimumRecompilationInterval(975);
         init.setScriptBaseClass("");
         init.setSourceEncoding("Gutenberg");
-        init.setTargetBytecode(CompilerConfiguration.PRE_JDK5);
+        init.setTargetBytecode(CompilerConfiguration.JDK5);
         init.setRecompileGroovySource(false);
         init.setClasspath("");
-
-        final File initTDFile = new File("A wandering path");
-        init.setTargetDirectory(initTDFile);
+        File tergetDirectory = new File("A wandering path");
+        init.setTargetDirectory(tergetDirectory);
 
         assertEquals(WarningMessage.POSSIBLE_ERRORS, init.getWarningLevel());
-        assertEquals(false, init.getDebug());
-        assertEquals(false, init.getParameters());
-        assertEquals(true, init.getVerbose());
+        assertEquals(Boolean.FALSE, init.getDebug());
+        assertEquals(Boolean.FALSE, init.getParameters());
+        assertEquals(Boolean.TRUE, init.getVerbose());
         assertEquals(55, init.getTolerance());
         assertEquals(975, init.getMinimumRecompilationInterval());
         assertEquals("", init.getScriptBaseClass());
         assertEquals("Gutenberg", init.getSourceEncoding());
-        assertEquals(CompilerConfiguration.PRE_JDK5, init.getTargetBytecode());
-        assertEquals(false, init.getRecompileGroovySource());
-        {
-            final List listCP = init.getClasspath();
-            assertNotNull(listCP);
-            assertEquals(0, listCP.size());
-        }
-        assertEquals(initTDFile, init.getTargetDirectory());
+        assertEquals(CompilerConfiguration.JDK5, init.getTargetBytecode());
+        assertEquals(Boolean.FALSE, init.getRecompileGroovySource());
+        assertEquals(Collections.emptyList(), init.getClasspath());
+        assertEquals(tergetDirectory, init.getTargetDirectory());
+
+        //
 
-        final CompilerConfiguration config = new CompilerConfiguration(init);
+        CompilerConfiguration config = new CompilerConfiguration(init);
 
         assertEquals(WarningMessage.POSSIBLE_ERRORS, config.getWarningLevel());
-        assertEquals(false, config.getDebug());
-        assertEquals(true, config.getVerbose());
+        assertEquals(Boolean.FALSE, config.getDebug());
+        assertEquals(Boolean.TRUE, config.getVerbose());
         assertEquals(55, config.getTolerance());
         assertEquals(975, config.getMinimumRecompilationInterval());
         assertEquals("", config.getScriptBaseClass());
         assertEquals("Gutenberg", config.getSourceEncoding());
-        assertEquals(CompilerConfiguration.PRE_JDK5, 
config.getTargetBytecode());
-        assertEquals(false, config.getRecompileGroovySource());
-        {
-            final List listCP = config.getClasspath();
-            assertEquals(0, listCP.size());
-        }
-        assertEquals(initTDFile, config.getTargetDirectory());
+        assertEquals(CompilerConfiguration.JDK5, config.getTargetBytecode());
+        assertEquals(Boolean.FALSE, config.getRecompileGroovySource());
+        assertEquals(Collections.emptyList(), config.getClasspath());
+        assertEquals(tergetDirectory, config.getTargetDirectory());
     }
 }
diff --git 
a/subprojects/groovy-ant/src/test/groovy/groovy/ant/AntTestCase.groovy 
b/subprojects/groovy-ant/src/test/groovy/groovy/ant/AntTestCase.groovy
index 18fb16e..5e0509a 100644
--- a/subprojects/groovy-ant/src/test/groovy/groovy/ant/AntTestCase.groovy
+++ b/subprojects/groovy-ant/src/test/groovy/groovy/ant/AntTestCase.groovy
@@ -19,16 +19,19 @@
 package groovy.ant
 
 import groovy.test.GroovyTestCase
+import groovy.transform.stc.ClosureParams
+import groovy.transform.stc.SimpleType
 
 abstract class AntTestCase extends GroovyTestCase {
-    protected void doInTmpDir(Closure cl) {
+
+    protected void doInTmpDir(@ClosureParams(value=SimpleType, 
options=['groovy.ant.AntBuilder','groovy.util.FileTreeBuilder']) Closure<Void> 
block) {
         // tag::create_zip_builder[]
         def ant = new AntBuilder()
         // end::create_zip_builder[]
         def baseDir = File.createTempDir()
         ant.project.baseDir = baseDir
         try {
-            cl.call(ant, new FileTreeBuilder(baseDir))
+            block.call(ant, new FileTreeBuilder(baseDir))
         } finally {
             baseDir.deleteDir()
         }
diff --git 
a/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy9352Test.groovy 
b/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy9352Test.groovy
index a53b60f..dba50587 100644
--- a/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy9352Test.groovy
+++ b/subprojects/groovy-ant/src/test/groovy/groovy/ant/Groovy9352Test.groovy
@@ -18,7 +18,8 @@
  */
 package groovy.ant
 
-class Groovy9352Test extends AntTestCase {
+final class Groovy9352Test extends AntTestCase {
+
     void test() {
         doInTmpDir { ant, baseDir ->
             baseDir.src {
@@ -27,14 +28,13 @@ class Groovy9352Test extends AntTestCase {
                         package p1
                         import groovy.transform.CompileStatic
                         import p2.Producer
-                        
+
                         @CompileStatic
                         class Consumer {
                            void doSomething(Producer producer) {
                               // this shouldn't trigger a compile error
                               producer.foo()
                            }
-                        
                         }
                     ''')
                 }
@@ -43,22 +43,22 @@ class Groovy9352Test extends AntTestCase {
                         package p2;
                         import java.util.List;
                         import java.util.ArrayList;
-                        
+
                         public class Producer {
                            public void foo() {}
-                        
+
                            // the following members are private, they 
shouldn't leak into the public API
                            private Gson gson;
                            private Gson gson2 = new SubGson();
                            private List<Gson> gsonList;
                            @GsonAnnotation
                            private List<? extends Gson> gsonList2 = new 
ArrayList<SubGson>();
-                           
+
                            @GsonAnnotation
                            private Producer(Gson p) {}
                            private Producer(int p) throws Gson {}
                            private Producer() { gson = new Gson(); }
-                           
+
                            @GsonAnnotation
                            private void bar(Gson p) {}
                            private Gson bar() { return null;}
@@ -82,7 +82,7 @@ class Groovy9352Test extends AntTestCase {
                         import java.lang.annotation.Retention;
                         import java.lang.annotation.RetentionPolicy;
                         import java.lang.annotation.Target;
-                        
+
                         @Target({ElementType.TYPE, 
ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, 
ElementType.CONSTRUCTOR})
                         @Retention(RetentionPolicy.RUNTIME)
                         @interface GsonAnnotation {
@@ -92,15 +92,15 @@ class Groovy9352Test extends AntTestCase {
             }
 
             ant.mkdir(dir: 'build')
+
             ant.taskdef(name: 'groovyc', classname: 
'org.codehaus.groovy.ant.Groovyc')
 
             // 1) compile the Java source code only
-            ant.groovyc(srcdir: 'src', destdir: 'build', includes: 'p2/*' /*, 
keepStubs: true*/) {
+            ant.groovyc(srcdir: 'src', destdir: 'build', includes: 'p2/*') {
                 javac()
             }
 
-            // 2) delete `Gson`, `SubGson`, `GsonAnnotation` related files:
-            // "Gson.java", "Gson.class", "SubGson.java", "SubGson.class", 
"GsonAnnotation.java", "GsonAnnotation.class"
+            // 2) delete Gson, SubGson and GsonAnnotation related files:
             assert new File(ant.project.baseDir,"src/p2/Gson.java").delete()
             assert new File(ant.project.baseDir,"build/p2/Gson.class").delete()
             assert new File(ant.project.baseDir,"src/p2/SubGson.java").delete()
@@ -109,7 +109,11 @@ class Groovy9352Test extends AntTestCase {
             assert new 
File(ant.project.baseDir,"build/p2/GsonAnnotation.class").delete()
 
             // 3) compile the Groovy source code
-            ant.groovyc(srcdir: 'src', destdir: 'build', includes: 'p1/*')
+            ant.groovyc(srcdir: 'src', destdir: 'build', includes: 'p1/*') {
+                classpath {
+                    pathelement(path: 'build')
+                }
+            }
         }
     }
 }

Reply via email to