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 2018/04/05 18:25:02 UTC

[2/3] groovy git commit: Refine "GROOVY-8531: Fail to resolve type defined in super class written in Java"

Refine "GROOVY-8531: Fail to resolve type defined in super class written in Java"

(cherry picked from commit fdaef20)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/9c2a788c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/9c2a788c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/9c2a788c

Branch: refs/heads/GROOVY_2_4_X
Commit: 9c2a788c641656d1294e096519a0f1f900cffa75
Parents: 67bdf0a
Author: danielsun1106 <re...@hotmail.com>
Authored: Fri Apr 6 00:51:29 2018 +0800
Committer: danielsun1106 <re...@hotmail.com>
Committed: Fri Apr 6 02:24:56 2018 +0800

----------------------------------------------------------------------
 .../org/codehaus/groovy/control/ResolveVisitor.java | 16 ++++++++++------
 .../groovy/bugs/groovy8531/Groovy8531Bug.groovy     |  4 ++++
 src/test/groovy/bugs/groovy8531/Reducer.java        |  4 ++++
 3 files changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/9c2a788c/src/main/org/codehaus/groovy/control/ResolveVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/org/codehaus/groovy/control/ResolveVisitor.java
index 891e138..deb38d1 100644
--- a/src/main/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/org/codehaus/groovy/control/ResolveVisitor.java
@@ -275,16 +275,18 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         }
 
         // GROOVY-8531: Fail to resolve type defined in super class written in Java
-        for (ClassNode enclosingClassNode = currentClass; ClassHelper.OBJECT_TYPE != enclosingClassNode; enclosingClassNode = enclosingClassNode.getSuperClass()) {
-            if(resolveToNested(enclosingClassNode, type)) return true;
-        }
+        if (resolveToNestedOfCurrentClassAndSuperClasses(type)) return true;
 
         type.setName(saved);
         return false;
     }
 
-    private boolean resolveToNestedOfCurrent(ClassNode type) {
-        return resolveToNested(currentClass, type);
+    private boolean resolveToNestedOfCurrentClassAndSuperClasses(ClassNode type) {
+        for (ClassNode enclosingClassNode = currentClass; ClassHelper.OBJECT_TYPE != enclosingClassNode; enclosingClassNode = enclosingClassNode.getSuperClass()) {
+            if(resolveToNested(enclosingClassNode, type)) return true;
+        }
+
+        return false;
     }
 
     private boolean resolveToNested(ClassNode enclosingType, ClassNode type) {
@@ -988,7 +990,9 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
                   t = new LowerCaseClass(name);
                 }
                 isClass = resolve(t);
-                if(!isClass) isClass = resolveToNestedOfCurrent(t);
+                if(!isClass) {
+                    isClass = resolveToNestedOfCurrentClassAndSuperClasses(t);
+                }
             }
             if (isClass) {
                 // the name is a type so remove it from the scoping

http://git-wip-us.apache.org/repos/asf/groovy/blob/9c2a788c/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy b/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
index a8a21bc..b7ee0d2 100644
--- a/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
+++ b/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
@@ -24,9 +24,13 @@ class Groovy8531Bug extends GroovyTestCase {
             package groovy.bugs.groovy8531
             class Example extends Reducer {
                 public void reduce(Context context) {}
+                public boolean isDynamic(Type type) {
+                    return Type.DYNAMIC == type
+                }
             }
             
             new Example().reduce(null)
+            assert new Example().isDynamic(Reducer.Type.DYNAMIC)
         '''
     }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/9c2a788c/src/test/groovy/bugs/groovy8531/Reducer.java
----------------------------------------------------------------------
diff --git a/src/test/groovy/bugs/groovy8531/Reducer.java b/src/test/groovy/bugs/groovy8531/Reducer.java
index 7fde131..c9b78bf 100644
--- a/src/test/groovy/bugs/groovy8531/Reducer.java
+++ b/src/test/groovy/bugs/groovy8531/Reducer.java
@@ -20,4 +20,8 @@ package groovy.bugs.groovy8531;
 
 public class Reducer {
     public abstract class Context {}
+
+    public enum Type {
+        DYNAMIC, STATIC
+    }
 }