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 e54a452ad4 GROOVY-11369: STC: map entry comes before access method
(pt.4)
e54a452ad4 is described below
commit e54a452ad495e84dd550dc130027dd8042c6fa3a
Author: Eric Milles <[email protected]>
AuthorDate: Wed May 15 16:51:09 2024 -0500
GROOVY-11369: STC: map entry comes before access method (pt.4)
---
.../transform/stc/StaticTypeCheckingVisitor.java | 2 +-
.../transform/stc/FieldsAndPropertiesSTCTest.groovy | 19 +++++++++++++++++++
.../sc/FieldsAndPropertiesStaticCompileTest.groovy | 19 +++++++++++++++++++
3 files changed, 39 insertions(+), 1 deletion(-)
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 6c7abe4692..4262eb31f4 100644
---
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1651,7 +1651,7 @@ public class StaticTypeCheckingVisitor extends
ClassCodeVisitorSupport {
foundGetterOrSetter = (foundGetterOrSetter || getter != null
|| !setters.isEmpty());
}
- if (readMode && (isThisExpression(objectExpression) ||
isSuperExpression(objectExpression) || !isOrImplements(objectExpressionType,
MAP_TYPE))) { // GROOVY-11370, GROOVY-11372
+ if (readMode && !isMapProperty(pexp)) { // GROOVY-11369,
GROOVY-11370, GROOVY-11372
// GROOVY-5568, GROOVY-9115, GROOVY-9123: the property may be
defined by an extension
for (ClassNode dgmReceiver : isPrimitiveType(receiverType) ?
new ClassNode[]{receiverType, getWrapper(receiverType)} : new
ClassNode[]{receiverType}) {
Set<MethodNode> methods =
findDGMMethodsForClassNode(getSourceUnit().getClassLoader(), dgmReceiver,
getterName);
diff --git a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
index e2583d8f32..d63a515efb 100644
--- a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
+++ b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
@@ -729,6 +729,25 @@ class FieldsAndPropertiesSTCTest extends
StaticTypeCheckingTestCase {
new C().test()
"""
}
+ assertScript '''
+ class C implements Map<String,String> {
+ @Delegate Map<String,String> impl = [:].withDefault{ 'entry' }
+ }
+ class D extends C {
+ void test() {
+ @ASTTest(phase=INSTRUCTION_SELECTION, value={
+ assert node.getNodeMetaData(INFERRED_TYPE) ==
STRING_TYPE
+ })
+ def one = this.metaClass; assert one == 'entry'
+
+ @ASTTest(phase=INSTRUCTION_SELECTION, value={
+ assert node.getNodeMetaData(INFERRED_TYPE) ==
STRING_TYPE
+ })
+ def two = super.metaClass; assert two == 'entry'
+ }
+ }
+ new D().test()
+ '''
}
// GROOVY-8074
diff --git
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
index 4cab93b46e..64c9b4fc5d 100644
---
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
+++
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
@@ -885,6 +885,25 @@ final class FieldsAndPropertiesStaticCompileTest extends
FieldsAndPropertiesSTCT
new C().test()
"""
}
+ assertScript '''
+ class C implements Map<String,String> {
+ @Delegate Map<String,String> impl = [:].withDefault{ 'entry' }
+ }
+ class D extends C {
+ void test() {
+ @ASTTest(phase=INSTRUCTION_SELECTION, value={
+ assert node.getNodeMetaData(INFERRED_TYPE) ==
METACLASS_TYPE
+ })
+ def one = this.metaClass; assert one instanceof MetaClass
+
+ @ASTTest(phase=INSTRUCTION_SELECTION, value={
+ assert node.getNodeMetaData(INFERRED_TYPE) ==
STRING_TYPE
+ })
+ def two = super.metaClass; assert two == 'entry'
+ }
+ }
+ new D().test()
+ '''
}
// GROOVY-11223, GROOVY-11373