diff options
author | Googler <noreply@google.com> | 2017-03-09 09:47:17 +0000 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-03-13 17:20:46 -0700 |
commit | e0eaafddc031c3a942c03db65854eb534b0ab3db (patch) | |
tree | d1a9d40c34c36e02ca871d6c8d5c66e335ba6691 /java/com/google/devtools/build/android/desugar/HeaderClassLoader.java | |
parent | b40221e4f50007ca4c1b59e6300ce6c7c1f5a1fb (diff) | |
download | desugar-e0eaafddc031c3a942c03db65854eb534b0ab3db.tar.gz |
Add an --copy_bridges_from_classpath argument
This argument allows to copy bridges from interfaces that are on the classpath to the desugared classes.
RELNOTES: Add an --copy_bridges_from_classpath argument to android desugaring tool
--
PiperOrigin-RevId: 149631699
MOS_MIGRATED_REVID=149631699
GitOrigin-RevId: 4369f79c0e1667ab517f7570aaa448184daf4e66
Change-Id: I20e23995cf6dbee54045b5020ae47a26350759b3
Diffstat (limited to 'java/com/google/devtools/build/android/desugar/HeaderClassLoader.java')
-rw-r--r-- | java/com/google/devtools/build/android/desugar/HeaderClassLoader.java | 40 |
1 files changed, 5 insertions, 35 deletions
diff --git a/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java b/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java index 053d52d..44c3932 100644 --- a/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java +++ b/java/com/google/devtools/build/android/desugar/HeaderClassLoader.java @@ -16,12 +16,6 @@ package com.google.devtools.build.android.desugar; import java.io.IOError; import java.io.IOException; import java.io.InputStream; -import java.nio.file.Path; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipEntry; import org.objectweb.asm.ClassReader; @@ -41,44 +35,20 @@ import org.objectweb.asm.Opcodes; */ class HeaderClassLoader extends ClassLoader { - private final Map<String, JarFile> jarfiles; + private final IndexedJars indexedJars; private final CoreLibraryRewriter rewriter; - /** Creates a classloader from the given classpath with the given parent. */ - public static HeaderClassLoader fromClassPath( - List<Path> classpath, CoreLibraryRewriter rewriter, ClassLoader parent) throws IOException { - return new HeaderClassLoader(indexJars(classpath), rewriter, parent); - } - - /** - * Opens the given list of Jar files and returns an index of all classes in them, to avoid - * scanning all Jars over and over for each class in {@link #findClass}. - */ - private static Map<String, JarFile> indexJars(List<Path> classpath) throws IOException { - HashMap<String, JarFile> result = new HashMap<>(); - for (Path jarfile : classpath) { - JarFile jar = new JarFile(jarfile.toFile()); - for (Enumeration<JarEntry> cur = jar.entries(); cur.hasMoreElements(); ) { - JarEntry entry = cur.nextElement(); - if (entry.getName().endsWith(".class") && !result.containsKey(entry.getName())) { - result.put(entry.getName(), jar); - } - } - } - return result; - } - - private HeaderClassLoader( - Map<String, JarFile> jarfiles, CoreLibraryRewriter rewriter, ClassLoader parent) { + public HeaderClassLoader( + IndexedJars indexedJars, CoreLibraryRewriter rewriter, ClassLoader parent) { super(parent); this.rewriter = rewriter; - this.jarfiles = jarfiles; + this.indexedJars = indexedJars; } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { String filename = rewriter.unprefix(name.replace('.', '/') + ".class"); - JarFile jarfile = jarfiles.get(filename); + JarFile jarfile = indexedJars.getJarFile(filename); if (jarfile == null) { throw new ClassNotFoundException(); } |