diff --git a/src/main/java/lanchon/multidexlib2/MultiDexContainerBackedDexFile.java b/src/main/java/lanchon/multidexlib2/MultiDexContainerBackedDexFile.java index 2e4fb9d..c9b538a 100644 --- a/src/main/java/lanchon/multidexlib2/MultiDexContainerBackedDexFile.java +++ b/src/main/java/lanchon/multidexlib2/MultiDexContainerBackedDexFile.java @@ -27,25 +27,25 @@ public class MultiDexContainerBackedDexFile implements DexFil private final Opcodes opcodes; public MultiDexContainerBackedDexFile(MultiDexContainer container) throws IOException { - Set classes; List entryNames = container.getDexEntryNames(); if (entryNames.size() == 1) { String entryName = entryNames.get(0); T entry = container.getEntry(entryName); - classes = entry.getClasses(); + classes = Collections.unmodifiableSet(entry.getClasses()); + opcodes = entry.getOpcodes(); } else { LinkedHashSet accumulatedClasses = new LinkedHashSet<>(); + Opcodes resolvedOpcodes = null; for (String entryName : entryNames) { T entry = container.getEntry(entryName); - Set entryClasses = entry.getClasses(); - for (ClassDef entryClass : entryClasses) { + for (ClassDef entryClass : entry.getClasses()) { if (!accumulatedClasses.add(entryClass)) throw new DuplicateTypeException(entryClass.getType()); } + resolvedOpcodes = OpcodeUtils.getNewestOpcodes(resolvedOpcodes, entry.getOpcodes(), true); } - classes = accumulatedClasses; + classes = Collections.unmodifiableSet(accumulatedClasses); + opcodes = resolvedOpcodes; } - this.classes = Collections.unmodifiableSet(classes); - this.opcodes = container.getOpcodes(); } @Override