Applied patch from https://code.google.com/p/dexmaker/issues/detail?id=20 to fix classloading issue.
Bug: 8108255
Change-Id: Ia67ba3dcaa5518d55beda8c5880b27e1eba4ad77
diff --git a/README b/README
index 82f57a4..270e5dd 100644
--- a/README
+++ b/README
@@ -14,5 +14,5 @@
It includes a stock code generator for class proxies. If you just want to do AOP or class mocking, you don't need to mess around with bytecodes.
Local Modifications:
-No modifications.
-
+Patch to fix http://b/8108255 (Some mockito-based cannot be initialized due to a classloader issue), while Dexmaker's issue #20 (https://code.google.com/p/dexmaker/issues/detail?id=20) is not fixed.
+(to apply, run 'patch -p0 < bug-xyz.patch' from a fresh src)
diff --git a/bug-8108255.patch b/bug-8108255.patch
new file mode 100644
index 0000000..6e1566d
--- /dev/null
+++ b/bug-8108255.patch
@@ -0,0 +1,16 @@
+diff -ur src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java patched_src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java
+--- src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java 2013-01-07 11:27:13.000000000 -0800
++++ patched_src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java 2013-02-15 11:27:44.000000000 -0800
+@@ -45,9 +45,10 @@
+ Class[] classesToMock = new Class[extraInterfaces.length + 1];
+ classesToMock[0] = typeToMock;
+ System.arraycopy(extraInterfaces, 0, classesToMock, 1, extraInterfaces.length);
++ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ @SuppressWarnings("unchecked") // newProxyInstance returns the type of typeToMock
+- T mock = (T) Proxy.newProxyInstance(typeToMock.getClassLoader(),
+- classesToMock, invocationHandler);
++ T mock = (T) Proxy.newProxyInstance(contextClassLoader, classesToMock,
++ invocationHandler);
+ return mock;
+
+ } else {
diff --git a/src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java b/src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java
index b29c267..5063d75 100644
--- a/src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java
+++ b/src/mockito/java/com/google/dexmaker/mockito/DexmakerMockMaker.java
@@ -45,9 +45,10 @@
Class[] classesToMock = new Class[extraInterfaces.length + 1];
classesToMock[0] = typeToMock;
System.arraycopy(extraInterfaces, 0, classesToMock, 1, extraInterfaces.length);
+ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
@SuppressWarnings("unchecked") // newProxyInstance returns the type of typeToMock
- T mock = (T) Proxy.newProxyInstance(typeToMock.getClassLoader(),
- classesToMock, invocationHandler);
+ T mock = (T) Proxy.newProxyInstance(contextClassLoader, classesToMock,
+ invocationHandler);
return mock;
} else {