This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 363fcb8 GROOVY-9368: handle in-memory stubs system property in
compilation unit
363fcb8 is described below
commit 363fcb894a2a18c4ff735490db98e6de801debc0
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 6aa9aaa..3383d3c 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
@@ -48,16 +48,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. */
@@ -433,12 +433,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) {
@@ -1084,12 +1078,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"));