You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/01/26 21:20:18 UTC
[groovy] branch master updated: GROOVY-6277: STC: protected member is accessible by same-package element
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 5bec4f2 GROOVY-6277: STC: protected member is accessible by same-package element
5bec4f2 is described below
commit 5bec4f25783c66c0a3b94dc4d991dae8dcd39000
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Jan 26 14:51:21 2022 -0600
GROOVY-6277: STC: protected member is accessible by same-package element
---
.../groovy/transform/stc/StaticTypeCheckingVisitor.java | 7 +++----
.../transform/stc/FieldsAndPropertiesSTCTest.groovy | 16 ++++++++++++++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 1426e5c..2478e23 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1705,11 +1705,10 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
|| accessor.getOuterClasses().contains(receiver)) {
return true;
}
- if (Modifier.isProtected(modifiers)) {
- return accessor.isDerivedFrom(receiver);
- } else {
- return !Modifier.isPrivate(modifiers) && Objects.equals(accessor.getPackageName(), receiver.getPackageName());
+ if (!Modifier.isPrivate(modifiers) && Objects.equals(accessor.getPackageName(), receiver.getPackageName())) {
+ return true;
}
+ return Modifier.isProtected(modifiers) && accessor.isDerivedFrom(receiver);
}
private MethodNode findGetter(final ClassNode current, String name, final boolean searchOuterClasses) {
diff --git a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
index a4ca030..d24f1d7 100644
--- a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
+++ b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
@@ -864,6 +864,22 @@ class FieldsAndPropertiesSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ void testProtectedAccessorFromSamePackage() {
+ assertScript '''
+ class Foo {
+ protected String getWho() { 'Foo' }
+ }
+ class Bar {
+ def m(Foo foo) {
+ def x = foo.who
+ x.toLowerCase()
+ }
+ }
+ String result = new Bar().m(new Foo())
+ assert result == 'foo'
+ '''
+ }
+
// GROOVY-6610
void testPrivateStaticFieldAccessBeforeThis() {
assertScript '''