Skip to content

Commit 514bfbe

Browse files
committed
GROOVY-9791
1 parent 9fe6d70 commit 514bfbe

File tree

3 files changed

+941
-2
lines changed

3 files changed

+941
-2
lines changed

base/org.codehaus.groovy25/src/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import java.util.Collection;
6161
import java.util.List;
6262
import java.util.Map;
63+
import java.util.Objects;
6364
import java.util.Set;
6465

6566
import static org.apache.groovy.ast.tools.ExpressionUtils.isThisExpression;
@@ -83,7 +84,6 @@
8384
import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
8485
import static org.codehaus.groovy.ast.ClassHelper.isPrimitiveType;
8586
import static org.codehaus.groovy.ast.ClassHelper.make;
86-
import static org.codehaus.groovy.classgen.AsmClassGenerator.samePackages;
8787
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.chooseBestMethod;
8888
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.findDGMMethodsByNameAndArguments;
8989
import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf;
@@ -625,6 +625,7 @@ boolean makeGetField(final Expression receiver, final ClassNode receiverType, fi
625625
}
626626

627627
private static boolean isDirectAccessAllowed(FieldNode field, ClassNode receiver) {
628+
/* GRECLIPSE edit -- GROOVY-9791
628629
ClassNode declaringClass = field.getDeclaringClass().redirect();
629630
ClassNode receiverType = receiver.redirect();
630631
@@ -643,6 +644,26 @@ private static boolean isDirectAccessAllowed(FieldNode field, ClassNode receiver
643644
644645
// finally public and visible
645646
return field.isPublic() || samePackages(receiver.getPackageName(), declaringClass.getPackageName());
647+
*/
648+
// a public field is accessible from anywhere
649+
if (field.isPublic()) return true;
650+
651+
ClassNode declaringType = field.getDeclaringClass().redirect();
652+
653+
// any field is accessible from the declaring class
654+
if (receiver.equals(declaringType)) return true;
655+
656+
// a private field isn't accessible beyond the declaring class
657+
if (field.isPrivate()) return false;
658+
659+
// a protected field is accessible from any subclass of the declaring class
660+
if (field.isProtected() && receiver.isDerivedFrom(declaringType)) return true;
661+
662+
// a protected or package-private field is accessible from the declaring package
663+
if (Objects.equals(receiver.getPackageName(), declaringType.getPackageName())) return true;
664+
665+
return false;
666+
// GRECLIPSE end
646667
}
647668

648669
@Override

base/org.codehaus.groovy30/.checkstyle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticInvocationWriter.java" include-pattern="false" />
4848
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticPropertyAccessHelper.java" include-pattern="false" />
4949
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java" include-pattern="false" />
50-
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticTypesMethodReferenceExpressionWriter.java" include-pattern="false" />
50+
<file-match-pattern match-pattern="groovy/classgen/asm/sc/StaticTypes(CallSite|MethodReferenceExpression)Writer.java" include-pattern="false" />
5151
<file-match-pattern match-pattern="groovy/control/CompilationUnit.java" include-pattern="false" />
5252
<file-match-pattern match-pattern="groovy/control/CompilerConfiguration.java" include-pattern="false" />
5353
<file-match-pattern match-pattern="groovy/control/ErrorCollector.java" include-pattern="false" />

0 commit comments

Comments
 (0)