You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/12/17 03:57:49 UTC

[groovy] 05/05: minor edits

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 19e5949e2d60c3d8e33172ea1d8044897b829602
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Dec 17 10:22:50 2019 +0800

    minor edits
    
    (cherry picked from commit 8fe41a2feff9960a6b9bcd62a1077b32ccde839b)
---
 .../java/org/codehaus/groovy/ast/ClassHelper.java  | 27 +++++++--------
 .../org/codehaus/groovy/ast/VariableScope.java     |  3 +-
 .../groovy/classgen/asm/InvocationWriter.java      |  7 ++--
 .../groovy/control/ParserPluginFactory.java        | 38 ++++------------------
 .../codehaus/groovy/control/ResolveVisitor.java    |  3 +-
 .../groovy/transform/ASTTransformationVisitor.java |  4 +--
 6 files changed, 27 insertions(+), 55 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
index 0a659d2..17bcc8d 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
@@ -68,7 +68,6 @@ import java.math.BigInteger;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
@@ -408,38 +407,36 @@ public class ClassHelper {
         return false;
     }
 
-    /**
-     * Check if the type is a generated function, i.e. closure/lambda
-     * @param type the type to check
-     * @return the check result
-     * @since 3.0.0
-     */
-    public static boolean isGeneratedFunction(ClassNode type) {
-        Objects.requireNonNull(type, "type should not be null");
-        return type.implementsAnyInterfaces(GENERATED_CLOSURE_Type, GENERATED_LAMBDA_TYPE);
-    }
-
     static class ClassHelperCache {
         static ManagedConcurrentMap<Class, SoftReference<ClassNode>> classCache = new ManagedConcurrentMap<Class, SoftReference<ClassNode>>(ReferenceBundle.getWeakBundle());
     }
 
