This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 305c499ae7 GROOVY-11319: STC: `super.x` shouldn't consider private 
methods
305c499ae7 is described below

commit 305c499ae756201d81cdf8b4360f0e25794c20e6
Author: Eric Milles <eric.mil...@thomsonreuters.com>
AuthorDate: Fri Apr 5 15:40:23 2024 -0500

    GROOVY-11319: STC: `super.x` shouldn't consider private methods
    
    4_0_X backport
---
 .../transform/stc/StaticTypeCheckingVisitor.java   |  41 +-
 src/test/groovy/bugs/Groovy9292.groovy             | 429 +++++++++------------
 src/test/groovy/bugs/Groovy9293.groovy             | 315 ++++++---------
 .../groovy/transform/stc/CategoriesSTCTest.groovy  |   7 +-
 .../stc/FieldsAndPropertiesSTCTest.groovy          |  41 +-
 .../groovy/classgen/asm/sc/bugs/Groovy7300.groovy  |   9 +-
 .../packageScope/DifferentPackageTest.groovy       |   7 +-
 7 files changed, 387 insertions(+), 462 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 ef79bf4c86..b9107cae1d 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -720,8 +720,10 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 
         if (!extension.handleUnresolvedProperty(expression)) {
             Expression objectExpression = expression.getObjectExpression();
-            addStaticTypeError("No such property: " + 
expression.getPropertyAsString() + " for class: " +
-                    
prettyPrintTypeName(findCurrentInstanceOfClass(objectExpression, 
getType(objectExpression))), expression);
+            ClassNode  objectExpressionType = (objectExpression instanceof 
ClassExpression
+                     ? objectExpression.getType() : 
wrapTypeIfNecessary(getType(objectExpression)));
+            objectExpressionType = 
findCurrentInstanceOfClass(objectExpression, objectExpressionType);
+            addStaticTypeError("No such property: " + 
expression.getPropertyAsString() + " for class: " + 
prettyPrintTypeName(objectExpressionType), expression);
         }
     }
 
@@ -731,8 +733,10 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 
         if (!extension.handleUnresolvedAttribute(expression)) {
             Expression objectExpression = expression.getObjectExpression();
-            addStaticTypeError("No such attribute: " + 
expression.getPropertyAsString() + " for class: " +
-                    
prettyPrintTypeName(findCurrentInstanceOfClass(objectExpression, 
getType(objectExpression))), expression);
+            ClassNode  objectExpressionType = (objectExpression instanceof 
ClassExpression
+                     ? objectExpression.getType() : 
wrapTypeIfNecessary(getType(objectExpression)));
+            objectExpressionType = 
findCurrentInstanceOfClass(objectExpression, objectExpressionType);
+            addStaticTypeError("No such attribute: " + 
expression.getPropertyAsString() + " for class: " + 
prettyPrintTypeName(objectExpressionType), expression);
         }
     }
 
@@ -1545,8 +1549,9 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
                 property = allowStaticAccessToMember(property, staticOnly);
                 // prefer explicit getter or setter over property if receiver 
