You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/08/24 17:39:51 UTC
[groovy] 02/02: GROOVY-8762: within closure determined via `GeneratedClosure` interface
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit d11dc4ad0516cfaa970d95596db523439ca3b07b
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Aug 24 12:24:52 2022 -0500
GROOVY-8762: within closure determined via `GeneratedClosure` interface
---
build.bat | 1 +
.../groovy/classgen/asm/WriterController.java | 2 +-
src/test/gls/innerClass/InnerClassTest.groovy | 30 ++++++++++++++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/build.bat b/build.bat
new file mode 100644
index 0000000000..8dcd28a383
--- /dev/null
+++ b/build.bat
@@ -0,0 +1 @@
+.\gradlew --max-workers 1 --no-build-cache --no-daemon --no-scan %*
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
index b70e923fe7..2c61d3ad72 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
@@ -335,7 +335,7 @@ public class WriterController {
public boolean isInClosure() {
return classNode.getOuterClass() != null
- && classNode.getSuperClass() == ClassHelper.CLOSURE_TYPE);
+ && classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type);
}
public boolean isInClosureConstructor() {
diff --git a/src/test/gls/innerClass/InnerClassTest.groovy b/src/test/gls/innerClass/InnerClassTest.groovy
index 0d9e17d846..9bff30aada 100644
--- a/src/test/gls/innerClass/InnerClassTest.groovy
+++ b/src/test/gls/innerClass/InnerClassTest.groovy
@@ -1851,6 +1851,36 @@ final class InnerClassTest {
'''
}
+ @Test // GROOVY-8762
+ void testReferenceToPrivateFieldInConstructor() {
+ assertScript '''
+ class Outer {
+ static class Inner extends Closure {
+ private int x, y
+ Inner(int i) {
+ super(null, null)
+ x = i
+ this.y = i // NullPointerException
+ }
+ def doCall(... args) {
+ return 42
+ }
+ int getMaximumNumberOfParameters() {
+ throw new UnsupportedOperationException()
+ }
+ Class[] getParameterTypes() {
+ throw new UnsupportedOperationException()
+ }
+ }
+ def makeCallable() {
+ new Inner(1)
+ }
+ }
+ Number result = new Outer().makeCallable().call()
+ assert result == 42
+ '''
+ }
+
@Test // GROOVY-7609
void testReferenceToInitializedThis1() {
assertScript '''