Revert "Harmony: Change Mock build"

This reverts commit 6c0ea5e6e8c042dce3a7ac529354d18fedc3f894.

Reason for revert: breaks on restricted manifests

Bug: 116674705
Change-Id: I71d501dccc17aae6be4523695a66309240076d69
diff --git a/jdwp/Android.bp b/jdwp/Android.bp
index 4d4e3d5..25a407e 100644
--- a/jdwp/Android.bp
+++ b/jdwp/Android.bp
@@ -1,18 +1,8 @@
-java_genrule {
-    name: "SourceDebugExtensionMockClass_gen",
-    host_supported: true,
-    srcs: ["src/test/resources/org/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass.class"],
-    tools: ["soong_zip"],
-    cmd: "$(location soong_zip) -jar -o $(out) -C external/apache-harmony/jdwp/src/test/resources -f $(in)",
-    out: ["SourceDebugExtensionMockClass_gen.jar"],
-}
-
-java_defaults {
-    name: "apache-harmony-jdwp-defaults",
+java_test {
+    name: "CtsJdwp",
     srcs: ["src/test/java/**/*.java"],
     exclude_srcs: ["src/test/java/org/apache/harmony/jpda/tests/jdwp/DDM/**/*.java"],
     libs: ["junit"],
-    static_libs: ["SourceDebugExtensionMockClass_gen"],
 
     errorprone: {
         javacflags: [
@@ -21,6 +11,20 @@
             "-Xep:MissingOverride:OFF",
         ],
     },
+}
+
+java_test {
+    name: "apache-harmony-jdwp-tests",
+    hostdex: true,
+    host_supported: true,
+    srcs: ["src/test/java/**/*.java"],
+    no_framework_libs: true,
+    libs: ["junit"],
+
+    // b/73499927
+    errorprone: {
+        javacflags: ["-Xep:MissingOverride:OFF"],
+    },
 
     target: {
         host: {
@@ -29,19 +33,6 @@
     },
 }
 
-java_test {
-    name: "CtsJdwp",
-    defaults: ["apache-harmony-jdwp-defaults"],
-}
-
-java_test {
-    name: "apache-harmony-jdwp-tests",
-    defaults: ["apache-harmony-jdwp-defaults"],
-    hostdex: true,
-    host_supported: true,
-
-}
-
 java_library_host {
     name: "apache-harmony-jdwp-tests-host",
     static_libs: ["apache-harmony-jdwp-tests"],
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
index 1f24c55..ae3033d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
@@ -150,7 +150,7 @@
             return;
         }
 
-        String expectedClassSignature = getClassSignature(SourceDebugExtensionMockClass.class);
+        String expectedClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass;";
 
         logWriter.println("==> testClassPrepareEventForSourceNameMatch started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
index ebf74e8..ea90778 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
@@ -25,23 +25,153 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ReferenceType;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Proxy;
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Base64;
 
-import org.apache.harmony.jpda.tests.jdwp.Events.SourceDebugExtensionMockClass;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 public class SourceDebugExtensionDebuggee extends SyncDebuggee {
 
+    private final static String classWithSourceDebugExtension =
+        "org.apache.harmony.jpda.tests.jdwp.Events.SourceDebugExtensionMockClass";
+
+    private final static String inMemoryDexClassLoaderClass =
+        "dalvik.system.InMemoryDexClassLoader";
+
+    /*
+     * A base64 string of a dex file built from the
+     * class packaged with apache-harmony for JSR45 testing:
+     *
+     *  cd apache-harmony/jdwp/src/test/resources
+     *  dx --dex --output=classes.dex \
+     *      org/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass.class
+     *
+     * This simplifies dealing with multiple dex files in the Android
+     * build system and with Jack which discards the JSR45 metadata.
+     */
+    private final static String base64DexWithExtensionClass =
+"ZGV4CjAzNQAktKYbHXK+eDSBH4IRfDw2pS8X3+CKeds0BAAAcAAAAHhWNBIAAAAAAAAAAHADAAAT" +
+"AAAAcAAAAAgAAAC8AAAAAwAAANwAAAABAAAAAAEAAAQAAAAIAQAAAQAAACgBAADsAgAASAEAAKYB" +
+"AACuAQAAuwEAAOUBAAD8AQAAEAIAACQCAAA4AgAAgwIAAOkCAAANAwAAEAMAABQDAAApAwAALwMA" +
+"ADUDAAA6AwAAQwMAAEkDAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAKAAAADAAAAAoAAAAGAAAA" +
+"AAAAAAsAAAAGAAAAmAEAAAsAAAAGAAAAoAEAAAQAAQAPAAAAAQABABAAAAACAAAAAAAAAAUAAAAA" +
+"AAAABQACAA4AAAAFAAAAAQAAAAIAAAAAAAAACQAAAIgBAABiAwAAAAAAAAEAAABcAwAAAQABAAEA" +
+"AABQAwAABAAAAHAQAQAAAA4AAwABAAIAAABVAwAACAAAAGIAAAAaAQEAbiAAABAADgBIAQAAAAAA" +
+"AAAAAAAAAAAAAQAAAAMAAAABAAAABwAGPGluaXQ+AAtIZWxsbyBXb3JsZAAoTGRhbHZpay9hbm5v" +
+"dGF0aW9uL1NvdXJjZURlYnVnRXh0ZW5zaW9uOwAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABJMamF2" +
+"YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwASTGphdmEvbGFuZy9TeXN0ZW07AElM" +
+"b3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvamR3cC9FdmVudHMvU291cmNlRGVidWdFeHRl" +
+"bnNpb25Nb2NrQ2xhc3M7AGRTTUFQCmhlbGxvd29ybGRfanNwLmphdmEKSlNQCipTIEpTUAoqRgor" +
+"IDAgaGVsbG93b3JsZC5qc3AKaGVsbG93b3JsZC5qc3AKKkwKMSw1OjUzCjY6NTgsMwo3LDQ6NjEK" +
+"KkUKACJTb3VyY2VEZWJ1Z0V4dGVuc2lvbk1vY2tDbGFzcy5qYXZhAAFWAAJWTAATW0xqYXZhL2xh" +
+"bmcvU3RyaW5nOwAEYXJncwAEbWFpbgADb3V0AAdwcmludGxuAAR0aGlzAAV2YWx1ZQADAAcOAAYB" +
+"DgcOeAACAAESFwgAAAIAAoGABNACAQnoAhAAAAAAAAAAAQAAAAAAAAABAAAAEwAAAHAAAAACAAAA" +
+"CAAAALwAAAADAAAAAwAAANwAAAAEAAAAAQAAAAABAAAFAAAABAAAAAgBAAAGAAAAAQAAACgBAAAD" +
+"EAAAAQAAAEgBAAABIAAAAgAAAFABAAAGIAAAAQAAAIgBAAABEAAAAgAAAJgBAAACIAAAEwAAAKYB" +
+"AAADIAAAAgAAAFADAAAEIAAAAQAAAFwDAAAAIAAAAQAAAGIDAAAAEAAAAQAAAHADAAA=";
+
+    /*
+     * A base64 string of a jar file containing:
+     * org/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass.class
+     */
+    private final static String base64JarWithExtensionClass =
+"UEsDBBQACAgIAAZwmUoAAAAAAAAAAAAAAAAJAAQATUVUQS1JTkYv/soAAAMAUEsHCAAAAAACAAAA" +
+"AAAAAFBLAwQUAAgICAAGcJlKAAAAAAAAAAAAAAAAFAAAAE1FVEEtSU5GL01BTklGRVNULk1G803M" +
+"y0xLLS7RDUstKs7Mz7NSMNQz4OVyLkpNLElN0XWqBAlY6BnEm5jqZuaVpBblJeYoaPgXJSbnpCo4" +
+"5xcV5BcllgD1afJy8XIBAFBLBwiUuAa1TAAAAE0AAABQSwMECgAACAAATYIRSQAAAAAAAAAAAAAA" +
+"AAQAAABvcmcvUEsDBAoAAAgAAE2CEUkAAAAAAAAAAAAAAAALAAAAb3JnL2FwYWNoZS9QSwMECgAA" +
+"CAAATYIRSQAAAAAAAAAAAAAAABMAAABvcmcvYXBhY2hlL2hhcm1vbnkvUEsDBAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAYAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvUEsDBAoAAAgAAE2CEUkAAAAA" +
+"AAAAAAAAAAAeAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvUEsDBAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAjAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvamR3cC9QSwMECgAA" +
+"CAAAHUmYSgAAAAAAAAAAAAAAACoAAABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS90ZXN0cy9qZHdw" +
+"L0V2ZW50cy9QSwMEFAAICAgATYIRSQAAAAAAAAAAAAAAAE0AAABvcmcvYXBhY2hlL2hhcm1vbnkv" +
+"anBkYS90ZXN0cy9qZHdwL0V2ZW50cy9Tb3VyY2VEZWJ1Z0V4dGVuc2lvbk1vY2tDbGFzcy5jbGFz" +
+"c61RTW/TQBB926Rxsg20JE35Brdc0hDVRCUtShASKikfciGSUThwQBt75TjYXst2Wvqz4AASB34A" +
+"PwoxdipFoIgTe5i3M/tm9N7sz1/ffwDo4J6GFYbnKnYNEQl7Io2JiAMVnhvTyBFGKpM0MabOWWQM" +
+"TmVId0vNYls+k+OZO/iUyjDxVHii7I9HvkgSDUWGjak4FYYvQtd4M55KO2UoPfZCL33CUGjujhiK" +
+"R8qRHAVUqlhFiWHd9EL5ehaMZfxWjH3JUDOVLfyRiL0svygW04mXMLw0/5PcPo0MhBcybDXfmwvZ" +
+"Vhp7odvfHVVwBXUNtT9MWedJKoMqNtEgQ2pG/hrzZk8ZQ+pMqV+KoF/GVYa1F9L3lf5Oxb7DcR03" +
+"NdxgqC/hV3ELtxm0KCv5JKrRXKaJNIvYpTXUl0hm4HPHx162sJ1/2t/L2hk2l5GwDTKH7KzQjX6J" +
+"okaZQcgIV1vfUP6cP3OKpbxYwBrF6pxAeImwgstYv2g+zIdR7Qs2altfcW0xgBNmY8pEXAyp4A7u" +
+"5hw9j9vYIXSsk6dDPskWe5bt9cM0iXIz/JU15C1Lz+GY39cf6AvWHrH4X2nL5J12t9fd5we97qP2" +
+"Pj9sP+wddHhrwH8DUEsHCFc9MsLTAQAAIwMAAFBLAQIUABQACAgIAAZwmUoAAAAAAgAAAAAAAAAJ" +
+"AAQAAAAAAAAAAAAAAAAAAABNRVRBLUlORi/+ygAAUEsBAhQAFAAICAgABnCZSpS4BrVMAAAATQAA" +
+"ABQAAAAAAAAAAAAAAAAAPQAAAE1FVEEtSU5GL01BTklGRVNULk1GUEsBAgoACgAACAAATYIRSQAA" +
+"AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAywAAAG9yZy9QSwECCgAKAAAIAABNghFJAAAAAAAAAAAA" +
+"AAAACwAAAAAAAAAAAAAAAADtAAAAb3JnL2FwYWNoZS9QSwECCgAKAAAIAABNghFJAAAAAAAAAAAA" +
+"AAAAEwAAAAAAAAAAAAAAAAAWAQAAb3JnL2FwYWNoZS9oYXJtb255L1BLAQIKAAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAEcBAABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS9QSwEC" +
+"CgAKAAAIAABNghFJAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAB9AQAAb3JnL2FwYWNoZS9oYXJt" +
+"b255L2pwZGEvdGVzdHMvUEsBAgoACgAACAAATYIRSQAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAA" +
+"uQEAAG9yZy9hcGFjaGUvaGFybW9ueS9qcGRhL3Rlc3RzL2pkd3AvUEsBAgoACgAACAAAHUmYSgAA" +
+"AAAAAAAAAAAAACoAAAAAAAAAAAAAAAAA+gEAAG9yZy9hcGFjaGUvaGFybW9ueS9qcGRhL3Rlc3Rz" +
+"L2pkd3AvRXZlbnRzL1BLAQIUABQACAgIAE2CEUlXPTLC0wEAACMDAABNAAAAAAAAAAAAAAAAAEIC" +
+"AABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS90ZXN0cy9qZHdwL0V2ZW50cy9Tb3VyY2VEZWJ1Z0V4" +
+"dGVuc2lvbk1vY2tDbGFzcy5jbGFzc1BLBQYAAAAACgAKAN8CAACQBAAAAAA=";
+
+    private ClassLoader getClassLoaderInitializedWithDexFile() {
+        try {
+            byte[] dexBytes = Base64.getDecoder().decode(base64DexWithExtensionClass);
+            ByteBuffer dexBuffer = ByteBuffer.wrap(dexBytes);
+            Class<?> klass = Class.forName(inMemoryDexClassLoaderClass);
+            Constructor<?> constructor = klass.getConstructor(ByteBuffer.class, ClassLoader.class);
+            return (ClassLoader) constructor.newInstance(dexBuffer,
+                                                         ClassLoader.getSystemClassLoader());
+        } catch (Exception e) {
+            logWriter.println("--> Debuggee: Failed to instantiate " + inMemoryDexClassLoaderClass
+                              + " " + e);
+            return null;
+        }
+    }
+
+    private ClassLoader getClassLoaderInitializedWithClassFile() {
+        try {
+            byte[] jarBytes = Base64.getDecoder().decode(base64JarWithExtensionClass);
+            Path jarPath = Files.createTempFile(null, "jar");
+            jarPath.toFile().deleteOnExit();
+            Files.write(jarPath, jarBytes);
+            return new URLClassLoader(new URL[] { jarPath.toUri().toURL() });
+        } catch (Exception e) {
+            logWriter.println("--> Debuggee: Failed to instantiate URLClassLoader: " + e);
+            return null;
+        }
+    }
+
     @Override
     public void run() {
+        ClassLoader classLoader = null;
+        if (System.getProperty("java.vendor").contains("Android")) {
+            classLoader = getClassLoaderInitializedWithDexFile();
+        } else {
+            classLoader = getClassLoaderInitializedWithClassFile();
+        }
+
+        Class<?> klass = null;
+        try {
+            klass = classLoader.loadClass(classWithSourceDebugExtension);
+        } catch (ClassNotFoundException e) {
+            logWriter.println("--> Debuggee: Could not find class " +
+                              classWithSourceDebugExtension);
+        }
+
         // Create an instance of classWithSourceDebugExtension so the
         // SourceDebugExtension metadata can be reported back to the debugger.
-        try {
-            SourceDebugExtensionMockClass.class.getConstructor().newInstance();
-        } catch (Exception e) {
-            logWriter.println("--> Debuggee: Failed to instantiate " +
-                              "SourceDebugExtensionMockClass: " + e);
+        Object o = null;
+        if (klass != null) {
+            try {
+                o = klass.getConstructor().newInstance();
+            } catch (Exception e) {
+                logWriter.println("--> Debuggee: Failed to instantiate " +
+                                  classWithSourceDebugExtension + ": " + e);
+            }
         }
 
         // Instantiate a proxy whose name should contain "$Proxy".
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
index 0a057e7..7f40430 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
@@ -29,7 +29,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
-import org.apache.harmony.jpda.tests.jdwp.Events.SourceDebugExtensionMockClass;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
@@ -117,7 +116,7 @@
      */
     public void testSourceDebugExtension001() {
         doTest("testSourceDebugExtension001",
-               getClassSignature(SourceDebugExtensionMockClass.class),
+               "Lorg/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass;",
                JDWPConstants.Error.NONE);
     }