This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
commit 4d2a40483d6893df17fe2826fba332b8648fd1f9 Author: Andi Huber <ahu...@apache.org> AuthorDate: Sat May 19 19:08:38 2018 +0200 ISIS-1949: deprecating JavassistImposteriser ... ... use ImposteriserUsingCodegenPlugin instead Task-Url: https://issues.apache.org/jira/browse/ISIS-1949 --- ...er.java => ImposteriserUsingCodegenPlugin.java} | 75 +++++----------------- .../jmocking/JavassistImposteriser.java | 5 ++ 2 files changed, 20 insertions(+), 60 deletions(-) diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java similarity index 53% copy from core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java copy to core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java index 5f3efdc..17b901f 100644 --- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java +++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java @@ -16,29 +16,22 @@ */ package org.apache.isis.core.unittestsupport.jmocking; -import javassist.util.proxy.MethodFilter; -import javassist.util.proxy.MethodHandler; -import javassist.util.proxy.ProxyFactory; -import javassist.util.proxy.ProxyObject; - -import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; + +import org.apache.isis.core.plugins.codegen.ProxyFactory; import org.jmock.api.Imposteriser; import org.jmock.api.Invocation; import org.jmock.api.Invokable; import org.jmock.lib.JavaReflectionImposteriser; -import org.objenesis.Objenesis; -import org.objenesis.ObjenesisStd; -public class JavassistImposteriser implements Imposteriser { +public class ImposteriserUsingCodegenPlugin implements Imposteriser { - public static final Imposteriser INSTANCE = new JavassistImposteriser(); + public static final Imposteriser INSTANCE = new ImposteriserUsingCodegenPlugin(); private final Imposteriser reflectionImposteriser = new JavaReflectionImposteriser(); - private final Objenesis objenesis = new ObjenesisStd(); - private JavassistImposteriser() { + private ImposteriserUsingCodegenPlugin() { } @@ -62,15 +55,16 @@ public class JavassistImposteriser implements Imposteriser { return reflectionImposteriser.imposterise(mockObject, mockedType, ancilliaryTypes); } - try { - setConstructorsAccessible(mockedType, true); - - final Class<?> proxyClass = proxyClass(mockedType, ancilliaryTypes); - final Object proxy = proxy(proxyClass, mockObject); - return mockedType.cast(proxy); - } finally { - setConstructorsAccessible(mockedType, false); - } + + final ProxyFactory<T> factory = ProxyFactory.builder(mockedType) + .interfaces(ancilliaryTypes) + .build(); + + final boolean initialize = false; + + return factory.createInstance( + (obj, method, args)->mockObject.invoke(new Invocation(obj, method, args)), + initialize); } // ////////////////////////////////////// @@ -88,44 +82,5 @@ public class JavassistImposteriser implements Imposteriser { throw new Error("no public toString method found", e); } } - - private static void setConstructorsAccessible(Class<?> mockedType, boolean accessible) { - for (Constructor<?> constructor : mockedType.getDeclaredConstructors()) { - constructor.setAccessible(accessible); - } - } - - private Class<?> proxyClass(Class<?> mockedType, Class<?>... ancilliaryTypes) { - - final ProxyFactory proxyFactory = new ProxyFactory(); - proxyFactory.setFilter(new MethodFilter() { - @Override - public boolean isHandled(final Method m) { - // ignore finalize() and also bridge methods - return !m.getName().equals("finalize") || m.isBridge(); //[ahuber] this code does not ignore bridges! - } - }); - - proxyFactory.setSuperclass(mockedType); - proxyFactory.setInterfaces(ancilliaryTypes); - - return proxyFactory.createClass(); - } - - - private Object proxy(Class<?> proxyClass, final Invokable mockObject) { - - final ProxyObject proxyObject = (ProxyObject) objenesis.newInstance(proxyClass); - proxyObject.setHandler(new MethodHandler() { - @Override - public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable { - return mockObject.invoke(new Invocation(self, thisMethod, args)); - } - }); - - return proxyObject; - } - - } diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java index 5f3efdc..3eaed36 100644 --- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java +++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jmocking/JavassistImposteriser.java @@ -31,6 +31,11 @@ import org.jmock.lib.JavaReflectionImposteriser; import org.objenesis.Objenesis; import org.objenesis.ObjenesisStd; +/** + * @deprecated with 2.0.0, use {@link ImposteriserUsingCodegenPlugin} instead + * + */ +@Deprecated public class JavassistImposteriser implements Imposteriser { public static final Imposteriser INSTANCE = new JavassistImposteriser(); -- To stop receiving notification emails like this one, please contact ahu...@apache.org.