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"));

Reply via email to