diff options
author | 2016-01-23 14:16:58 +0000 | |
---|---|---|
committer | 2016-01-23 14:16:58 +0000 | |
commit | 5d5dbeb0344fa57f34cee40f01f96829eae4b514 (patch) | |
tree | 5e4a1f49fe8e59c105397b53da3a5a963a22a9ff /test/496-checker-inlining-and-class-loader/src/Main.java | |
parent | 01ebf4a0197ab221cb5af348607696458c5b927a (diff) | |
parent | 1bc977cf2f8199311a97f2ba9431a184540e3e9c (diff) |
Merge "Revert "Load app images""
Diffstat (limited to 'test/496-checker-inlining-and-class-loader/src/Main.java')
-rw-r--r-- | test/496-checker-inlining-and-class-loader/src/Main.java | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/test/496-checker-inlining-and-class-loader/src/Main.java b/test/496-checker-inlining-and-class-loader/src/Main.java index ea6df623a1..39c031a6bc 100644 --- a/test/496-checker-inlining-and-class-loader/src/Main.java +++ b/test/496-checker-inlining-and-class-loader/src/Main.java @@ -16,7 +16,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.List; class MyClassLoader extends ClassLoader { @@ -31,31 +30,18 @@ class MyClassLoader extends ClassLoader { Object pathList = f.get(loader); // Some magic to get access to the dexField field of pathList. - // Need to make a copy of the dex elements since we don't want an app image with pre-resolved - // things. f = pathList.getClass().getDeclaredField("dexElements"); f.setAccessible(true); - Object[] dexElements = (Object[]) f.get(pathList); - f = dexElements[0].getClass().getDeclaredField("dexFile"); - f.setAccessible(true); - for (Object element : dexElements) { - Object dexFile = f.get(element); - // Make copy. - Field fileNameField = dexFile.getClass().getDeclaredField("mFileName"); - fileNameField.setAccessible(true); - dexFiles.add(dexFile.getClass().getDeclaredConstructor(String.class).newInstance( - fileNameField.get(dexFile))); - } + dexElements = (Object[]) f.get(pathList); + dexFileField = dexElements[0].getClass().getDeclaredField("dexFile"); + dexFileField.setAccessible(true); } - ArrayList<Object> dexFiles = new ArrayList<Object>(); + Object[] dexElements; Field dexFileField; protected Class<?> loadClass(String className, boolean resolve) throws ClassNotFoundException { - // Other classes may also get loaded, ignore those. - if (className.equals("LoadedByMyClassLoader") || className.equals("FirstSeenByMyClassLoader")) { - System.out.println("Request for " + className); - } + System.out.println("Request for " + className); // We're only going to handle LoadedByMyClassLoader. if (className != "LoadedByMyClassLoader") { @@ -64,12 +50,13 @@ class MyClassLoader extends ClassLoader { // Mimic what DexPathList.findClass is doing. try { - for (Object dexFile : dexFiles) { - Method method = dexFile.getClass().getDeclaredMethod( + for (Object element : dexElements) { + Object dex = dexFileField.get(element); + Method method = dex.getClass().getDeclaredMethod( "loadClassBinaryName", String.class, ClassLoader.class, List.class); - if (dexFile != null) { - Class clazz = (Class)method.invoke(dexFile, className, this, null); + if (dex != null) { + Class clazz = (Class)method.invoke(dex, className, this, null); if (clazz != null) { return clazz; } |