diff options
Diffstat (limited to 'java/com/google/devtools/build/android/desugar/HeaderClassLoader.java')
-rw-r--r-- | java/com/google/devtools/build/android/desugar/HeaderClassLoader.java | 15 |
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); |