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.