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()
+ '''
+ }
}