You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/01/20 00:36:27 UTC

[groovy] branch master updated: move need for compiler configuration up in call graph

This is an automated email from the ASF dual-hosted git repository.

emilles 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 7703c7e  move need for compiler configuration up in call graph
7703c7e is described below

commit 7703c7e58d6df0cc7bf101a54cd36f9198b100e0
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Jan 19 18:24:28 2020 -0600

    move need for compiler configuration up in call graph
---
 .../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 ee09105..e874011 100644
--- a/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
@@ -29,7 +29,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;
     }
 
     /**