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 <[email protected]> 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 '''
