summaryrefslogtreecommitdiff
path: root/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/devtools/build/android/desugar/HeaderClassLoader.java')
-rw-r--r--java/com/google/devtools/build/android/desugar/HeaderClassLoader.java15
1 files changed, 9 insertions, 6 deletions
diff --git a/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java b/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
index 90abfd4..053d52d 100644
--- a/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
+++ b/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java
@@ -42,11 +42,12 @@ import org.objectweb.asm.Opcodes;
class HeaderClassLoader extends ClassLoader {
private final Map<String, JarFile> jarfiles;
+ private final CoreLibraryRewriter rewriter;
/** Creates a classloader from the given classpath with the given parent. */
- public static HeaderClassLoader fromClassPath(List<Path> classpath, ClassLoader parent)
- throws IOException {
- return new HeaderClassLoader(indexJars(classpath), parent);
+ public static HeaderClassLoader fromClassPath(
+ List<Path> classpath, CoreLibraryRewriter rewriter, ClassLoader parent) throws IOException {
+ return new HeaderClassLoader(indexJars(classpath), rewriter, parent);
}
/**
@@ -67,14 +68,16 @@ class HeaderClassLoader extends ClassLoader {
return result;
}
- private HeaderClassLoader(Map<String, JarFile> jarfiles, ClassLoader parent) {
+ private HeaderClassLoader(
+ Map<String, JarFile> jarfiles, CoreLibraryRewriter rewriter, ClassLoader parent) {
super(parent);
+ this.rewriter = rewriter;
this.jarfiles = jarfiles;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
- String filename = name.replace('.', '/') + ".class";
+ String filename = rewriter.unprefix(name.replace('.', '/') + ".class");
JarFile jarfile = jarfiles.get(filename);
if (jarfile == null) {
throw new ClassNotFoundException();
@@ -82,7 +85,7 @@ class HeaderClassLoader extends ClassLoader {
ZipEntry entry = jarfile.getEntry(filename);
byte[] bytecode;
try (InputStream content = jarfile.getInputStream(entry)) {
- ClassReader reader = new ClassReader(content);
+ ClassReader reader = rewriter.reader(content);
// Have ASM compute maxs so we don't need to figure out how many formal parameters there are
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
reader.accept(new CodeStubber(writer), 0);