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 {