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
+ }
}