This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch GROOVY-9368 in repository https://gitbox.apache.org/repos/asf/groovy.git
commit abdc2ddf84d4e96691f5fb02d7ce1c6b55d907ab Author: Eric Milles <[email protected]> AuthorDate: Mon Jan 20 12:38:11 2020 -0600 GROOVY-9368: handle in-memory stubs system property in compilation unit --- .../groovy/control/CompilerConfiguration.java | 22 ++--------- .../codehaus/groovy/tools/FileSystemCompiler.java | 2 +- .../tools/javac/JavaAwareCompilationUnit.java | 44 ++++++++++++---------- .../groovy/control/CompilerConfigurationTest.java | 1 + 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java index 39dd3f5..e929743 100644 --- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java +++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java @@ -47,16 +47,16 @@ import static org.apache.groovy.util.SystemUtil.getSystemPropertySafe; */ public class CompilerConfiguration { - /** This (<code>"indy"</code>) is the Optimization Option value for enabling <code>invokedynamic</code> compilation. */ + /** Optimization Option for enabling <code>invokedynamic</code> compilation. */ public static final String INVOKEDYNAMIC = "indy"; - /** This (<code>"groovydoc"</code>) is the Optimization Option value for enabling attaching groovydoc as AST node metadata. */ + /** Optimization Option for enabling attaching groovydoc as AST node metadata. */ public static final String GROOVYDOC = "groovydoc"; - /** This (<code>"runtimeGroovydoc"</code>) is the Optimization Option value for enabling attaching {@link groovy.lang.Groovydoc} annotation. */ + /** Optimization Option for enabling attaching {@link groovy.lang.Groovydoc} annotation. */ public static final String RUNTIME_GROOVYDOC = "runtimeGroovydoc"; - /** This (<code>"memStub"</code>) is the Joint Compilation Option value for enabling generating stubs in memory. */ + /** Joint Compilation Option for enabling generating stubs in memory. */ public static final String MEM_STUB = "memStub"; /** This (<code>"1.4"</code>) is the value for targetBytecode to compile for a JDK 1.4. */ @@ -437,12 +437,6 @@ public class CompilerConfiguration { handleOptimizationOption(optimizationOptions, INVOKEDYNAMIC, "groovy.target.indy"); handleOptimizationOption(optimizationOptions, GROOVYDOC, "groovy.attach.groovydoc"); handleOptimizationOption(optimizationOptions, RUNTIME_GROOVYDOC, "groovy.attach.runtime.groovydoc"); - - 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 handleOptimizationOption(final Map<String, Boolean> options, final String optionName, final String sysOptionName) { @@ -1092,12 +1086,4 @@ public class CompilerConfiguration { Boolean runtimeGroovydocEnabled = getOptimizationOptions().get(RUNTIME_GROOVYDOC); return Optional.ofNullable(runtimeGroovydocEnabled).orElse(Boolean.FALSE).booleanValue(); } - - /** - * Checks if in-memory stub creation is enabled. - */ - public boolean isMemStubEnabled() { - return Optional.ofNullable(getJointCompilationOptions()).map(opts -> opts.get(MEM_STUB)) - .map(Object::toString).map(Boolean::valueOf).orElse(Boolean.FALSE).booleanValue(); - } } diff --git a/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java b/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java index fa4feca..a7da4b9 100644 --- a/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java +++ b/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java @@ -217,7 +217,7 @@ public class FileSystemCompiler { File tmpDir = null; // if there are any joint compilation options set stubDir if not set try { - if ((configuration.getJointCompilationOptions() != null) + if (configuration.getJointCompilationOptions() != null && !configuration.getJointCompilationOptions().containsKey("stubDir")) { tmpDir = DefaultGroovyStaticMethods.createTempDir(null, "groovy-generated-", "-java-source"); configuration.getJointCompilationOptions().put("stubDir", tmpDir); diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java index f43141b..d2b7800 100644 --- a/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java +++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java @@ -19,6 +19,7 @@ package org.codehaus.groovy.tools.javac; import groovy.lang.GroovyClassLoader; +import org.apache.groovy.util.SystemUtil; import org.codehaus.groovy.ast.ClassNode; import org.codehaus.groovy.ast.GroovyClassVisitor; import org.codehaus.groovy.ast.ModuleNode; @@ -44,7 +45,7 @@ import java.util.Map; public class JavaAwareCompilationUnit extends CompilationUnit { private final JavaStubGenerator stubGenerator; - private final List<String> javaSources = new LinkedList<String>(); + private final List<String> javaSources = new LinkedList<>(); private JavaCompilerFactory compilerFactory = new JavacCompilerFactory(); private final File generationGoal; private final boolean keepStubs; @@ -54,27 +55,32 @@ public class JavaAwareCompilationUnit extends CompilationUnit { this(null, null, null); } - public JavaAwareCompilationUnit(CompilerConfiguration configuration) { + public JavaAwareCompilationUnit(final CompilerConfiguration configuration) { this(configuration, null, null); } - public JavaAwareCompilationUnit(CompilerConfiguration configuration, GroovyClassLoader groovyClassLoader) { + public JavaAwareCompilationUnit(final CompilerConfiguration configuration, final GroovyClassLoader groovyClassLoader) { this(configuration, groovyClassLoader, null); } - public JavaAwareCompilationUnit(CompilerConfiguration configuration, GroovyClassLoader groovyClassLoader, - GroovyClassLoader transformClassLoader) { + public JavaAwareCompilationUnit(final CompilerConfiguration configuration, final GroovyClassLoader groovyClassLoader, final GroovyClassLoader transformClassLoader) { super(configuration, null, groovyClassLoader, transformClassLoader); - this.memStubEnabled = this.configuration.isMemStubEnabled(); - Map<String, Object> options = this.configuration.getJointCompilationOptions(); - this.generationGoal = memStubEnabled ? null : (File) options.get("stubDir"); + { + Map<String, Object> options = this.configuration.getJointCompilationOptions(); - boolean useJava5 = CompilerConfiguration.isPostJDK5(this.configuration.getTargetBytecode()); - String encoding = this.configuration.getSourceEncoding(); + boolean atLeastJava5 = CompilerConfiguration.isPostJDK5(this.configuration.getTargetBytecode()); + String sourceEncoding = this.configuration.getSourceEncoding(); + Object memStub = options.get(CompilerConfiguration.MEM_STUB); + if (memStub == null) { + memStub = SystemUtil.getSystemPropertySafe("groovy.generate.stub.in.memory", "false"); + } - this.stubGenerator = new JavaStubGenerator(generationGoal, false, useJava5, encoding); - this.keepStubs = Boolean.TRUE.equals(options.get("keepStubs")); + this.keepStubs = Boolean.TRUE.equals(options.get("keepStubs")); + this.memStubEnabled = Boolean.parseBoolean(memStub.toString()); + this.generationGoal = memStubEnabled ? null : (File) options.get("stubDir"); + this.stubGenerator = new JavaStubGenerator(generationGoal, false, atLeastJava5, sourceEncoding); + } addPhaseOperation((final SourceUnit source, final GeneratorContext context, final ClassNode classNode) -> { if (!javaSources.isEmpty()) { @@ -99,7 +105,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit { } @Override - public void gotoPhase(int phase) throws CompilationFailedException { + public void gotoPhase(final int phase) throws CompilationFailedException { super.gotoPhase(phase); // compile Java and clean up if (phase == Phases.SEMANTIC_ANALYSIS && !javaSources.isEmpty()) { @@ -118,7 +124,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit { } @Override - public void configure(CompilerConfiguration configuration) { + public void configure(final CompilerConfiguration configuration) { super.configure(configuration); // GroovyClassLoader should be able to find classes compiled from java sources File targetDir = this.configuration.getTargetDirectory(); @@ -128,7 +134,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit { } } - private void addJavaSource(File file) { + private void addJavaSource(final File file) { String path = file.getAbsolutePath(); for (String source : javaSources) { if (path.equals(source)) @@ -138,20 +144,20 @@ public class JavaAwareCompilationUnit extends CompilationUnit { } @Override - public void addSources(String[] paths) { + public void addSources(final String[] paths) { for (String path : paths) { addJavaOrGroovySource(new File(path)); } } @Override - public void addSources(File[] files) { + public void addSources(final File[] files) { for (File file : files) { addJavaOrGroovySource(file); } } - private void addJavaOrGroovySource(File file) { + private void addJavaOrGroovySource(final File file) { if (file.getName().endsWith(".java")) { addJavaSource(file); } else { @@ -163,7 +169,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit { return compilerFactory; } - public void setCompilerFactory(JavaCompilerFactory compilerFactory) { + public void setCompilerFactory(final JavaCompilerFactory compilerFactory) { this.compilerFactory = compilerFactory; } } diff --git a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java index bcea2a1..0badf33 100644 --- a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java +++ b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java @@ -73,6 +73,7 @@ public final class CompilerConfigurationTest { public void testSetViaSystemProperties() { System.setProperty("groovy.warnings", "PaRaNoiA"); System.setProperty("groovy.output.verbose", "trUE"); + System.setProperty("groovy.generate.stub.in.memory", "true"); System.setProperty("groovy.recompile.minimumInterval", "867892345"); assertEquals("PaRaNoiA", System.getProperty("groovy.warnings"));
