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 '''