blob: 59d4d324c6e74c742231e45063cef3e6d904c96b [file] [log] [blame]
--- src/mockito/java/com/google/dexmaker/mockito/UnsafeAllocator.java
+++ src/mockito/java/com/google/dexmaker/mockito/UnsafeAllocator.java
@@ -92,6 +92,29 @@ abstract class UnsafeAllocator {
} catch (Exception ignored) {
}
+ // try dalvikvm, with change https://android-review.googlesource.com/#/c/52331/
+ // public class ObjectStreamClass {
+ // private static native long getConstructorId(Class<?> c);
+ // private static native Object newInstance(Class<?> instantiationClass, long methodId);
+ // }
+ try {
+ Method getConstructorId = ObjectStreamClass.class
+ .getDeclaredMethod("getConstructorId", Class.class);
+ getConstructorId.setAccessible(true);
+ final long constructorId = (Long) getConstructorId.invoke(null, Object.class);
+ final Method newInstance = ObjectStreamClass.class
+ .getDeclaredMethod("newInstance", Class.class, long.class);
+ newInstance.setAccessible(true);
+ return new UnsafeAllocator() {
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T> T newInstance(Class<T> c) throws Exception {
+ return (T) newInstance.invoke(null, c, constructorId);
+ }
+ };
+ } catch (Exception ignored) {
+ }
+
// give up
return new UnsafeAllocator() {
@Override
@@ -100,4 +123,4 @@ abstract class UnsafeAllocator {
}
};
}
-}
\ No newline at end of file
+}