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 17:53:12 UTC
[1/2] groovy git commit: Refine "GROOVY-8531: Fail to resolve type
defined in super class written in Java"
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_6_X 05048444b -> a313e9fed
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/e23d27cb
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e23d27cb
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e23d27cb
Branch: refs/heads/GROOVY_2_6_X
Commit: e23d27cb1bf5eed108c0327504a8986467309bc7
Parents: 0504844
Author: danielsun1106 <re...@hotmail.com>
Authored: Fri Apr 6 00:51:29 2018 +0800
Committer: danielsun1106 <re...@hotmail.com>
Committed: Fri Apr 6 01:52:53 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/e23d27cb/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 615af7f..a48d516 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -283,16 +283,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) {
@@ -983,7 +985,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/e23d27cb/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/e23d27cb/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
+ }
}
[2/2] groovy git commit: Refine "GROOVY-8531: Fail to resolve type
defined in super class written in Java"
Posted by su...@apache.org.
Refine "GROOVY-8531: Fail to resolve type defined in super class written in Java"
Check visibility of inner type
(cherry picked from commit 4181626)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a313e9fe
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a313e9fe
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a313e9fe
Branch: refs/heads/GROOVY_2_6_X
Commit: a313e9fed3ffdbb1accfa725a50817ea335d7794
Parents: e23d27c
Author: danielsun1106 <re...@hotmail.com>
Authored: Fri Apr 6 01:38:33 2018 +0800
Committer: danielsun1106 <re...@hotmail.com>
Committed: Fri Apr 6 01:52:58 2018 +0800
----------------------------------------------------------------------
.../codehaus/groovy/control/ResolveVisitor.java | 17 ++++++++++++++++-
.../groovy/bugs/groovy8531/Groovy8531Bug.groovy | 16 ++++++++++++++--
src/test/groovy/bugs/groovy8531/Reducer.java | 4 +++-
3 files changed, 33 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/a313e9fe/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index a48d516..6cfd9be 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -282,7 +282,6 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
if (resolve(type)) return true;
}
- // GROOVY-8531: Fail to resolve type defined in super class written in Java
if (resolveToNestedOfCurrentClassAndSuperClasses(type)) return true;
type.setName(saved);
@@ -290,6 +289,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
}
private boolean resolveToNestedOfCurrentClassAndSuperClasses(ClassNode type) {
+ // 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;
}
@@ -305,6 +305,8 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
if (enclosingType != type && !name.contains(".") && type.getClass().equals(ClassNode.class)) {
ClassNode tmp = new ConstructedNestedClass(enclosingType,name);
if (resolve(tmp)) {
+ if (!checkInnerTypeVisibility(enclosingType, tmp)) return false;
+
type.setRedirect(tmp);
return true;
}
@@ -313,6 +315,19 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
}
+ private boolean checkInnerTypeVisibility(ClassNode enclosingType, ClassNode innerClassNode) {
+ if (currentClass == enclosingType) {
+ return true;
+ }
+
+ int modifiers = innerClassNode.getModifiers();
+ if (Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers)) {
+ return true;
+ }
+
+ return false;
+ }
+
private void resolveOrFail(ClassNode type, String msg, ASTNode node) {
if (resolve(type)) return;
if (resolveToInner(type)) return;
http://git-wip-us.apache.org/repos/asf/groovy/blob/a313e9fe/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 b7ee0d2..72dd08b 100644
--- a/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
+++ b/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
@@ -19,18 +19,30 @@
package groovy.bugs.groovy8531
class Groovy8531Bug extends GroovyTestCase {
- void test() {
+ void testPublicAndProtectedInnerType() {
assertScript '''
package groovy.bugs.groovy8531
class Example extends Reducer {
- public void reduce(Context context) {}
+ public void reduce(PublicContext context) {}
+ public void reduce2(ProtectedContext context) {}
public boolean isDynamic(Type type) {
return Type.DYNAMIC == type
}
}
new Example().reduce(null)
+ new Example().reduce2(null)
assert new Example().isDynamic(Reducer.Type.DYNAMIC)
'''
}
+
+ void testPrivateInnerType() {
+ def errMsg = shouldFail '''
+ package groovy.bugs.groovy8531
+ class Example extends Reducer {
+ public void reduce3(PrivateContext context) {}
+ }
+ '''
+ assert errMsg.contains('unable to resolve class')
+ }
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/a313e9fe/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 c9b78bf..95b5b24 100644
--- a/src/test/groovy/bugs/groovy8531/Reducer.java
+++ b/src/test/groovy/bugs/groovy8531/Reducer.java
@@ -19,7 +19,9 @@
package groovy.bugs.groovy8531;
public class Reducer {
- public abstract class Context {}
+ public abstract class PublicContext {}
+ protected abstract class ProtectedContext {}
+ private abstract class PrivateContext {}
public enum Type {
DYNAMIC, STATIC