You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/09/26 11:05:43 UTC

[groovy] branch GROOVY_3_0_X updated: adapt to relevant parser

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

paulk pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new 12c192c  adapt to relevant parser
12c192c is described below

commit 12c192c7803dccb9fad1317b0d8b1f6ce9d0474f
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 26 21:05:30 2019 +1000

    adapt to relevant parser
---
 src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java   | 9 +++++++--
 .../text/markup/MarkupTemplateTypeCheckingExtension.groovy       | 8 +++++++-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
index f3c6f92..4831a5d 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
@@ -22,6 +22,7 @@ import groovy.lang.GroovyRuntimeException;
 import groovy.lang.Tuple2;
 import groovy.transform.stc.IncorrectTypeHintException;
 import org.codehaus.groovy.GroovyBugError;
+import org.codehaus.groovy.antlr.AntlrParserPluginFactory;
 import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
@@ -30,8 +31,8 @@ import org.codehaus.groovy.ast.MethodNode;
 import org.codehaus.groovy.ast.ModuleNode;
 import org.codehaus.groovy.ast.Parameter;
 import org.codehaus.groovy.ast.stmt.EmptyStatement;
-import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilationUnit;
+import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.ResolveVisitor;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.runtime.memoize.ConcurrentSoftCache;
@@ -582,7 +583,11 @@ public class GenericsUtils {
             final ASTNode usage) {
 
         try {
-            ClassNode parsedNode = Antlr4Utils.parse("DummyNode<" + option + ">", compilationUnit.getConfiguration());
+            // for parsing just class names old and new parser should be the same but let's stick to the correct parser any way
+            boolean oldParserEnabled = CompilerConfiguration.DEFAULT.getPluginFactory() instanceof AntlrParserPluginFactory;
+            ClassNode parsedNode = oldParserEnabled ?
+                    Antlr2Utils.parse("DummyNode<" + option + ">") :
+                    Antlr4Utils.parse("DummyNode<" + option + ">", compilationUnit.getConfiguration());
 
             // the returned node is DummyNode<Param1, Param2, Param3, ...)
             GenericsType[] parsedNodeGenericsTypes = parsedNode.getGenericsTypes();
diff --git a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateTypeCheckingExtension.groovy b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateTypeCheckingExtension.groovy
index 865068b..ea302da 100644
--- a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateTypeCheckingExtension.groovy
+++ b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateTypeCheckingExtension.groovy
@@ -19,6 +19,7 @@
 package groovy.text.markup
 
 import groovy.transform.CompileStatic
+import org.codehaus.groovy.antlr.AntlrParserPluginFactory
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassCodeExpressionTransformer
 import org.codehaus.groovy.ast.ClassHelper
@@ -36,6 +37,7 @@ import org.codehaus.groovy.ast.expr.MethodCallExpression
 import org.codehaus.groovy.ast.expr.TupleExpression
 import org.codehaus.groovy.ast.expr.VariableExpression
 import org.codehaus.groovy.ast.stmt.EmptyStatement
+import org.codehaus.groovy.ast.tools.Antlr2Utils
 import org.codehaus.groovy.ast.tools.Antlr4Utils
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.ResolveVisitor
@@ -173,7 +175,11 @@ class MarkupTemplateTypeCheckingExtension extends GroovyTypeCheckingExtensionSup
 
     @CompileStatic
     private static ClassNode buildNodeFromString(String option, TypeCheckingContext ctx) {
-        ClassNode parsedNode = Antlr4Utils.parse(option, CompilerConfiguration.DEFAULT)
+        // for parsing just class names old and new parser should be the same but let's stick to the correct parser any way
+        boolean oldParserEnabled = CompilerConfiguration.DEFAULT.pluginFactory instanceof AntlrParserPluginFactory
+        ClassNode parsedNode = oldParserEnabled ?
+                Antlr2Utils.parse(option) :
+                Antlr4Utils.parse(option, CompilerConfiguration.DEFAULT)
         ClassNode dummyClass = new ClassNode("dummy", 0, OBJECT_TYPE)
         dummyClass.setModule(new ModuleNode(ctx.source))
         MethodNode dummyMN = new MethodNode(