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 ff767b9cdd GROOVY-11386: STC: closure method or property within static 
context
ff767b9cdd is described below

commit ff767b9cdd3b38a9b7e2fa887b6098e1bd1f4b24
Author: Eric Milles <[email protected]>
AuthorDate: Sat Jun 1 12:14:44 2024 -0500

    GROOVY-11386: STC: closure method or property within static context
---
 .../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java | 1 +
 src/test/groovy/transform/stc/ClosuresSTCTest.groovy             | 9 +++++++++
 2 files changed, 10 insertions(+)

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 4d8effca1e..acf7c9f730 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -3717,6 +3717,7 @@ out:    if ((samParameterTypes.length == 1 && 
isOrImplements(samParameterTypes[0
                     && !name.equals("call") && !name.equals("doCall")) { // 
GROOVY-9662
                     mn = CLOSURE_TYPE.getMethods(name);
                     if (!mn.isEmpty()) {
+                        receiver = CLOSURE_TYPE.getPlainNodeReference();
                         objectExpression.removeNodeMetaData(INFERRED_TYPE);
                     }
                 }
diff --git a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy 
b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
index b6354e9642..ae98a9a828 100644
--- a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
@@ -932,5 +932,14 @@ class ClosuresSTCTest extends StaticTypeCheckingTestCase {
             String z = { -> owner.metaClass }()
             assert !z.contains('$_run_closure')
         '''
+        assertScript '''
+            static foo() {
+                String x = { -> metaClass }()
+                assert x.contains('$_foo_closure')
+                String y = { -> getMetaClass() }()
+                assert y.contains('$_foo_closure')
+            }
+            foo()
+        '''
     }
 }

Reply via email to