Repository: groovy Updated Branches: refs/heads/master c6f32044e -> 0765a21f6
minor refactor Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0765a21f Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0765a21f Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0765a21f Branch: refs/heads/master Commit: 0765a21f6a058f7023d73a170635a4dffa851a72 Parents: c6f3204 Author: paulk <[email protected]> Authored: Mon Aug 29 12:05:47 2016 +1000 Committer: paulk <[email protected]> Committed: Mon Aug 29 12:05:47 2016 +1000 ---------------------------------------------------------------------- src/main/groovy/lang/MetaClassImpl.java | 17 +++++------------ .../codehaus/groovy/ast/tools/GeneralUtils.java | 20 ++++++++++++++++++++ .../codehaus/groovy/control/ResolveVisitor.java | 13 ++++--------- 3 files changed, 29 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/0765a21f/src/main/groovy/lang/MetaClassImpl.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/MetaClassImpl.java b/src/main/groovy/lang/MetaClassImpl.java index 32988a9..91ddf9a 100644 --- a/src/main/groovy/lang/MetaClassImpl.java +++ b/src/main/groovy/lang/MetaClassImpl.java @@ -92,15 +92,11 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import static org.codehaus.groovy.ast.tools.GeneralUtils.inSamePackage; +import static org.codehaus.groovy.ast.tools.GeneralUtils.isDefaultVisibility; + /** * Allows methods to be dynamically added to existing classes at runtime - * - * @author <a href="mailto:[email protected]">James Strachan</a> - * @author Guillaume Laforge - * @author <a href="mailto:[email protected]">Jochen "blackdrag" Theodorou</a> - * @author Graeme Rocher - * @author Alex Tkachman - * @author Roshan Dawrani * @see groovy.lang.MetaClass */ public class MetaClassImpl implements MetaClass, MutableMetaClass { @@ -2403,12 +2399,9 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass { } private static boolean packageLocal(CachedField mfp, CachedClass klass) { - if ((mfp.getModifiers() & (Modifier.PRIVATE | Modifier.PUBLIC | Modifier.PROTECTED)) != 0 || klass == null) + if (klass == null) return false; - Package fieldPackage = mfp.field.getDeclaringClass().getPackage(); - Package classPackage = klass.getTheClass().getPackage(); - return (fieldPackage == null && classPackage == null) || - fieldPackage != null && classPackage != null && fieldPackage.getName().equals(classPackage.getName()); + return isDefaultVisibility(mfp.getModifiers()) && inSamePackage(mfp.field.getDeclaringClass(), klass.getTheClass()); } private void applyStrayPropertyMethods(LinkedList<CachedClass> superClasses, Index classPropertyIndex, boolean isThis) { http://git-wip-us.apache.org/repos/asf/groovy/blob/0765a21f/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java index ba9bb0e..b7d9deb 100644 --- a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java +++ b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java @@ -25,6 +25,7 @@ import org.codehaus.groovy.ast.ClassHelper; import org.codehaus.groovy.ast.ClassNode; import org.codehaus.groovy.ast.FieldNode; import org.codehaus.groovy.ast.MethodNode; +import org.codehaus.groovy.ast.PackageNode; import org.codehaus.groovy.ast.Parameter; import org.codehaus.groovy.ast.PropertyNode; import org.codehaus.groovy.ast.Variable; @@ -63,6 +64,7 @@ import org.codehaus.groovy.syntax.Token; import org.codehaus.groovy.syntax.Types; import org.codehaus.groovy.transform.AbstractASTTransformation; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -762,4 +764,22 @@ public class GeneralUtils { public static String getSetterName(String name) { return "set" + Verifier.capitalize(name); } + + public static boolean isDefaultVisibility(int modifiers) { + return (modifiers & (Modifier.PRIVATE | Modifier.PUBLIC | Modifier.PROTECTED)) == 0; + } + + public static boolean inSamePackage(ClassNode first, ClassNode second) { + PackageNode firstPackage = first.getPackage(); + PackageNode secondPackage = second.getPackage(); + return ((firstPackage == null && secondPackage == null) || + firstPackage != null && secondPackage != null && firstPackage.getName().equals(secondPackage.getName())); + } + + public static boolean inSamePackage(Class first, Class second) { + Package firstPackage = first.getPackage(); + Package secondPackage = second.getPackage(); + return ((firstPackage == null && secondPackage == null) || + firstPackage != null && secondPackage != null && firstPackage.getName().equals(secondPackage.getName())); + } } http://git-wip-us.apache.org/repos/asf/groovy/blob/0765a21f/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 af199ef..0a018c0 100644 --- a/src/main/org/codehaus/groovy/control/ResolveVisitor.java +++ b/src/main/org/codehaus/groovy/control/ResolveVisitor.java @@ -35,6 +35,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Modifier; import java.util.*; +import static org.codehaus.groovy.ast.tools.GeneralUtils.inSamePackage; +import static org.codehaus.groovy.ast.tools.GeneralUtils.isDefaultVisibility; + /** * Visitor to resolve Types and convert VariableExpression to * ClassExpressions if needed. The ResolveVisitor will try to @@ -43,10 +46,6 @@ import java.util.*; * will force creation of a ClassExpression for C * <p> * Note: the method to start the resolving is startResolving(ClassNode, SourceUnit). - * - * @author Jochen Theodorou - * @author Roshan Dawrani - * @author Alex Tkachman */ public class ResolveVisitor extends ClassCodeExpressionTransformer { private ClassNode currentClass; @@ -872,11 +871,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer { ClassNode redirect = type.redirect(); if (Modifier.isPublic(redirect.getModifiers()) || Modifier.isProtected(redirect.getModifiers())) return true; // package local - PackageNode classPackage = ceType.getPackage(); - PackageNode nestedPackage = redirect.getPackage(); - return (redirect.getModifiers() & (Modifier.PROTECTED | Modifier.PUBLIC | Modifier.PRIVATE)) == 0 && - ((classPackage == null && nestedPackage == null) || - classPackage != null && nestedPackage != null && classPackage.getName().equals(nestedPackage.getName())); + return isDefaultVisibility(redirect.getModifiers()) && inSamePackage(ceType, redirect); } private boolean directlyImplementsTrait(ClassNode trait) {
