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 6f94024  GROOVY-10326: STC: error for assignment `map*.key = x`
6f94024 is described below

commit 6f940246d4b77e01f5801fe23617b3ced2729901
Author: Eric Milles <[email protected]>
AuthorDate: Fri Oct 22 16:43:25 2021 -0500

    GROOVY-10326: STC: error for assignment `map*.key = x`
---
 .../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java  | 7 +++++--
 src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy         | 8 ++++----
 2 files changed, 9 insertions(+), 6 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 4ab3b0f..f7f75c4 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1766,8 +1766,10 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
         if (isOrImplements(testClass, MAP_TYPE)) {
             ClassNode mapType = testClass.equals(MAP_TYPE) ? testClass
                     : GenericsUtils.parameterizeType(testClass, MAP_TYPE);
-            GenericsType[] gts = mapType.getGenericsTypes();//<K,V>
-            if (gts == null || gts.length != 2) return OBJECT_TYPE;
+            GenericsType[] gts = mapType.getGenericsTypes();//<K,V> params
+            if (gts == null || gts.length != 2) gts = new GenericsType[] {
+                OBJECT_TYPE.asGenericsType(), OBJECT_TYPE.asGenericsType()
+            };
 
             if (!pexp.isSpreadSafe()) {
                 return getCombinedBoundType(gts[1]);
@@ -1775,6 +1777,7 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
                 // map*.property syntax acts on Entry
                 switch (pexp.getPropertyAsString()) {
                 case "key":
+                    pexp.putNodeMetaData(READONLY_PROPERTY,Boolean.TRUE); // 
GROOVY-10326
                     return makeClassSafe0(LIST_TYPE, gts[0]);
                 case "value":
                     GenericsType v = gts[1];
diff --git a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy 
b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
index 6d1adfb..697a866 100644
--- a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
+++ b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
@@ -767,10 +767,10 @@ class TypeInferenceSTCTest extends 
StaticTypeCheckingTestCase {
             [x:1,y:2,z:3]*.value = ""
         ''', 'Cannot assign java.util.List<java.lang.String> to: 
java.util.List<java.lang.Integer>'
 
-        def fail = shouldFail '''
-            [x:1,y:2,z:3]*.key = ""
-        '''
-        assert fail == 'Cannot set readonly property: key for class: 
java.util.LinkedHashMap$Entry'
+        // GROOVY-10326
+        shouldFailWithMessages '''
+            [x:1,y:2,z:3]*.key = null
+        ''', 'Cannot set read-only property: key'
     }
 
     void testFlowTypingWithStringVariable() {

Reply via email to