You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/10/09 05:02:59 UTC

[groovy] branch GROOVY_3_0_X updated: GROOVY-9771: visit receiver for private field access (closes #1399)

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

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


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new 9f19acd  GROOVY-9771: visit receiver for private field access (closes #1399)
9f19acd is described below

commit 9f19acd4e5a94bdb6c237b6bea3b0668fbcd933a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Oct 6 20:48:58 2020 -0500

    GROOVY-9771: visit receiver for private field access (closes #1399)
---
 .../StaticTypesBinaryExpressionMultiTypeDispatcher.java  |  3 +++
 .../groovy/classgen/asm/sc/bugs/Groovy7361Bug.groovy     | 16 ++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 9c835fd..91f4d4b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -44,6 +44,7 @@ import org.codehaus.groovy.classgen.asm.VariableSlotLoader;
 import org.codehaus.groovy.classgen.asm.WriterController;
 import org.codehaus.groovy.syntax.Token;
 import org.codehaus.groovy.syntax.TokenUtil;
+import org.codehaus.groovy.transform.sc.StaticCompilationVisitor;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
@@ -386,6 +387,8 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres
             if (rhsValueLoader instanceof VariableSlotLoader && enclosing instanceof BinaryExpression) {
                 rhsValueLoader.putNodeMetaData(INFERRED_TYPE, controller.getTypeChooser().resolveType(enclosing, controller.getClassNode()));
             }
+            // GROOVY-9771
+            receiver.visit(new StaticCompilationVisitor(controller.getSourceUnit(), controller.getClassNode()));
 
             // replace assignment to a subscript operator with a method call
             // e.g. x[5] = 10 -> methodCall(x, "putAt", [5, 10])
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7361Bug.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7361Bug.groovy
index 9878851..1a26703 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7361Bug.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7361Bug.groovy
@@ -87,4 +87,20 @@ final class Groovy7361Bug extends StaticTypeCheckingTestCase implements StaticCo
             new B().checkMap()
         '''
     }
+
+    // GROOVY-9771
+    void testShouldNotThrowClassCastExceptionForSubscriptPrivateAccess() {
+        assertScript '''
+            class C {
+                private final Map<String, Boolean> map = [:]
+                void checkMap() {
+                    { ->
+                        map['key'] = true
+                    }.call()
+                    assert map == [key: true]
+                }
+            }
+            new C().checkMap()
+        '''
+    }
 }