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() {