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

Reply via email to