You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/12/01 10:41:48 UTC
[groovy] 10/20: GROOVY-8762: make WriterController#isInClosure()
more selective
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit d62a3f028b5a8abce20d6a3717c9c6c012adfddd
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Nov 25 17:26:10 2019 -0600
GROOVY-8762: make WriterController#isInClosure() more selective
- any inner class that extended Closure got closure literal treatment
(cherry picked from commit 3cbc7e3170330d250dc5a2036f910dbf15664199)
---
.../groovy/classgen/asm/WriterController.java | 7 +++----
src/test/groovy/bugs/Groovy8762.groovy | 22 +++++++---------------
2 files changed, 10 insertions(+), 19 deletions(-)
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 a3cb6df..7b88390 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
@@ -284,13 +284,12 @@ public class WriterController {
public boolean isInClosure() {
return classNode.getOuterClass() != null
- && classNode.getSuperClass() == ClassHelper.CLOSURE_TYPE;
+ && classNode.getSuperClass().equals(ClassHelper.CLOSURE_TYPE)
+ && classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type);
}
public boolean isInClosureConstructor() {
- return constructorNode != null
- && classNode.getOuterClass() != null
- && classNode.getSuperClass() == ClassHelper.CLOSURE_TYPE;
+ return isConstructor() && isInClosure();
}
public boolean isStaticMethod() {
diff --git a/src/test/groovy/bugs/Groovy8762.groovy b/src/test/groovy/bugs/Groovy8762.groovy
index cb8c390..9fd5383 100644
--- a/src/test/groovy/bugs/Groovy8762.groovy
+++ b/src/test/groovy/bugs/Groovy8762.groovy
@@ -18,7 +18,6 @@
*/
package groovy.bugs
-import groovy.test.NotYetImplemented
import groovy.transform.CompileStatic
import org.junit.Test
@@ -27,7 +26,7 @@ import static groovy.test.GroovyAssert.assertScript
@CompileStatic
final class Groovy8762 {
- @Test @NotYetImplemented
+ @Test
void testExplicitThisObjectExpressionInInnerClassConstructor() {
assertScript '''
class Outer {
@@ -40,23 +39,15 @@ final class Groovy8762 {
this.y = i // NPE at groovy.bugs.Outer$Inner.<init>
}
- int getMaximumNumberOfParameters() {
- throw new UnsupportedOperationException()
- }
-
- Class<?>[] getParameterTypes() {
- throw new UnsupportedOperationException()
+ def doCall(... args) {
+ return 42
}
- Object call(Object... args) {
- throw new UnsupportedOperationException()
- }
-
- Object call(Object arguments) {
+ int getMaximumNumberOfParameters() {
throw new UnsupportedOperationException()
}
- Object call() {
+ Class<?>[] getParameterTypes() {
throw new UnsupportedOperationException()
}
}
@@ -66,7 +57,8 @@ final class Groovy8762 {
}
}
- assert new Outer().makeCallable()
+ def callback = new Outer().makeCallable()
+ assert callback() == 42
'''
}
}