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 2026/02/15 15:44:23 UTC
(groovy) 01/02: minor items
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-11858
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 0af3598443dac63329071dee92263c9162d52c32
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Feb 15 08:47:51 2026 -0600
minor items
---
.../groovy/runtime/metaclass/ClosureMetaClass.java | 6 +-
.../gls/invocation/ClosureDelegationTest.groovy | 146 +++++++++++----------
2 files changed, 80 insertions(+), 72 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
index 62140826cc..247cbf2048 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
@@ -47,9 +47,7 @@ import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -253,7 +251,7 @@ public final class ClosureMetaClass extends MetaClassImpl {
if (CLOSURE_DO_CALL_METHOD.equals(methodName) || CLOSURE_CALL_METHOD.equals(methodName)) {
method = pickClosureMethod(argClasses);
if (method == null && argClasses.length == 1 && List.class.isAssignableFrom(argClasses[0])) {
- var list = (theArguments[0] instanceof Wrapper ? ((Wrapper) theArguments[0]).unwrap() : theArguments[0]);
+ var list = (theArguments[0] instanceof Wrapper wrapper ? wrapper.unwrap() : theArguments[0]);
if (list != null) {
var newArguments = ((List<?>) list).toArray();
var newArgClasses = MetaClassHelper.convertToTypeArray(newArguments);
@@ -375,7 +373,7 @@ public final class ClosureMetaClass extends MetaClassImpl {
throw first;
}
- private static final Set<String> INTERNAL_METHODS = new HashSet<>(Arrays.asList("curry", "ncurry", "rcurry", "leftShift", "rightShift"));
+ private static final Set<String> INTERNAL_METHODS = Set.of("curry", "ncurry", "rcurry", "leftShift", "rightShift");
private static boolean isInternalMethod(final String methodName) {
return INTERNAL_METHODS.contains(methodName);
}
diff --git a/src/test/groovy/gls/invocation/ClosureDelegationTest.groovy b/src/test/groovy/gls/invocation/ClosureDelegationTest.groovy
index c22479dd6a..77ca5d319f 100644
--- a/src/test/groovy/gls/invocation/ClosureDelegationTest.groovy
+++ b/src/test/groovy/gls/invocation/ClosureDelegationTest.groovy
@@ -18,108 +18,117 @@
*/
package gls.invocation
-import gls.CompilableTestSupport
+import org.junit.jupiter.api.Test
-class ClosureDelegationTest extends CompilableTestSupport {
+import static groovy.test.GroovyAssert.assertScript
+final class ClosureDelegationTest {
+
+ @Test
void testMissingMethodMissingMethod() {
- assertScript """
-class A {
- def methodMissing(String name, args) {
- "A"
- }
-}
+ assertScript '''
+ class A {
+ def methodMissing(String name, args) {
+ "A"
+ }
+ }
-def methodMissing(String name, args) {
- visited=true
- throw new MissingMethodException(name,this.class,args)
-}
+ def methodMissing(String name, args) {
+ visited=true
+ throw new MissingMethodException(name,this.class,args)
+ }
-visited=false
-def closure = { foo() }
-closure.delegate = new A()
-assert closure() == "A"
-assert visited==true
- """
+ visited=false
+ def closure = { foo() }
+ closure.delegate = new A()
+ assert closure() == "A"
+ assert visited==true
+ '''
}
+ @Test
void testInvokeMethodMissingMethod() {
- assertScript """
-class A {
- def invokeMethod(String name, args) {
- "A"
- }
-}
+ assertScript '''
+ class A {
+ def invokeMethod(String name, args) {
+ "A"
+ }
+ }
-def methodMissing(String name, args) {
- visited=true
- throw new MissingMethodException(name,this.class,args)
-}
+ def methodMissing(String name, args) {
+ visited=true
+ throw new MissingMethodException(name,this.class,args)
+ }
-visited=false
-def closure = { foo() }
-closure.delegate = new A()
-assert closure() == "A"
-assert visited==true
- """
+ visited=false
+ def closure = { foo() }
+ closure.delegate = new A()
+ assert closure() == "A"
+ assert visited==true
+ '''
}
+ @Test
void testMissingMethodInvokeMethod() {
- assertScript """
-class A {
- def methodMissing(String name, args) {
- "A"
- }
-}
+ assertScript '''
+ class A {
+ def methodMissing(String name, args) {
+ "A"
+ }
+ }
-def invokeMethod(String name, args) {
- visited=true
- throw new MissingMethodException(name,this.class,args)
-}
+ def invokeMethod(String name, args) {
+ visited=true
+ throw new MissingMethodException(name,this.class,args)
+ }
-visited=false
-def closure = { foo() }
-closure.delegate = new A()
-assert closure() == "A"
-assert visited==true
- """
+ visited=false
+ def closure = { foo() }
+ closure.delegate = new A()
+ assert closure() == "A"
+ assert visited==true
+ '''
}
+ @Test
void testInvokeMethodInvokeMethod() {
- assertScript """
-class A {
- def invokeMethod(String name, args) {
- "A"
- }
-}
+ assertScript '''
+ class A {
+ def invokeMethod(String name, args) {
+ "A"
+ }
+ }
-def invokeMethod(String name, args) {
- visited=true
- throw new MissingMethodException(name,this.class,args)
-}
+ def invokeMethod(String name, args) {
+ visited=true
+ throw new MissingMethodException(name,this.class,args)
+ }
-visited=false
-def closure = { foo() }
-closure.delegate = new A()
-assert closure() == "A"
-assert visited==true
- """
+ visited=false
+ def closure = { foo() }
+ closure.delegate = new A()
+ assert closure() == "A"
+ assert visited==true
+ '''
}
+ @Test
void testStaticMethod() {
assertScript '''
class Foo {
- static visited
+ static visited
static closureInStaticContext = {
foo()
}
static foo(){ visited = true }
}
+
Foo.closureInStaticContext()
assert Foo.visited == true
'''
}
+ @Test
void testStaticContextClosureDelegation() {
assertScript '''
class Foo {
@@ -130,8 +139,9 @@ assert visited==true
static visited
def foo() { visited = true }
}
+
Foo.aClosure()
assert Bar.visited == true
'''
}
-}
\ No newline at end of file
+}