From 64898161b3de82f44f6e1d48e3037cc15e1c5ecd Mon Sep 17 00:00:00 2001 From: Izzat Bahadirov Date: Mon, 29 Apr 2013 16:09:36 -0400 Subject: [PATCH] Added API level check to adding methods to vtable. --- .../org/jf/dexlib2/analysis/ClassPath.java | 18 ++++++++++++------ .../org/jf/dexlib2/analysis/ClassProto.java | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java index a681f6ae..7ff939e9 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java @@ -55,14 +55,15 @@ public class ClassPath { @Nonnull private final TypeProto unknownClass; @Nonnull private DexFile[] dexFiles; @Nonnull private HashMap loadedClasses = Maps.newHashMap(); + @Nonnull private int api; /** * Creates a new ClassPath instance that can load classes from the given dex files * * @param classPath An array of DexFile objects. When loading a class, these dex files will be searched in order */ - public ClassPath(DexFile... classPath) throws IOException { - this(classPath, true); + public ClassPath(int api, DexFile... classPath) throws IOException { + this(api, classPath, true); } /** @@ -70,11 +71,11 @@ public class ClassPath { * * @param classPath An iterable of DexFile objects. When loading a class, these dex files will be searched in order */ - public ClassPath(Iterable classPath) { - this(Iterables.toArray(classPath, DexFile.class), false); + public ClassPath(int api, Iterable classPath) { + this(api, Iterables.toArray(classPath, DexFile.class), false); } - private ClassPath(@Nonnull DexFile[] classPath, boolean copyArray) { + private ClassPath(int api, @Nonnull DexFile[] classPath, boolean copyArray) { if (copyArray) { dexFiles = new DexFile[classPath.length+1]; System.arraycopy(classPath, 0, dexFiles, 0, classPath.length); @@ -86,6 +87,7 @@ public class ClassPath { unknownClass = new UnknownClassProto(this); loadedClasses.put(unknownClass.getType(), unknownClass); + this.api = api; loadPrimitiveType("Z"); loadPrimitiveType("B"); @@ -150,6 +152,10 @@ public class ClassPath { return unknownClass; } + public int getApi() { + return api; + } + @Nonnull public static ClassPath fromClassPath(Iterable classPathDirs, Iterable classPath, DexFile dexFile, int api) { @@ -159,7 +165,7 @@ public class ClassPath { dexFiles.add(loadClassPathEntry(classPathDirs, classPathEntry, api)); } dexFiles.add(dexFile); - return new ClassPath(dexFiles); + return new ClassPath(api, dexFiles); } private static final Pattern dalvikCacheOdexPattern = Pattern.compile("@([^@]+)@classes.dex$"); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java index c0294c50..bec5a143 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java @@ -534,7 +534,7 @@ public class ClassProto implements TypeProto { for (int i=0; i