is not 'this'
                 if (property == null || 
!enclosingTypes.contains(receiverType)) {
+                    ClassNode enclosingType = enclosingTypes.iterator().next();
                     if (readMode) {
-                        if (getter != null) {
+                        if (getter != null && hasAccessToMember(enclosingType, 
getter.getDeclaringClass(), getter.getModifiers())) {
                             ClassNode returnType = 
inferReturnTypeGenerics(receiverType, getter, 
ArgumentListExpression.EMPTY_ARGUMENTS);
                             storeInferredTypeForPropertyExpression(pexp, 
returnType);
                             storeTargetMethod(pexp, getter);
@@ -1555,9 +1560,11 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
                                 pexp.putNodeMetaData(IMPLICIT_RECEIVER, 
delegationData);
                             }
                             return true;
+                        } else {
+                            getter = null; // GROOVY-11319
                         }
                     } else {
-                        if (!setters.isEmpty()) {
+                        if (setters.stream().anyMatch(setter -> 
hasAccessToMember(enclosingType, setter.getDeclaringClass(), 
setter.getModifiers()))) {
                             if (visitor != null) {
                                 for (MethodNode setter : setters) {
                                     // visiting setter will not infer the 
property type since return type is void, so visit a dummy field instead
@@ -1577,8 +1584,10 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
                             }
                             pexp.removeNodeMetaData(READONLY_PROPERTY);
                             return true;
-                        } else if (getter != null && field == null) {
+                        } else if (field == null && getter != null && 
hasAccessToMember(enclosingType, getter.getDeclaringClass(), 
getter.getModifiers())) {
                             pexp.putNodeMetaData(READONLY_PROPERTY, 
Boolean.TRUE); // GROOVY-9127
+                        } else {
+                            setters.clear(); // GROOVY-11319
                         }
                     }
                 }
@@ -1587,7 +1596,7 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
 
                 if (field != null && storeField(field, pexp, receiverType, 
visitor, receiver.getData(), !readMode)) return true;
 
-                foundGetterOrSetter = (foundGetterOrSetter || 
!setters.isEmpty() || getter != null);
+                foundGetterOrSetter = (foundGetterOrSetter || getter != null 
|| !setters.isEmpty());
             }
 
             // GROOVY-5568: the property may be defined by DGM
@@ -1794,11 +1803,15 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
     private boolean storeField(final FieldNode field, final PropertyExpression 
expressionToStoreOn, final ClassNode receiver, final ClassCodeVisitorSupport 
visitor, final String delegationData, final boolean lhsOfAssignment) {
         if (visitor != null) visitor.visitField(field);
         checkOrMarkPrivateAccess(expressionToStoreOn, field, lhsOfAssignment);
-        boolean accessible = 
hasAccessToMember(isSuperExpression(expressionToStoreOn.getObjectExpression()) 
? typeCheckingContext.getEnclosingClassNode() : receiver, 
field.getDeclaringClass(), field.getModifiers());
-
-        if (expressionToStoreOn instanceof AttributeExpression) { // TODO: 
expand to include PropertyExpression
-            if (!accessible) {
-                addStaticTypeError("The field " + 
field.getDeclaringClass().getNameWithoutPackage() + "." + field.getName() + " 
is not accessible", expressionToStoreOn.getProperty());
+        boolean superField = 
isSuperExpression(expressionToStoreOn.getObjectExpression());
+        boolean accessible = ( !superField && 
receiver.equals(field.getDeclaringClass()) ) // GROOVY-7300
+                || 
hasAccessToMember(typeCheckingContext.getEnclosingClassNode(), 
field.getDeclaringClass(), field.getModifiers());
+
+        if (!accessible) {
+            if (expressionToStoreOn instanceof AttributeExpression) {
+                addStaticTypeError("Cannot access field: " + field.getName() + 
" of class: " + prettyPrintTypeName(field.getDeclaringClass()), 
expressionToStoreOn.getProperty());
+            } else if (field.isPrivate()) {
+                return false;
             }
         }
 
@@ -1811,7 +1824,7 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
             if (enclosing == null || !enclosing.getName().endsWith("init>"))
                 expressionToStoreOn.putNodeMetaData(READONLY_PROPERTY, 
Boolean.TRUE); // GROOVY-5450
         } else if (accessible) {
-            expressionToStoreOn.removeNodeMetaData(READONLY_PROPERTY);
+            expressionToStoreOn.removeNodeMetaData(READONLY_PROPERTY); // 
GROOVY-9127
         }
         return true;
     }
diff --git a/src/test/groovy/bugs/Groovy9292.groovy 
b/src/test/groovy/bugs/Groovy9292.groovy
index 3ffe823f8e..2dc077c246 100644
--- a/src/test/groovy/bugs/Groovy9292.groovy
+++ b/src/test/groovy/bugs/Groovy9292.groovy
@@ -20,363 +20,304 @@ package groovy.bugs
 
 import org.junit.Test
 
+import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
 
 final class Groovy9292 {
 
-    private final GroovyShell shell = new GroovyShell()
+    private final GroovyShell shell = GroovyShell.withConfig {
+        ast(groovy.transform.CompileStatic)
+    }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
module'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        shouldFail shell, MissingPropertyException, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    "".with { superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    private String superField
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                private String superField
+            }
 
-            shell.evaluate '''
-                package a
+            assert true
+        '''
+        shouldFail shell, MissingPropertyException, '''
+            package a
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    "".with { superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    private String superField
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                private String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        shouldFail shell, MissingPropertyException, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package, it qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        def err = shouldFail shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return it.superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    with { it.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: a.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package, it qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    private String superField
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                private String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return it.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    with { it.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package, this qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        def err = shouldFail shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return this.superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    "".with { this.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: a.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package, this qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        assertScript shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                assert true
-            '''
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-            shell.evaluate '''
-                package b
-
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return this.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { this.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package, owner qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        def err = shouldFail shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return owner.superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    "".with { owner.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: a.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package, owner qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        assertScript shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                assert true
-            '''
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-            shell.evaluate '''
-                package b
-
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return owner.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { owner.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package, delegate qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        def err = shouldFail shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return delegate.superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    with { delegate.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: a.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package, delegate qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        assertScript shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
-
-                assert true
-            '''
+            class A {
+                private String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return delegate.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    with { delegate.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - same 
package, thisObject qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
+        def err = shouldFail shell, '''
+            package a
 
-                class A {
-                    private String superField
-                }
+            class A {
+                private String superField
+            }
 
-                class B extends A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return thisObject.superField
-                        }
-                    }
+            class B extends A {
+                def test() {
+                    "".with { thisObject.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: a.B/
     }
 
     @Test
     void 'test accessing a private super class field inside a closure - diff 
package, thisObject qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    private String superField
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                private String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return thisObject.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { thisObject.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 }
diff --git a/src/test/groovy/bugs/Groovy9293.groovy 
b/src/test/groovy/bugs/Groovy9293.groovy
index 2d989060d4..1a2ae0a028 100644
--- a/src/test/groovy/bugs/Groovy9293.groovy
+++ b/src/test/groovy/bugs/Groovy9293.groovy
@@ -18,343 +18,280 @@
  */
 package groovy.bugs
 
-import groovy.transform.CompileStatic
 import org.junit.Test
 
+import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
 
-@CompileStatic
 final class Groovy9293 {
 
-    private final GroovyShell shell = new GroovyShell()
+    private final GroovyShell shell = GroovyShell.withConfig {
+        ast(groovy.transform.CompileStatic)
+        imports {
+            normal 'groovy.transform.PackageScope'
+        }
+    }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    'something'.with {
-                        return superField
-                    }
+                    "".with { superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- diff package'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        shouldFail shell, MissingPropertyException, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package, it qualifier'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    with {
-                        return it.superField
-                    }
+                    with { it.superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test // GROOVY-9293
     void 'test accessing a package-private super class field inside a closure 
- diff package, it qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return it.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    with { it.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package, this qualifier'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    'something'.with {
-                        return this.superField
-                    }
+                    "".with { this.superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- diff package, this qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return this.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { this.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package, owner qualifier'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    'something'.with {
-                        return owner.superField
-                    }
+                    "".with { owner.superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test // GROOVY-9293
     void 'test accessing a package-private super class field inside a closure 
- diff package, owner qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return owner.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { owner.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package, delegate qualifier'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    with {
-                        return delegate.superField
-                    }
+                    with { delegate.superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test // GROOVY-9293
     void 'test accessing a package-private super class field inside a closure 
- diff package, delegate qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        with {
-                            return delegate.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    with { delegate.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 
     @Test
     void 'test accessing a package-private super class field inside a closure 
- same package, thisObject qualifier'() {
-        shell.evaluate '''
+        assertScript shell, '''
             package a
 
             class A {
-                @groovy.transform.PackageScope
-                String superField = 'works'
+                @PackageScope String superField = 'works'
             }
 
             class B extends A {
-                @groovy.transform.CompileStatic
                 def test() {
-                    'something'.with {
-                        return thisObject.superField
-                    }
+                    "".with { thisObject.superField }
                 }
             }
 
-            def obj = new B()
-            assert obj.test() == "works"
+            assert new B().test() == "works"
         '''
     }
 
     @Test // GROOVY-9293
     void 'test accessing a package-private super class field inside a closure 
- diff package, thisObject qualifier'() {
-        shouldFail(MissingPropertyException) {
-            shell.evaluate '''
-                package a
-
-                class A {
-                    @groovy.transform.PackageScope
-                    String superField = 'works'
-                }
+        assertScript shell, '''
+            package a
 
-                assert true
-            '''
+            class A {
+                @PackageScope String superField
+            }
 
-            shell.evaluate '''
-                package b
+            assert true
+        '''
+        def err = shouldFail shell, '''
+            package b
 
-                class B extends a.A {
-                    @groovy.transform.CompileStatic
-                    def test() {
-                        'something'.with {
-                            return thisObject.superField
-                        }
-                    }
+            class B extends a.A {
+                def test() {
+                    "".with { thisObject.superField }
                 }
+            }
 
-                new B().test()
-            '''
-        }
+            new B().test()
+        '''
+        assert err =~ /No such property: superField for class: b.B/
     }
 }
diff --git a/src/test/groovy/transform/stc/CategoriesSTCTest.groovy 
b/src/test/groovy/transform/stc/CategoriesSTCTest.groovy
index 4b30c5660b..0555f16cb0 100644
--- a/src/test/groovy/transform/stc/CategoriesSTCTest.groovy
+++ b/src/test/groovy/transform/stc/CategoriesSTCTest.groovy
@@ -18,7 +18,6 @@
  */
 package groovy.transform.stc
 
-
 /**
  * Unit tests for static type checking : categories.
  */
@@ -29,8 +28,8 @@ class CategoriesSTCTest extends StaticTypeCheckingTestCase {
             use(TimeCategory) {
                 1.day
             }
-        ''', 'Due to their dynamic nature, usage of categories is not possible 
with static type checking active', 'No such property: day for class: int'
+        ''',
+        'Due to their dynamic nature, usage of categories is not possible with 
static type checking active',
+        'No such property: day for class: java.lang.Integer'
     }
-
 }
-
diff --git a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy 
b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
index 8c62ed70f5..64f72f40dd 100644
--- a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
+++ b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
@@ -18,7 +18,6 @@
  */
 package groovy.transform.stc
 
-import groovy.test.NotYetImplemented
 import groovy.transform.PackageScope
 
 /**
@@ -194,8 +193,41 @@ class FieldsAndPropertiesSTCTest extends 
StaticTypeCheckingTestCase {
         'No such property: x for class: C'
     }
 
-    @NotYetImplemented
+    // GROOVY-11319
     void testShouldComplainAboutMissingProperty3() {
+        shouldFailWithMessages '''
+            class C {
+                private int getX() { 1 }
+            }
+            class D extends C {
+                void test() {
+                    super.x
+                }
+            }
+            new D().test()
+        ''',
+        'No such property: x for class: C'
+    }
+
+    // GROOVY-11319
+    void testShouldComplainAboutMissingProperty4() {
+        shouldFailWithMessages '''
+            class C {
+                private void setX(int i) {
+                    assert false : 'cannot access'
+                }
+            }
+            class D extends C {
+                void test() {
+                    super.x = 1
+                }
+            }
+            new D().test()
+        ''',
+        'No such property: x for class: C'
+    }
+
+    void testShouldComplainAboutMissingProperty5() {
         shouldFailWithMessages '''
             class C {
                 private x
@@ -206,7 +238,7 @@ class FieldsAndPropertiesSTCTest extends 
StaticTypeCheckingTestCase {
                 }
             }
         ''',
-        'The field C.x is not accessible'
+        'No such property: x for class: D'
     }
 
     void testShouldComplainAboutMissingAttribute() {
@@ -259,8 +291,9 @@ class FieldsAndPropertiesSTCTest extends 
StaticTypeCheckingTestCase {
                     this.@x
                 }
             }
+            new D().test()
         ''',
-        'The field C.x is not accessible'
+        'Cannot access field: x of class: C'
     }
 
     void testPropertyWithInheritance() {
diff --git 
a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7300.groovy 
b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7300.groovy
index ba2f4a5a9a..f90d12a6b3 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7300.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7300.groovy
@@ -37,7 +37,7 @@ final class Groovy7300 extends StaticTypeCheckingTestCase 
implements StaticCompi
         '''
     }
 
-    void testUseSuperToBypassOverride1a() {
+    void testUseSuperToBypassOverride2() {
         assertScript '''
             abstract class A {
                 protected x = 1
@@ -51,7 +51,7 @@ final class Groovy7300 extends StaticTypeCheckingTestCase 
implements StaticCompi
         '''
     }
 
-    void testUseSuperToBypassOverride2() {
+    void testUseSuperToBypassOverride3() {
         assertScript '''
             abstract class A {
                 private x = 1
@@ -65,7 +65,7 @@ final class Groovy7300 extends StaticTypeCheckingTestCase 
implements StaticCompi
         '''
     }
 
-    void testUseSuperToBypassOverride2a() {
+    void testUseSuperToBypassOverride4() {
         shouldFailWithMessages '''
             abstract class A {
                 private x = 1
@@ -76,6 +76,7 @@ final class Groovy7300 extends StaticTypeCheckingTestCase 
implements StaticCompi
                 def getX() { super.@x }
             }
             assert false
-        ''', 'The field A.x is not accessible'
+        ''',
+        'Cannot access field: x of class: A'
     }
 }
diff --git 
a/src/test/org/codehaus/groovy/transform/packageScope/DifferentPackageTest.groovy
 
b/src/test/org/codehaus/groovy/transform/packageScope/DifferentPackageTest.groovy
index 4030f62a8f..f5650b3d19 100644
--- 
a/src/test/org/codehaus/groovy/transform/packageScope/DifferentPackageTest.groovy
+++ 
b/src/test/org/codehaus/groovy/transform/packageScope/DifferentPackageTest.groovy
@@ -161,7 +161,8 @@ final class DifferentPackageTest {
         assert loader.loadClass('p.Peer').newInstance().half() == 21
     }
 
-    @Test // GROOVY-9106
+    // GROOVY-9106
+    @Test
     void testSamePackageShouldSeeStaticProps5() {
         def loader = addSources(
             One: P_DOT_ONE,
@@ -186,8 +187,8 @@ final class DifferentPackageTest {
         assert loader.loadClass('p.Peer').half() == 21
     }
 
-    @Test
     // GROOVY-9093
+    @Test
     void testDifferentPackageShouldNotSeeInstanceProps() {
         def err = shouldFail CompilationFailedException, {
             addSources(
@@ -207,8 +208,8 @@ final class DifferentPackageTest {
         assert err.message =~ /Access to q.Two#value is forbidden/
     }
 
-    @Test
     // GROOVY-9093
+    @Test
     void testDifferentPackageShouldNotSeeStaticProps1() {
         def err = shouldFail CompilationFailedException, {
             addSources(


Reply via email to