This is an automated email from the ASF dual-hosted git repository.
ivank pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new e5af4a2 Allow default methods in MavenClassloader callbacks
e5af4a2 is described below
commit e5af4a20f240f38c8ce712a5e3bba4976eb89a41
Author: Ivan Kelly <[email protected]>
AuthorDate: Tue Feb 20 18:07:54 2018 +0100
Allow default methods in MavenClassloader callbacks
AsyncCallback.AddCallback has recently acquired a default method,
which breaks the assumption that there is only one method on these
callbacks. However, if does have a default method that calls the one
method. This patch takes advantage of that to allow us to use
AddCallback in tests.
Author: Ivan Kelly <[email protected]>
Reviewers: Enrico Olivelli <[email protected]>
This closes #1187 from ivankelly/groovy-callback-default
---
tests/integration-tests-base-groovy/pom.xml | 1 -
tests/integration-tests-utils/pom.xml | 6 ++++++
.../apache/bookkeeper/tests/MavenClassLoader.java | 21 ++++++++++++++++++---
tests/pom.xml | 5 +++++
4 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/tests/integration-tests-base-groovy/pom.xml
b/tests/integration-tests-base-groovy/pom.xml
index 9bf71b0..738e813 100644
--- a/tests/integration-tests-base-groovy/pom.xml
+++ b/tests/integration-tests-base-groovy/pom.xml
@@ -35,7 +35,6 @@
<name>Apache BookKeeper :: Tests :: Base module for Arquillian based
integration tests using groovy</name>
<properties>
- <groovy.version>2.4.13</groovy.version>
<groovy-eclipse-compiler.version>2.9.2-04</groovy-eclipse-compiler.version>
<groovy-eclipse-batch.version>2.4.13-02</groovy-eclipse-batch.version>
</properties>
diff --git a/tests/integration-tests-utils/pom.xml
b/tests/integration-tests-utils/pom.xml
index 35fb4c8..811efe2 100644
--- a/tests/integration-tests-utils/pom.xml
+++ b/tests/integration-tests-utils/pom.xml
@@ -92,6 +92,12 @@
<version>${arquillian-cube.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>${groovy.version}</version>
+ </dependency>
+
</dependencies>
<build>
diff --git
a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/MavenClassLoader.java
b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/MavenClassLoader.java
index d25dbc2..2c3bb30 100644
---
a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/MavenClassLoader.java
+++
b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/MavenClassLoader.java
@@ -22,7 +22,11 @@ package org.apache.bookkeeper.tests;
import com.google.common.collect.Lists;
+import groovy.lang.Closure;
+
import java.io.File;
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -135,14 +139,25 @@ public class MavenClassLoader implements AutoCloseable {
}
}
- public Object createCallback(String interfaceName, Object closure) throws
Exception {
+ public Object createCallback(String interfaceName, Closure closure) throws
Exception {
+ final Constructor<MethodHandles.Lookup> constructor =
MethodHandles.Lookup.class.getDeclaredConstructor(
+ Class.class, int.class);
+ constructor.setAccessible(true);
return Proxy.newProxyInstance(classloader,
new Class<?>[]{
Class.forName(interfaceName, true, classloader) },
new InvocationHandler() {
+
@Override
public Object invoke(Object proxy,
Method m, Object[] args) throws Throwable {
- Method call =
closure.getClass().getMethod("call", Object[].class);
- return call.invoke(closure,
(Object)args);
+ if (args.length ==
closure.getMaximumNumberOfParameters()) {
+ return closure.call(args);
+ } else {
+ final Class<?>
declaringClass = m.getDeclaringClass();
+ return
constructor.newInstance(declaringClass, MethodHandles.Lookup.PRIVATE)
+ .unreflectSpecial(m,
declaringClass)
+ .bindTo(proxy)
+
.invokeWithArguments(args);
+ }
}
});
}
diff --git a/tests/pom.xml b/tests/pom.xml
index fa8484c..db0d46e 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -27,6 +27,11 @@
<groupId>org.apache.bookkeeper.tests</groupId>
<artifactId>tests-parent</artifactId>
<name>Apache BookKeeper :: Tests</name>
+
+ <properties>
+ <groovy.version>2.4.13</groovy.version>
+ </properties>
+
<modules>
<module>shaded</module>
<module>docker-images</module>
--
To stop receiving notification emails like this one, please contact
[email protected].