Allow to share classloader for non-inline dexmaker

As in 485c4374832af732e073c9656e5422ceb7d1635d

Test: Ran tests that use dexmaker.share_classloader property
Bug: 69848252
Change-Id: I8c2490c3ec8e8582dc41c486f8f7a406bd635ebb
diff --git a/README.version b/README.version
index 6708f4b..ce2cdcd 100644
--- a/README.version
+++ b/README.version
@@ -9,4 +9,4 @@
 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:
-        None
+        Allow to share classloader via dexmaker.share_classloader system property (I8c2490c3ec8e8582dc41c486f8f7a406bd635ebb)
diff --git a/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java b/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
index f934fa6..b19f7bd 100644
--- a/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
+++ b/dexmaker-mockito/src/main/java/com/android/dx/mockito/DexmakerMockMaker.java
@@ -55,9 +55,15 @@
         } else {
             // support concrete classes via dexmaker's ProxyBuilder
             try {
-                Class<? extends T> proxyClass = ProxyBuilder.forClass(typeToMock)
-                        .implementing(extraInterfaces)
-                        .buildProxyClass();
+                ProxyBuilder b = ProxyBuilder.forClass(typeToMock)
+                        .implementing(extraInterfaces);
+
+                if (Boolean.parseBoolean(
+                        System.getProperty("dexmaker.share_classloader", "false"))) {
+                    b.withSharedClassLoader();
+                }
+
+                Class<? extends T> proxyClass = b.buildProxyClass();
                 T mock = unsafeAllocator.newInstance(proxyClass);
                 ProxyBuilder.setInvocationHandler(mock, invocationHandler);
                 return mock;