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 70413f2790466e27e9d915d803562fa7b62e58b3
Author: Eric Milles <[email protected]>
AuthorDate: Sun Jan 19 18:24:28 2020 -0600

    move need for compiler configuration up in call graph
    
    (cherry picked from commit 7703c7e58d6df0cc7bf101a54cd36f9198b100e0)
---
 .../groovy/control/ParserPluginFactory.java        |  2 +-
 .../groovy/parser/antlr4/Antlr4ParserPlugin.java   | 53 +++++++++-------------
 .../groovy/parser/antlr4/Antlr4PluginFactory.java  | 12 +++--
 .../apache/groovy/parser/antlr4/AstBuilder.java    | 11 +++--
 .../groovy/parser/antlr4/GroovydocManager.java     | 15 ++++--
 5 files changed, 50 insertions(+), 43 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java 
b/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
index c34b1d4..495757b 100644
--- a/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
@@ -30,7 +30,7 @@ public abstract class ParserPluginFactory {
      *
      * @return the factory for the parser
      */
-    public static ParserPluginFactory antlr4(CompilerConfiguration 
compilerConfiguration) {
+    public static ParserPluginFactory antlr4(final CompilerConfiguration 
compilerConfiguration) {
         return new Antlr4PluginFactory(compilerConfiguration);
     }
 
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4ParserPlugin.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4ParserPlugin.java
index fa6b381..e8eff46 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4ParserPlugin.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4ParserPlugin.java
@@ -20,61 +20,52 @@ package org.apache.groovy.parser.antlr4;
 
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.ParserPlugin;
 import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.io.ReaderSource;
 import org.codehaus.groovy.control.io.StringReaderSource;
 import org.codehaus.groovy.runtime.IOGroovyMethods;
-import org.codehaus.groovy.syntax.ParserException;
 import org.codehaus.groovy.syntax.Reduction;
 
 import java.io.IOException;
 import java.io.Reader;
+import java.util.Optional;
 
 /**
- * A parser plugin for the new parser
+ * A parser plugin for the new parser.
  */
 public class Antlr4ParserPlugin implements ParserPlugin {
-    private ReaderSource readerSource;
-    private CompilerConfiguration compilerConfiguration;
 
-    public Antlr4ParserPlugin(CompilerConfiguration compilerConfiguration) {
+    private final CompilerConfiguration compilerConfiguration;
+
+    public Antlr4ParserPlugin() {
+        this.compilerConfiguration = null;
+    }
+
+    @Deprecated
+    public Antlr4ParserPlugin(final CompilerConfiguration 
compilerConfiguration) {
         this.compilerConfiguration = compilerConfiguration;
     }
 
     @Override
-    public Reduction parseCST(SourceUnit sourceUnit, java.io.Reader reader) 
throws CompilationFailedException {
-        ReaderSource readerSource = sourceUnit.getSource();
-
-        try (Reader sourceReader = null != readerSource ? 
readerSource.getReader() : null) {
-            if (null != readerSource && null != sourceReader) {
-                this.readerSource = readerSource;
-            } else {
-                this.readerSource = new 
StringReaderSource(IOGroovyMethods.getText(reader), 
sourceUnit.getConfiguration());
+    public Reduction parseCST(final SourceUnit sourceUnit, final Reader 
reader) {
+        if (!sourceUnit.getSource().canReopenSource()) {
+            try {
+                sourceUnit.setSource(new StringReaderSource(
+                        IOGroovyMethods.getText(reader),
+                        sourceUnit.getConfiguration()
+                ));
+            } catch (IOException e) {
+                throw new GroovyBugError("Failed to create 
StringReaderSource", e);
             }
-        } catch (IOException e) {
-            throw new GroovyBugError("Failed to create StringReaderSource 
instance", e);
         }
-
         return null;
     }
 
     @Override
-    public ModuleNode buildAST(SourceUnit sourceUnit, ClassLoader classLoader, 
Reduction cst) throws ParserException {
-        ReaderSource readerSource = sourceUnit.getSource();
-
-        try (Reader sourceReader = null != readerSource ? 
readerSource.getReader() : null) {
-            if (null == readerSource || null == sourceReader) {
-                sourceUnit.setSource(this.readerSource);
-            }
-        } catch (IOException e) {
-            sourceUnit.setSource(this.readerSource);
-        }
-
-        AstBuilder builder = new AstBuilder(sourceUnit, compilerConfiguration);
-
+    public ModuleNode buildAST(final SourceUnit sourceUnit, final ClassLoader 
classLoader, final Reduction cst) {
+        CompilerConfiguration compilerConfiguration = 
Optional.ofNullable(this.compilerConfiguration).orElseGet(sourceUnit::getConfiguration);
+        AstBuilder builder = new AstBuilder(sourceUnit, 
compilerConfiguration.isGroovydocEnabled(), 
compilerConfiguration.isRuntimeGroovydocEnabled());
         return builder.buildAST();
     }
 }
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4PluginFactory.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4PluginFactory.java
index 24363d5..ee433ca 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4PluginFactory.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/Antlr4PluginFactory.java
@@ -23,12 +23,18 @@ import org.codehaus.groovy.control.ParserPlugin;
 import org.codehaus.groovy.control.ParserPluginFactory;
 
 /**
- * A parser plugin factory for the new parser
+ * A parser plugin factory for the new parser.
  */
 public class Antlr4PluginFactory extends ParserPluginFactory {
-    private CompilerConfiguration compilerConfiguration;
 
-    public Antlr4PluginFactory(CompilerConfiguration compilerConfiguration) {
+    private final CompilerConfiguration compilerConfiguration;
+
+    public Antlr4PluginFactory() {
+        this.compilerConfiguration = null;
+    }
+
+    @Deprecated
+    public Antlr4PluginFactory(final CompilerConfiguration 
compilerConfiguration) {
         this.compilerConfiguration = compilerConfiguration;
     }
 
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index e12712c..99df11c 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -336,9 +336,14 @@ import static 
org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
 /**
  * Builds the AST from the parse tree generated by Antlr4.
  */
-public class AstBuilder extends GroovyParserBaseVisitor<Object> implements 
GroovyParserVisitor<Object> {
+public class AstBuilder extends GroovyParserBaseVisitor<Object> {
 
-    public AstBuilder(SourceUnit sourceUnit, CompilerConfiguration 
compilerConfiguration) {
+    @Deprecated
+    public AstBuilder(final SourceUnit sourceUnit, final CompilerConfiguration 
compilerConfiguration) {
+        this(sourceUnit, compilerConfiguration.isGroovydocEnabled(), 
compilerConfiguration.isRuntimeGroovydocEnabled());
+    }
+
+    public AstBuilder(final SourceUnit sourceUnit, final boolean 
groovydocEnabled, final boolean runtimeGroovydocEnabled) {
         this.sourceUnit = sourceUnit;
         this.moduleNode = new ModuleNode(sourceUnit);
         CharStream charStream = createCharStream(sourceUnit);
@@ -347,7 +352,7 @@ public class AstBuilder extends 
GroovyParserBaseVisitor<Object> implements Groov
         this.parser = new GroovyLangParser(new CommonTokenStream(this.lexer));
         this.parser.setErrorHandler(new DescriptiveErrorStrategy(charStream));
 
-        this.groovydocManager = new GroovydocManager(compilerConfiguration);
+        this.groovydocManager = new GroovydocManager(groovydocEnabled, 
runtimeGroovydocEnabled);
         this.tryWithResourcesASTTransformation = new 
TryWithResourcesASTTransformation(this);
     }
 
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
index 227ead7..f872a2d 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
@@ -44,17 +44,22 @@ import static 
org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
  * 3) attach groovydoc to AST node as metadata
  */
 public class GroovydocManager {
+
     public static final String DOC_COMMENT = GroovydocHolder.DOC_COMMENT; // 
keys for meta data
     private static final String GROOVYDOC_PREFIX = "/**";
     private static final String RUNTIME_GROOVYDOC_PREFIX = GROOVYDOC_PREFIX + 
"@";
     private static final String VALUE = "value";
     private static final Pattern SPACES_PATTERN = Pattern.compile("\\s+");
-    private final boolean groovydocEnabled;
-    private final boolean runtimeGroovydocEnabled;
+    private final boolean groovydocEnabled, runtimeGroovydocEnabled;
+
+    @Deprecated
+    public GroovydocManager(final CompilerConfiguration compilerConfiguration) 
{
+        this(compilerConfiguration.isGroovydocEnabled(), 
compilerConfiguration.isRuntimeGroovydocEnabled());
+    }
 
-    public GroovydocManager(CompilerConfiguration compilerConfiguration) {
-        this.groovydocEnabled = compilerConfiguration.isGroovydocEnabled();
-        this.runtimeGroovydocEnabled = 
compilerConfiguration.isRuntimeGroovydocEnabled();
+    public GroovydocManager(final boolean groovydocEnabled, final boolean 
runtimeGroovydocEnabled) {
+        this.groovydocEnabled = groovydocEnabled;
+        this.runtimeGroovydocEnabled = runtimeGroovydocEnabled;
     }
 
     /**

Reply via email to