Codebase list mozc / debian/1.12.1599.102-1 android / patches / MockMethodInterceptor.java.diff
debian/1.12.1599.102-1

Tree @debian/1.12.1599.102-1 (Download .tar.gz)

MockMethodInterceptor.java.diff @debian/1.12.1599.102-1raw · history · blame

--- a/./android/tests/gen_for_adt/org/mozc/android/inputmethod/japanese/testing/mocking/MockMethodInterceptor.java
+++ b/./android/tests/gen_for_adt/org/mozc/android/inputmethod/japanese/testing/mocking/MockMethodInterceptor.java
@@ -13,7 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.easymock.internal;
+package org.mozc.android.inputmethod.japanese.testing.mocking;
+
+import com.google.dexmaker.stock.ProxyBuilder;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -24,10 +26,8 @@
 import java.util.List;
 import java.util.Set;
 
-import net.sf.cglib.core.*;
-import net.sf.cglib.proxy.*;
-
 import org.easymock.ConstructorArgs;
+import org.easymock.internal.BridgeMethodResolver;
 
 /**
  * Factory generating a mock for a class.
@@ -37,11 +37,7 @@
  * 
  * @author Henri Tremblay
  */
-public class ClassProxyFactory<T> implements IProxyFactory<T> {
-
-    public static class MockMethodInterceptor implements MethodInterceptor, Serializable {
-
-        private static final long serialVersionUID = -9054190871232972342L;
+    public class MockMethodInterceptor implements InvocationHandler {
 
         private final InvocationHandler handler;
 
@@ -51,7 +47,8 @@
             this.handler = handler;
         }
 
-        public Object intercept(final Object obj, Method method, final Object[] args, final MethodProxy proxy)
+        @Override
+        public Object invoke(final Object obj, Method method, final Object[] args)
                 throws Throwable {
 
             // We conveniently mock abstract methods be default
@@ -70,7 +67,7 @@
                     final StackTraceElement element = elements[2];
                     if (element.getClassName().equals("org.easymock.internal.MockInvocationHandler")
                             && element.getMethodName().equals("invoke")) {
-                        return proxy.invokeSuper(obj, args);
+                        return ProxyBuilder.callSuper(obj, method, args);
                     }
                 }
             }
@@ -88,7 +85,7 @@
             }
 
             if (mockedMethods != null && !mockedMethods.contains(method)) {
-                return proxy.invokeSuper(obj, args);
+                return ProxyBuilder.callSuper(obj, method, args);
             }
 
             return handler.invoke(obj, method, args);
@@ -101,171 +98,4 @@
         public void setMockedMethods(final Method... mockedMethods) {
             this.mockedMethods = new HashSet<Method>(Arrays.asList(mockedMethods));
         }
