diff --git a/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java b/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java index e8f04452..cdcb15e8 100644 --- a/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java +++ b/baksmali/src/main/java/org/jf/baksmali/AnalysisArguments.java @@ -66,11 +66,6 @@ public class AnalysisArguments { @ExtendedParameter(argumentNames = "dir") public List classPathDirectories = Lists.newArrayList("."); - @Parameter(names = "--experimental", - description = "Enable experimental opcodes to be disassembled, even if they aren't necessarily " + - "supported in the Android runtime yet.") - public boolean experimentalOpcodes = false; - public static class CheckPackagePrivateArgument { @Parameter(names = {"--check-package-private-access", "--package-private", "--checkpp", "--pp"}, description = "Use the package-private access check when calculating vtable indexes. This should " + diff --git a/baksmali/src/main/java/org/jf/baksmali/BaksmaliOptions.java b/baksmali/src/main/java/org/jf/baksmali/BaksmaliOptions.java index 6d080bd2..7ad51243 100644 --- a/baksmali/src/main/java/org/jf/baksmali/BaksmaliOptions.java +++ b/baksmali/src/main/java/org/jf/baksmali/BaksmaliOptions.java @@ -57,7 +57,6 @@ public class BaksmaliOptions { public boolean accessorComments = true; public boolean allowOdex = false; public boolean deodex = false; - public boolean experimentalOpcodes = false; public boolean implicitReferences = false; public boolean normalizeVirtualMethods = false; diff --git a/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java b/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java index a4edd601..f69383dd 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DexInputCommand.java @@ -97,11 +97,10 @@ public abstract class DexInputCommand extends Command { * * @param input The name of a dex, apk, odex or oat file/entry. * @param apiLevel The api level to load the dex file with - * @param experimentalOpcodes whether experimental opcodes should be allowed * @return The loaded DexBackedDexFile */ @Nonnull - protected DexBackedDexFile loadDexFile(@Nonnull String input, int apiLevel, boolean experimentalOpcodes) { + protected DexBackedDexFile loadDexFile(@Nonnull String input, int apiLevel) { File file = new File(input); while (file != null && !file.exists()) { @@ -128,13 +127,13 @@ public abstract class DexInputCommand extends Command { try { return DexFileFactory.loadDexEntry(dexFile, dexEntry, exactMatch, - Opcodes.forApi(apiLevel, experimentalOpcodes)); + Opcodes.forApi(apiLevel)); } catch (IOException ex) { throw new RuntimeException(ex); } } else { try { - return DexFileFactory.loadDexFile(dexFile, Opcodes.forApi(apiLevel, experimentalOpcodes)); + return DexFileFactory.loadDexFile(dexFile, Opcodes.forApi(apiLevel)); } catch (IOException ex) { throw new RuntimeException(ex); } diff --git a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java index d051b3d5..1ed61f08 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DisassembleCommand.java @@ -154,7 +154,7 @@ public class DisassembleCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); if (showDeodexWarning() && dexFile.hasOdexOpcodes()) { StringWrapper.printWrappedString(System.err, @@ -195,8 +195,7 @@ public class DisassembleCommand extends DexInputCommand { try { options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, - analysisArguments.apiLevel, shouldCheckPackagePrivateAccess(), - analysisArguments.experimentalOpcodes); + analysisArguments.apiLevel, shouldCheckPackagePrivateAccess()); } catch (Exception ex) { System.err.println("\n\nError occurred while loading class path files. Aborting."); ex.printStackTrace(System.err); @@ -241,7 +240,6 @@ public class DisassembleCommand extends DexInputCommand { options.debugInfo = debugInfo; options.codeOffsets = codeOffsets; options.accessorComments = accessorComments; - options.experimentalOpcodes = analysisArguments.experimentalOpcodes; options.implicitReferences = implicitReferences; options.normalizeVirtualMethods = normalizeVirtualMethods; diff --git a/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java b/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java index 96a73935..2903012d 100644 --- a/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/DumpCommand.java @@ -60,11 +60,6 @@ public class DumpCommand extends DexInputCommand { @ExtendedParameter(argumentNames = "api") private int apiLevel = 15; - @Parameter(names = "--experimental", - description = "Enable experimental opcodes to be disassembled, even if they aren't necessarily " + - "supported in the Android runtime yet.") - private boolean experimentalOpcodes = false; - public DumpCommand(@Nonnull List commandAncestors) { super(commandAncestors); } @@ -82,7 +77,7 @@ public class DumpCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); try { dump(dexFile, System.out, apiLevel); diff --git a/baksmali/src/main/java/org/jf/baksmali/ListClassesCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListClassesCommand.java index 35f6c3e8..0905aed2 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListClassesCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListClassesCommand.java @@ -69,7 +69,7 @@ public class ListClassesCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); for (Reference reference: dexFile.getClasses()) { System.out.println(ReferenceUtil.getReferenceString(reference)); diff --git a/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java index 74f5388d..61de071e 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListFieldOffsetsCommand.java @@ -80,7 +80,7 @@ public class ListFieldOffsetsCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); BaksmaliOptions options = getOptions(dexFile); try { @@ -110,15 +110,13 @@ public class ListFieldOffsetsCommand extends DexInputCommand { try { options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, analysisArguments.apiLevel, - false, analysisArguments.experimentalOpcodes); + false); } catch (Exception ex) { System.err.println("Error occurred while loading class path files."); ex.printStackTrace(System.err); System.exit(-1); } - options.experimentalOpcodes = analysisArguments.experimentalOpcodes; - return options; } } diff --git a/baksmali/src/main/java/org/jf/baksmali/ListReferencesCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListReferencesCommand.java index a9c03164..fff1976b 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListReferencesCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListReferencesCommand.java @@ -66,7 +66,7 @@ public abstract class ListReferencesCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); for (Reference reference: dexFile.getReferences(referenceType)) { System.out.println(ReferenceUtil.getReferenceString(reference)); diff --git a/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java b/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java index fe1f5895..f0d665c0 100644 --- a/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java +++ b/baksmali/src/main/java/org/jf/baksmali/ListVtablesCommand.java @@ -91,7 +91,7 @@ public class ListVtablesCommand extends DexInputCommand { } String input = inputList.get(0); - DexBackedDexFile dexFile = loadDexFile(input, 15, false); + DexBackedDexFile dexFile = loadDexFile(input, 15); BaksmaliOptions options = getOptions(dexFile); if (options == null) { @@ -140,15 +140,13 @@ public class ListVtablesCommand extends DexInputCommand { try { options.classPath = ClassPath.loadClassPath(analysisArguments.classPathDirectories, analysisArguments.bootClassPath, analysisArguments.classPath, dexFile, analysisArguments.apiLevel, - checkPackagePrivateArgument.checkPackagePrivateAccess, analysisArguments.experimentalOpcodes); + checkPackagePrivateArgument.checkPackagePrivateAccess); } catch (Exception ex) { System.err.println("Error occurred while loading class path files."); ex.printStackTrace(System.err); return null; } - options.experimentalOpcodes = analysisArguments.experimentalOpcodes; - return options; } } diff --git a/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java b/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java index 4bcc0ea3..4dd2ad93 100644 --- a/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java +++ b/baksmali/src/test/java/org/jf/baksmali/BaksmaliTestUtils.java @@ -50,8 +50,7 @@ public class BaksmaliTestUtils { public static void assertSmaliCompiledEquals(String source, String expected, BaksmaliOptions options, boolean stripComments) throws IOException, RecognitionException { - ClassDef classDef = SmaliTestUtils.compileSmali(source, options.apiLevel, - options.experimentalOpcodes); + ClassDef classDef = SmaliTestUtils.compileSmali(source, options.apiLevel); // Remove unnecessary whitespace and optionally strip all comments from smali file String normalizedActual = getNormalizedSmali(classDef, options, stripComments); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java b/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java index 138c6c63..1d7a12d9 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/Opcode.java @@ -330,8 +330,6 @@ public enum Opcode public static final int JUMBO_OPCODE = 0x200; //if the instruction can initialize an uninitialized object reference public static final int CAN_INITIALIZE_REFERENCE = 0x400; - //if the instruction is experimental (not potentially supported by Android runtime yet) - public static final int EXPERIMENTAL = 0x800; private static final int ALL_APIS = 0xFFFF0000; @@ -471,10 +469,6 @@ public enum Opcode return (flags & CAN_INITIALIZE_REFERENCE) != 0; } - public final boolean isExperimental() { - return (flags & EXPERIMENTAL) != 0; - } - private static class VersionConstraint { @Nonnull public final Range apiRange; @Nonnull public final Range artVersionRange; diff --git a/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java b/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java index 17f80132..b27e1d71 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/Opcodes.java @@ -52,35 +52,20 @@ public class Opcodes { @Nonnull public static Opcodes forApi(int api) { - return new Opcodes(api, VersionMap.mapApiToArtVersion(api), false); - } - - @Nonnull - public static Opcodes forApi(int api, boolean experimental) { - return new Opcodes(api, VersionMap.mapApiToArtVersion(api), experimental); + return new Opcodes(api, VersionMap.mapApiToArtVersion(api)); } @Nonnull public static Opcodes forArtVersion(int artVersion) { - return forArtVersion(artVersion, false); - } - - @Nonnull - public static Opcodes forArtVersion(int artVersion, boolean experimental) { - return new Opcodes(VersionMap.mapArtVersionToApi(artVersion), artVersion, experimental); + return new Opcodes(VersionMap.mapArtVersionToApi(artVersion), artVersion); } @Deprecated public Opcodes(int api) { - this(api, false); + this(api, VersionMap.mapApiToArtVersion(api)); } - @Deprecated - public Opcodes(int api, boolean experimental) { - this(api, VersionMap.mapApiToArtVersion(api), experimental); - } - - private Opcodes(int api, int artVersion, boolean experimental) { + private Opcodes(int api, int artVersion) { this.api = api; this.artVersion = artVersion; @@ -104,7 +89,7 @@ public class Opcodes { } Short opcodeValue = versionToValueMap.get(version); - if (opcodeValue != null && (!opcode.isExperimental() || experimental)) { + if (opcodeValue != null) { if (!opcode.format.isPayloadFormat) { opcodesByValue[opcodeValue] = opcode; } 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 222cdeb3..051691ab 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java @@ -185,11 +185,10 @@ public class ClassPath { * If null, it will attempt to use the correct defaults based on the inputs. * @param extraClassPathEntries Additional class path entries. The same sorts of naming mechanisms as for * bootClassPathEntries are allowed - * @param checkPackagePrivateAccess Whether checkPackagePrivateAccess is needed, enabled for ONLY early API 17 by - * default * @param dexFile The dex file that will be analyzed. It can be a dex, odex or oat file. * @param api The api level of the device that these dex files come from. - * @param experimental Whether to allow experimental opcodes + * @param checkPackagePrivateAccess Whether checkPackagePrivateAccess is needed, enabled for ONLY early API 17 by + * default * * @return A ClassPath object */ @@ -197,7 +196,7 @@ public class ClassPath { public static ClassPath loadClassPath(@Nonnull Iterable classPathDirs, @Nullable Iterable bootClassPathEntries, @Nonnull Iterable extraClassPathEntries, @Nonnull DexFile dexFile, - int api, boolean experimental, boolean checkPackagePrivateAccess) + int api, boolean checkPackagePrivateAccess) throws IOException { List classProviders = Lists.newArrayList(); if (bootClassPathEntries == null) { @@ -232,7 +231,7 @@ public class ClassPath { File bestMatch = Collections.max(files, new ClassPathEntryComparator(entry)); Iterable dexFiles = - DexFileFactory.loadAllDexFiles(bestMatch, Opcodes.forApi(api, experimental)); + DexFileFactory.loadAllDexFiles(bestMatch, Opcodes.forApi(api)); for (DexFile loadedDexFile: dexFiles) { classProviders.add(new DexClassProvider(loadedDexFile)); } diff --git a/dexlib2/src/test/java/org/jf/dexlib2/analysis/CustomMethodInlineTableTest.java b/dexlib2/src/test/java/org/jf/dexlib2/analysis/CustomMethodInlineTableTest.java index 3cadd08d..9b4ce128 100644 --- a/dexlib2/src/test/java/org/jf/dexlib2/analysis/CustomMethodInlineTableTest.java +++ b/dexlib2/src/test/java/org/jf/dexlib2/analysis/CustomMethodInlineTableTest.java @@ -71,7 +71,7 @@ public class CustomMethodInlineTableTest { DexFile dexFile = new ImmutableDexFile(Opcodes.forApi(19), ImmutableList.of(classDef)); ClassPath classPath = ClassPath.loadClassPath(ImmutableList.of(), - ImmutableList.of(), ImmutableList.of(), dexFile, 15, false, false); + ImmutableList.of(), ImmutableList.of(), dexFile, 15, false); InlineMethodResolver inlineMethodResolver = new CustomInlineMethodResolver(classPath, "Lblah;->blah()V"); MethodAnalyzer methodAnalyzer = new MethodAnalyzer(classPath, method, inlineMethodResolver, false); @@ -99,7 +99,7 @@ public class CustomMethodInlineTableTest { DexFile dexFile = new ImmutableDexFile(Opcodes.forApi(19), ImmutableList.of(classDef)); ClassPath classPath = ClassPath.loadClassPath(ImmutableList.of(), - ImmutableList.of(), ImmutableList.of(), dexFile, 15, false, false); + ImmutableList.of(), ImmutableList.of(), dexFile, 15, false); InlineMethodResolver inlineMethodResolver = new CustomInlineMethodResolver(classPath, "Lblah;->blah()V"); MethodAnalyzer methodAnalyzer = new MethodAnalyzer(classPath, method, inlineMethodResolver, false); @@ -126,7 +126,7 @@ public class CustomMethodInlineTableTest { DexFile dexFile = new ImmutableDexFile(Opcodes.forApi(19), ImmutableList.of(classDef)); ClassPath classPath = ClassPath.loadClassPath(ImmutableList.of(), - ImmutableList.of(), ImmutableList.of(), dexFile, 15, false, false); + ImmutableList.of(), ImmutableList.of(), dexFile, 15, false); InlineMethodResolver inlineMethodResolver = new CustomInlineMethodResolver(classPath, "Lblah;->blah()V"); MethodAnalyzer methodAnalyzer = new MethodAnalyzer(classPath, method, inlineMethodResolver, false); diff --git a/smali/src/main/antlr/smaliParser.g b/smali/src/main/antlr/smaliParser.g index 29cd141b..2d5eccaa 100644 --- a/smali/src/main/antlr/smaliParser.g +++ b/smali/src/main/antlr/smaliParser.g @@ -263,8 +263,8 @@ import org.jf.dexlib2.Opcodes; this.allowOdex = allowOdex; } - public void setApiLevel(int apiLevel, boolean experimental) { - this.opcodes = new Opcodes(apiLevel, experimental); + public void setApiLevel(int apiLevel) { + this.opcodes = Opcodes.forApi(apiLevel); this.apiLevel = apiLevel; } diff --git a/smali/src/main/antlr/smaliTreeWalker.g b/smali/src/main/antlr/smaliTreeWalker.g index d074579b..171756ec 100644 --- a/smali/src/main/antlr/smaliTreeWalker.g +++ b/smali/src/main/antlr/smaliTreeWalker.g @@ -85,8 +85,8 @@ import java.util.*; this.dexBuilder = dexBuilder; } - public void setApiLevel(int apiLevel, boolean experimental) { - this.opcodes = new Opcodes(apiLevel, experimental); + public void setApiLevel(int apiLevel) { + this.opcodes = Opcodes.forApi(apiLevel); this.apiLevel = apiLevel; } diff --git a/smali/src/main/java/org/jf/smali/AssembleCommand.java b/smali/src/main/java/org/jf/smali/AssembleCommand.java index 96075708..efde1825 100644 --- a/smali/src/main/java/org/jf/smali/AssembleCommand.java +++ b/smali/src/main/java/org/jf/smali/AssembleCommand.java @@ -69,11 +69,6 @@ public class AssembleCommand extends Command { @ExtendedParameter(argumentNames = "file") private String output = "out.dex"; - @Parameter(names = "--experimental", - description = "Enable experimental opcodes to be assembled, even if they aren't necessarily " + - "supported in the Android runtime yet.") - private boolean experimentalOpcodes = false; - @Parameter(names = "--verbose", description = "Generate verbose error messages.") private boolean verbose = false; @@ -110,7 +105,6 @@ public class AssembleCommand extends Command { options.jobs = jobs; options.apiLevel = apiLevel; options.outputDexFile = output; - options.experimentalOpcodes = experimentalOpcodes; options.allowOdexOpcodes = allowOdexOpcodes; options.verboseErrors = verbose; diff --git a/smali/src/main/java/org/jf/smali/Smali.java b/smali/src/main/java/org/jf/smali/Smali.java index 178a3c52..c00da31f 100644 --- a/smali/src/main/java/org/jf/smali/Smali.java +++ b/smali/src/main/java/org/jf/smali/Smali.java @@ -92,7 +92,7 @@ public class Smali { boolean errors = false; final DexBuilder dexBuilder = DexBuilder.makeDexBuilder( - Opcodes.forApi(options.apiLevel, options.experimentalOpcodes)); + Opcodes.forApi(options.apiLevel)); ExecutorService executor = Executors.newFixedThreadPool(options.jobs); List> tasks = Lists.newArrayList(); @@ -177,7 +177,7 @@ public class Smali { smaliParser parser = new smaliParser(tokens); parser.setVerboseErrors(options.verboseErrors); parser.setAllowOdex(options.allowOdexOpcodes); - parser.setApiLevel(options.apiLevel, options.experimentalOpcodes); + parser.setApiLevel(options.apiLevel); smaliParser.smali_file_return result = parser.smali_file(); @@ -195,7 +195,7 @@ public class Smali { } smaliTreeWalker dexGen = new smaliTreeWalker(treeStream); - dexGen.setApiLevel(options.apiLevel, options.experimentalOpcodes); + dexGen.setApiLevel(options.apiLevel); dexGen.setVerboseErrors(options.verboseErrors); dexGen.setDexBuilder(dexBuilder); diff --git a/smali/src/main/java/org/jf/smali/SmaliOptions.java b/smali/src/main/java/org/jf/smali/SmaliOptions.java index 91fadf10..ac385fe6 100644 --- a/smali/src/main/java/org/jf/smali/SmaliOptions.java +++ b/smali/src/main/java/org/jf/smali/SmaliOptions.java @@ -39,5 +39,4 @@ public class SmaliOptions { public boolean allowOdexOpcodes = false; public boolean verboseErrors = false; public boolean printTokens = false; - public boolean experimentalOpcodes = false; } diff --git a/smali/src/main/java/org/jf/smali/SmaliTestUtils.java b/smali/src/main/java/org/jf/smali/SmaliTestUtils.java index bef07414..b76641b2 100644 --- a/smali/src/main/java/org/jf/smali/SmaliTestUtils.java +++ b/smali/src/main/java/org/jf/smali/SmaliTestUtils.java @@ -50,14 +50,14 @@ import java.io.StringReader; public class SmaliTestUtils { public static ClassDef compileSmali(String smaliText) throws RecognitionException, IOException { - return compileSmali(smaliText, 15, false); + return compileSmali(smaliText, 15); } - public static ClassDef compileSmali(String smaliText, int apiLevel, boolean experimental) + public static ClassDef compileSmali(String smaliText, int apiLevel) throws RecognitionException, IOException { CommonTokenStream tokens; LexerErrorInterface lexer; - DexBuilder dexBuilder = DexBuilder.makeDexBuilder(Opcodes.forApi(apiLevel, experimental)); + DexBuilder dexBuilder = DexBuilder.makeDexBuilder(Opcodes.forApi(apiLevel)); Reader reader = new StringReader(smaliText); @@ -67,7 +67,7 @@ public class SmaliTestUtils { smaliParser parser = new smaliParser(tokens); parser.setVerboseErrors(true); parser.setAllowOdex(false); - parser.setApiLevel(apiLevel, experimental); + parser.setApiLevel(apiLevel); smaliParser.smali_file_return result = parser.smali_file(); @@ -81,7 +81,7 @@ public class SmaliTestUtils { treeStream.setTokenStream(tokens); smaliTreeWalker dexGen = new smaliTreeWalker(treeStream); - dexGen.setApiLevel(apiLevel, experimental); + dexGen.setApiLevel(apiLevel); dexGen.setVerboseErrors(true); dexGen.setDexBuilder(dexBuilder); dexGen.smali_file(); @@ -94,7 +94,7 @@ public class SmaliTestUtils { dexBuilder.writeTo(dataStore); - DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.forApi(apiLevel, experimental), dataStore.getData()); + DexBackedDexFile dexFile = new DexBackedDexFile(Opcodes.forApi(apiLevel), dataStore.getData()); return Iterables.getFirst(dexFile.getClasses(), null); } diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java index 8cb2d77a..00931a4a 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliInstruction.java @@ -76,7 +76,7 @@ public class SmaliInstruction extends SmaliCompositeElement { assert instructionNode != null; // TODO: put a project level Opcodes instance with the appropriate api level somewhere - opcode = new Opcodes(15, false).getOpcodeByName(instructionNode.getText()); + opcode = Opcodes.forApi(15).getOpcodeByName(instructionNode.getText()); if (opcode == null) { if (instructionNode.getText().equals(".packed-switch")) { return Opcode.PACKED_SWITCH_PAYLOAD;