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()
+ '''
}
}