-
-        @SuppressWarnings("unchecked")
-        private void readObject(final java.io.ObjectInputStream stream) throws IOException,
-                ClassNotFoundException {
-            stream.defaultReadObject();
-            final Set<MethodSerializationWrapper> methods = (Set<MethodSerializationWrapper>) stream
-                    .readObject();
-            if (methods == null) {
-                return;
-            }
-
-            mockedMethods = new HashSet<Method>(methods.size());
-            for (final MethodSerializationWrapper m : methods) {
-                try {
-                    mockedMethods.add(m.getMethod());
-                } catch (final NoSuchMethodException e) {
-                    // ///CLOVER:OFF
-                    throw new IOException(e.toString());
-                    // ///CLOVER:ON
-                }
-            }
-        }
-
-        private void writeObject(final java.io.ObjectOutputStream stream) throws IOException {
-            stream.defaultWriteObject();
-
-            if (mockedMethods == null) {
-                stream.writeObject(null);
-                return;
-            }
-
-            final Set<MethodSerializationWrapper> methods = new HashSet<MethodSerializationWrapper>(
-                    mockedMethods.size());
-            for (final Method m : mockedMethods) {
-                methods.add(new MethodSerializationWrapper(m));
-            }
-
-            stream.writeObject(methods);
-        }
-    }
-
-    // ///CLOVER:OFF (I don't know how to test it automatically yet)
-    private static final NamingPolicy ALLOWS_MOCKING_CLASSES_IN_SIGNED_PACKAGES = new DefaultNamingPolicy() {
-        @Override
-        public String getClassName(final String prefix, final String source, final Object key,
-                final Predicate names) {
-            return "codegen." + super.getClassName(prefix, source, key, names);
-        }
-    };
-
-    // ///CLOVER:ON
-
-    @SuppressWarnings("unchecked")
-    public T createProxy(final Class<T> toMock, final InvocationHandler handler) {
-
-        final Enhancer enhancer = createEnhancer(toMock);
-
-        final MethodInterceptor interceptor = new MockMethodInterceptor(handler);
-        enhancer.setCallbackType(interceptor.getClass());
-
-        Class mockClass;
-        try {
-            mockClass = enhancer.createClass();
-        } catch (final CodeGenerationException e) {
-            // ///CLOVER:OFF (don't know how to test it automatically)
-            // Probably caused by a NoClassDefFoundError, let's try EasyMock class loader
-            // instead of the default one (which is the class to mock one
-            // This is required by Eclipse Plug-ins, the mock class loader doesn't see
-            // cglib most of the time. Using EasyMock class loader solves this
-            // See issue ID: 2994002
-            enhancer.setClassLoader(getClass().getClassLoader());
-            mockClass = enhancer.createClass();
-            // ///CLOVER:ON
-        }
-
-        try {
-            Enhancer.registerCallbacks(mockClass, new Callback[] { interceptor });
-
-            if (ClassExtensionHelper.getCurrentConstructorArgs() != null) {
-                // Really instantiate the class
-                final ConstructorArgs args = ClassExtensionHelper.getCurrentConstructorArgs();
-                Constructor cstr;
-                try {
-                    // Get the constructor with the same params
-                    cstr = mockClass.getDeclaredConstructor(args.getConstructor().getParameterTypes());
-                } catch (final NoSuchMethodException e) {
-                    // Shouldn't happen, constructor is checked when ConstructorArgs is instantiated
-                    // ///CLOVER:OFF
-                    throw new RuntimeException("Fail to find constructor for param types", e);
-                    // ///CLOVER:ON
-                }
-                T mock;
-                try {
-                    cstr.setAccessible(true); // So we can call a protected
-                    // constructor
-                    mock = (T) cstr.newInstance(args.getInitArgs());
-                } catch (final InstantiationException e) {
-                    // ///CLOVER:OFF
-                    throw new RuntimeException("Failed to instantiate mock calling constructor", e);
-                    // ///CLOVER:ON
-                } catch (final IllegalAccessException e) {
-                    // ///CLOVER:OFF
-                    throw new RuntimeException("Failed to instantiate mock calling constructor", e);
-                    // ///CLOVER:ON
-                } catch (final InvocationTargetException e) {
-                    throw new RuntimeException(
-                            "Failed to instantiate mock calling constructor: Exception in constructor", e
-                                    .getTargetException());
-                }
-                return mock;
-            } else {
-                // Do not call any constructor
-
-                Factory mock;
-                try {
-                    mock = (Factory) ClassInstantiatorFactory.getInstantiator().newInstance(mockClass);
-                } catch (final InstantiationException e) {
-                    // ///CLOVER:OFF
-                    throw new RuntimeException("Fail to instantiate mock for " + toMock + " on "
-                            + ClassInstantiatorFactory.getJVM() + " JVM");
-                    // ///CLOVER:ON
-                }
-
-                // This call is required. CGlib has some "magic code" making sure a
-                // callback is used by only one instance of a given class. So only
-                // the
-                // instance created right after registering the callback will get
-                // it.
-                // However, this is done in the constructor which I'm bypassing to
-                // allow class instantiation without calling a constructor.
-                // Fortunately, the "magic code" is also called in getCallback which
-                // is
-                // why I'm calling it here mock.getCallback(0);
-                mock.getCallback(0);
-
-                return (T) mock;
-            }
-        } finally {
-            // To avoid CGLib out of memory issues
-            Enhancer.registerCallbacks(mockClass, null);
-        }
-    }
-
-    private Enhancer createEnhancer(final Class<T> toMock) {
-        // Create the mock
-        final Enhancer enhancer = new Enhancer() {
-            /**
-             * Filter all private constructors but do not check that there are
-             * some left
-             */
-            @SuppressWarnings("unchecked")
-            @Override
-            protected void filterConstructors(final Class sc, final List constructors) {
-                CollectionUtils.filter(constructors, new VisibilityPredicate(sc, true));
-            }
-        };
-        enhancer.setSuperclass(toMock);
-
-        // ///CLOVER:OFF (I don't know how to test it automatically yet)
-        // See issue ID: 2994002
-        if (toMock.getSigners() != null) {
-            enhancer.setNamingPolicy(ALLOWS_MOCKING_CLASSES_IN_SIGNED_PACKAGES);
-        }
-        // ///CLOVER:ON
-
-        return enhancer;
     }
-}