mirror of
https://github.com/revanced/smali.git
synced 2025-05-01 23:24:38 +02:00
Remove the Instruction template parameter from ClassSection
This commit is contained in:
parent
6f135aeb74
commit
ca5de1d803
@ -34,6 +34,7 @@ package org.jf.dexlib2.writer;
|
||||
import org.jf.dexlib2.iface.ExceptionHandler;
|
||||
import org.jf.dexlib2.iface.TryBlock;
|
||||
import org.jf.dexlib2.iface.debug.DebugItem;
|
||||
import org.jf.dexlib2.iface.instruction.Instruction;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@ -43,7 +44,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface ClassSection<StringKey extends CharSequence, TypeKey extends CharSequence, TypeListKey, ClassKey,
|
||||
FieldKey, MethodKey, AnnotationSetKey, EncodedValue, Insn> extends IndexSection<ClassKey> {
|
||||
FieldKey, MethodKey, AnnotationSetKey, EncodedValue> extends IndexSection<ClassKey> {
|
||||
@Nonnull Collection<? extends ClassKey> getSortedClasses();
|
||||
|
||||
@Nullable Map.Entry<? extends ClassKey, Integer> getClassEntryByType(@Nullable TypeKey key);
|
||||
@ -74,7 +75,7 @@ public interface ClassSection<StringKey extends CharSequence, TypeKey extends Ch
|
||||
@Nullable Iterable<? extends StringKey> getParameterNames(@Nonnull MethodKey key);
|
||||
|
||||
int getRegisterCount(@Nonnull MethodKey key);
|
||||
@Nullable Iterable<? extends Insn> getInstructions(@Nonnull MethodKey key);
|
||||
@Nullable Iterable<? extends Instruction> getInstructions(@Nonnull MethodKey key);
|
||||
@Nonnull List<? extends TryBlock<? extends ExceptionHandler>> getTryBlocks(@Nonnull MethodKey key);
|
||||
@Nullable TypeKey getExceptionType(@Nonnull ExceptionHandler handler);
|
||||
|
||||
|
@ -117,7 +117,7 @@ public abstract class DexWriter<
|
||||
protected final FieldSection<StringKey, TypeKey, FieldRefKey, FieldKey> fieldSection;
|
||||
protected final MethodSection<StringKey, TypeKey, ProtoKey, MethodRefKey, MethodKey> methodSection;
|
||||
protected final ClassSection<StringKey, TypeKey, TypeListKey, ClassKey, FieldKey, MethodKey, AnnotationSetKey,
|
||||
EncodedValue, Insn> classSection;
|
||||
EncodedValue> classSection;
|
||||
|
||||
protected final TypeListSection<TypeKey, TypeListKey> typeListSection;
|
||||
protected final AnnotationSection<StringKey, TypeKey, AnnotationKey, AnnotationElement, EncodedValue> annotationSection;
|
||||
@ -131,7 +131,7 @@ public abstract class DexWriter<
|
||||
FieldSection<StringKey, TypeKey, FieldRefKey, FieldKey> fieldSection,
|
||||
MethodSection<StringKey, TypeKey, ProtoKey, MethodRefKey, MethodKey> methodSection,
|
||||
ClassSection<StringKey, TypeKey, TypeListKey, ClassKey, FieldKey, MethodKey, AnnotationSetKey,
|
||||
EncodedValue, Insn> classSection,
|
||||
EncodedValue> classSection,
|
||||
TypeListSection<TypeKey, TypeListKey> typeListSection,
|
||||
AnnotationSection<StringKey, TypeKey, AnnotationKey, AnnotationElement,
|
||||
EncodedValue> annotationSection,
|
||||
@ -789,7 +789,7 @@ public abstract class DexWriter<
|
||||
Iterable<MethodKey> methods = Iterables.concat(directMethods, virtualMethods);
|
||||
|
||||
for (MethodKey methodKey: methods) {
|
||||
Iterable<? extends Insn> instructions = classSection.getInstructions(methodKey);
|
||||
Iterable<? extends Instruction> instructions = classSection.getInstructions(methodKey);
|
||||
int debugItemOffset = classSection.getDebugItemOffset(methodKey);
|
||||
|
||||
if (instructions == null && debugItemOffset == NO_OFFSET) {
|
||||
@ -813,8 +813,8 @@ public abstract class DexWriter<
|
||||
if (instructions != null) {
|
||||
tryBlocks = TryListBuilder.massageTryBlocks(tryBlocks);
|
||||
|
||||
InstructionWriteUtil<Insn, StringRef, BaseReference> instrWriteUtil =
|
||||
new InstructionWriteUtil<Insn, StringRef, BaseReference>(instructions, stringSection, instructionFactory);
|
||||
InstructionWriteUtil<StringRef, BaseReference> instrWriteUtil =
|
||||
new InstructionWriteUtil<StringRef, BaseReference>(instructions, stringSection, instructionFactory);
|
||||
writer.writeUshort(instrWriteUtil.getOutParamCount());
|
||||
writer.writeUshort(tryBlocks.size());
|
||||
writer.writeInt(debugItemOffset);
|
||||
@ -824,7 +824,7 @@ public abstract class DexWriter<
|
||||
methodSection);
|
||||
|
||||
writer.writeInt(instrWriteUtil.getCodeUnitCount());
|
||||
for (Insn instruction: instrWriteUtil.getInstructions()) {
|
||||
for (Instruction instruction: instrWriteUtil.getInstructions()) {
|
||||
switch (instruction.getOpcode().format) {
|
||||
case Format10t:
|
||||
instructionWriter.write((Instruction10t)instruction);
|
||||
|
@ -58,7 +58,7 @@ import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
public class BuilderClassPool implements ClassSection<BuilderStringReference, BuilderTypeReference, BuilderTypeList,
|
||||
BuilderClassDef, BuilderField, BuilderMethod, BuilderAnnotationSet, BuilderEncodedValue, BuilderInstruction> {
|
||||
BuilderClassDef, BuilderField, BuilderMethod, BuilderAnnotationSet, BuilderEncodedValue> {
|
||||
@Nonnull private final ConcurrentMap<String, BuilderClassDef> internedItems =
|
||||
Maps.newConcurrentMap();
|
||||
|
||||
|
@ -60,7 +60,7 @@ import java.util.Map.Entry;
|
||||
public class ClassPool implements ClassSection<CharSequence, CharSequence,
|
||||
TypeListPool.Key<? extends Collection<? extends CharSequence>>, PoolClassDef, Field, PoolMethod,
|
||||
Set<? extends Annotation>,
|
||||
EncodedValue, Instruction> {
|
||||
EncodedValue> {
|
||||
@Nonnull private HashMap<String, PoolClassDef> internedItems = Maps.newHashMap();
|
||||
|
||||
@Nonnull private final StringPool stringPool;
|
||||
|
@ -53,13 +53,13 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class InstructionWriteUtil<Insn extends Instruction, StringRef extends StringReference,
|
||||
public class InstructionWriteUtil<StringRef extends StringReference,
|
||||
BaseReference extends Reference> {
|
||||
private final StringIndexProvider<StringRef> stringIndexProvider;
|
||||
private final InstructionFactory<? extends Insn, BaseReference> instructionFactory;
|
||||
private final Iterable<? extends Insn> originalInstructions;
|
||||
private final InstructionFactory<? extends Instruction, BaseReference> instructionFactory;
|
||||
private final Iterable<? extends Instruction> originalInstructions;
|
||||
|
||||
private List<Insn> instructions;
|
||||
private List<Instruction> instructions;
|
||||
private ArrayList<Integer> codeOffsetShifts;
|
||||
private HashMap<Integer,Format> offsetToNewInstructionMap;
|
||||
|
||||
@ -70,9 +70,9 @@ public class InstructionWriteUtil<Insn extends Instruction, StringRef extends St
|
||||
int getItemIndex(@Nonnull StringRef reference);
|
||||
}
|
||||
|
||||
public InstructionWriteUtil(@Nonnull Iterable<? extends Insn> instructions,
|
||||
public InstructionWriteUtil(@Nonnull Iterable<? extends Instruction> instructions,
|
||||
@Nonnull StringIndexProvider<StringRef> stringIndexProvider,
|
||||
@Nonnull InstructionFactory<? extends Insn, BaseReference> instructionFactory) {
|
||||
@Nonnull InstructionFactory<? extends Instruction, BaseReference> instructionFactory) {
|
||||
this.stringIndexProvider = stringIndexProvider;
|
||||
this.instructionFactory = instructionFactory;
|
||||
this.originalInstructions = instructions;
|
||||
@ -82,7 +82,7 @@ public class InstructionWriteUtil<Insn extends Instruction, StringRef extends St
|
||||
}
|
||||
|
||||
private void calculateMaxOutParamCount() {
|
||||
for (Insn instruction: originalInstructions) {
|
||||
for (Instruction instruction: originalInstructions) {
|
||||
codeUnitCount += instruction.getCodeUnits();
|
||||
if (instruction.getOpcode().referenceType == ReferenceType.METHOD) {
|
||||
ReferenceInstruction refInsn = (ReferenceInstruction)instruction;
|
||||
@ -94,7 +94,7 @@ public class InstructionWriteUtil<Insn extends Instruction, StringRef extends St
|
||||
}
|
||||
}
|
||||
}
|
||||
public Iterable<? extends Insn> getInstructions() {
|
||||
public Iterable<? extends Instruction> getInstructions() {
|
||||
if (instructions != null) {
|
||||
return instructions;
|
||||
} else {
|
||||
@ -228,8 +228,8 @@ public class InstructionWriteUtil<Insn extends Instruction, StringRef extends St
|
||||
|
||||
instructions = Lists.newArrayList();
|
||||
int currentCodeOffset = 0;
|
||||
for (Insn instruction: originalInstructions) {
|
||||
Insn modifiedInstruction = null;
|
||||
for (Instruction instruction: originalInstructions) {
|
||||
Instruction modifiedInstruction = null;
|
||||
switch (instruction.getOpcode().format) {
|
||||
case Format10t: {
|
||||
Instruction10t instr = (Instruction10t)instruction;
|
||||
|
@ -56,7 +56,7 @@ public class JumboStringConversionTest {
|
||||
private MockStringIndexProvider mockStringIndexProvider;
|
||||
ArrayList<String> mJumboStrings;
|
||||
|
||||
private class InsnWriteUtil extends InstructionWriteUtil<Instruction, StringReference, Reference> {
|
||||
private class InsnWriteUtil extends InstructionWriteUtil<StringReference, Reference> {
|
||||
public InsnWriteUtil(@Nonnull MethodImplementation implementation) {
|
||||
super(implementation.getInstructions(), mockStringIndexProvider, ImmutableInstructionFactory.INSTANCE);
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ import java.util.ArrayList;
|
||||
public class PayloadAlignmentTest {
|
||||
private MockStringIndexProvider mockStringIndexProvider;
|
||||
|
||||
private class InsnWriteUtil extends InstructionWriteUtil<Instruction, StringReference, Reference> {
|
||||
private class InsnWriteUtil extends InstructionWriteUtil<StringReference, Reference> {
|
||||
public InsnWriteUtil(@Nonnull MethodImplementation implementation) {
|
||||
super(implementation.getInstructions(), mockStringIndexProvider, ImmutableInstructionFactory.INSTANCE);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user