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') + } + } } } }
