Fix MultiDexContainerBackedDexFile

This commit is contained in:
Lanchon 2018-06-12 21:23:27 -03:00
parent ebaaface13
commit 9f8ecb03c4

View File

@ -27,25 +27,25 @@ public class MultiDexContainerBackedDexFile<T extends DexFile> implements DexFil
private final Opcodes opcodes;
public MultiDexContainerBackedDexFile(MultiDexContainer<T> container) throws IOException {
Set<? extends ClassDef> classes;
List<String> 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<ClassDef> accumulatedClasses = new LinkedHashSet<>();
Opcodes resolvedOpcodes = null;
for (String entryName : entryNames) {
T entry = container.getEntry(entryName);
Set<? extends ClassDef> 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