You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/05/19 17:14:02 UTC
[isis] 04/05: ISIS-1949: deprecating JavassistImposteriser ...
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 <ah...@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
ahuber@apache.org.