-    public static boolean isSAMType(ClassNode type) {
+    public static boolean isSAMType(final ClassNode type) {
         return findSAM(type) != null;
     }
 
-    public static boolean isFunctionalInterface(ClassNode type) {
+    public static boolean isFunctionalInterface(final ClassNode type) {
         // Functional interface must be an interface at first, or the following exception will occur:
         // java.lang.invoke.LambdaConversionException: Functional interface SamCallable is not an interface
         return type.isInterface() && isSAMType(type);
     }
 
     /**
+     * Checks if the type is a generated function, i.e. closure or lambda.
+     *
+     * @since 3.0.0
+     */
+    public static boolean isGeneratedFunction(final ClassNode type) {
+        return type.implementsAnyInterfaces(GENERATED_CLOSURE_Type, GENERATED_LAMBDA_TYPE);
+    }
+
+    /**
      * Returns the single abstract method of a class node, if it is a SAM type, or null otherwise.
      *
      * @param type a type for which to search for a single abstract method
      * @return the method node if type is a SAM type, null otherwise
      */
-    public static MethodNode findSAM(ClassNode type) {
+    public static MethodNode findSAM(final ClassNode type) {
         if (!Modifier.isAbstract(type.getModifiers())) return null;
         if (type.isInterface()) {
             List<MethodNode> methods;
diff --git a/src/main/java/org/codehaus/groovy/ast/VariableScope.java b/src/main/java/org/codehaus/groovy/ast/VariableScope.java
index 4b0fbfc..942cfd5 100644
--- a/src/main/java/org/codehaus/groovy/ast/VariableScope.java
+++ b/src/main/java/org/codehaus/groovy/ast/VariableScope.java
@@ -27,7 +27,7 @@ import java.util.Map;
  * Records declared and referenced variabes for a given scope.  Helps determine
  * variable sharing across closure and method boundaries.
  */
-public class VariableScope implements Cloneable {
+public class VariableScope {
 
     private VariableScope parent;
     private ClassNode classScope;
@@ -186,7 +186,6 @@ public class VariableScope implements Cloneable {
 
     //
 
-    // TODO: implement Cloneable and override Object.clone()
     public VariableScope copy() {
         VariableScope that = new VariableScope(parent);
         that.classScope = this.classScope;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index 221361b..6848dab 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -51,6 +51,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.TreeMap;
 
 import static org.objectweb.asm.Opcodes.AALOAD;
@@ -187,10 +188,8 @@ public class InvocationWriter {
                     mv.visitTypeInsn(CHECKCAST, owner);
                 }
             } else if (target.isPublic()
-                    && (!Modifier.isPublic(declaringClass.getModifiers())
-                    && !receiverType.equals(declaringClass))
-                    && receiverType.isDerivedFrom(declaringClass)
-                    && !receiverType.getPackageName().equals(classNode.getPackageName())) {
+                    && (!receiverType.equals(declaringClass) && !Modifier.isPublic(declaringClass.getModifiers()))
+                    && receiverType.isDerivedFrom(declaringClass) && !Objects.equals(receiverType.getPackageName(), classNode.getPackageName())) {
                 // GROOVY-6962: package private class, public method
                 owner = BytecodeHelper.getClassInternalName(receiverType);
             }
diff --git a/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java b/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
index f2bb160..ee09105 100644
--- a/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/ParserPluginFactory.java
@@ -19,15 +19,14 @@
 package org.codehaus.groovy.control;
 
 import org.apache.groovy.parser.antlr4.Antlr4PluginFactory;
-import org.codehaus.groovy.antlr.AntlrParserPluginFactory;
 
 /**
- * A factory of parser plugin instances
- *
+ * A factory of parser plugin instances.
  */
 public abstract class ParserPluginFactory {
     /**
-     * creates the ANTLR 4 parser
+     * Creates the ANTLR 4 parser.
+     *
      * @return the factory for the parser
      */
     public static ParserPluginFactory antlr4(CompilerConfiguration compilerConfiguration) {
@@ -35,36 +34,13 @@ public abstract class ParserPluginFactory {
     }
 
     /**
-     * creates the ANTLR 2.7 parser
-     * @return the factory for the parser
-     */
-    @Deprecated
-    public static ParserPluginFactory antlr2() {
-        return new AntlrParserPluginFactory();
-    }
-
-    /**
-     * creates the ANTLR 2.7 parser. This method was used to switch between the pre JSR
-     * parser and the new ANTLR 2.7 based parser, but even before Groovy 1.0 this
-     * method was changed to always return the ANTLR 2.7 parser.
-     * @param useNewParser - ignored
-     * @return the ANTLR 2.7 based parser
-     */
-    @Deprecated
-    public static ParserPluginFactory newInstance(boolean useNewParser) {
-        return newInstance();
-    }
-
-    /**
-     * creates the ANTLR 2.7 parser. This method was used to switch between the pre JSR
-     * parser and the new ANTLR 2.7 based parser, but even before Groovy 1.0 this
-     * method was changed to always return the ANTLR 2.7 parser.
+     * Creates the ANTLR 2 parser.
      *
-     * @return the new parser factory.
+     * @throws UnsupportedOperationException always
      */
     @Deprecated
-    public static ParserPluginFactory newInstance() {
-        return antlr2();
+    public static ParserPluginFactory antlr2() {
+        throw new UnsupportedOperationException("The Antlr2-based parser is no longer supported");
     }
 
     public abstract ParserPlugin createParserPlugin();
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 30b3476..07c3c88 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -321,7 +321,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         genericParameterNames = oldPNames;
     }
 
-    private boolean resolveToInner(final ClassNode type) {
+    protected boolean resolveToInner(final ClassNode type) {
         // we do not do our name mangling to find an inner class
         // if the type is a ConstructedClassWithPackage, because in this case we
         // are resolving the name at a different place already
@@ -355,6 +355,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
     // when resolving the outer class later, we set the resolved type of ConstructedOuterNestedClass instance to the actual inner class node(SEE GROOVY-7812(#2))
     private boolean resolveToOuterNested(final ClassNode type) {
         CompileUnit compileUnit = currentClass.getCompileUnit();
+        if (compileUnit == null) return false;
         String typeName = type.getName();
 
         BiConsumer<ConstructedOuterNestedClassNode, ClassNode> setRedirectListener = (s, c) -> type.setRedirect(s);
diff --git a/src/main/java/org/codehaus/groovy/transform/ASTTransformationVisitor.java b/src/main/java/org/codehaus/groovy/transform/ASTTransformationVisitor.java
index ea950a6..b8348c6 100644
--- a/src/main/java/org/codehaus/groovy/transform/ASTTransformationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/ASTTransformationVisitor.java
@@ -332,10 +332,10 @@ public final class ASTTransformationVisitor extends ClassCodeVisitorSupport {
                 if (ASTTransformation.class.isAssignableFrom(gTransClass)) {
                     ASTTransformation instance = (ASTTransformation) gTransClass.getDeclaredConstructor().newInstance();
                     if (instance instanceof CompilationUnitAware) {
-                        ((CompilationUnitAware)instance).setCompilationUnit(compilationUnit);
+                        ((CompilationUnitAware) instance).setCompilationUnit(compilationUnit);
                     }
                     CompilationUnit.ISourceUnitOperation suOp = source -> {
-                        instance.visit(new ASTNode[] {source.getAST()}, source);
+                        instance.visit(new ASTNode[]{source.getAST()}, source);
                     };
                     if (isFirstScan) {
                         compilationUnit.addPhaseOperation(suOp, transformAnnotation.phase().getPhaseNumber());