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; } /**
