1 21 package proguard.optimize.peephole; 22 23 import proguard.classfile.instruction.visitor.*; 24 import proguard.classfile.instruction.*; 25 import proguard.classfile.editor.CodeAttributeEditor; 26 import proguard.classfile.*; 27 import proguard.classfile.constant.Constant; 28 import proguard.classfile.attribute.CodeAttribute; 29 30 36 public class InstructionSequencesReplacer 37 extends MultiInstructionVisitor 38 implements InstructionVisitor 39 { 40 private static final int PATTERN_INDEX = 0; 41 private static final int REPLACEMENT_INDEX = 1; 42 43 44 58 public InstructionSequencesReplacer(Constant[] patternConstants, 59 Instruction[][][] instructionSequences, 60 BranchTargetFinder branchTargetFinder, 61 CodeAttributeEditor codeAttributeEditor) 62 { 63 this(patternConstants, 64 instructionSequences, 65 branchTargetFinder, 66 codeAttributeEditor, 67 null); 68 } 69 70 71 87 public InstructionSequencesReplacer(Constant[] patternConstants, 88 Instruction[][][] instructionSequences, 89 BranchTargetFinder branchTargetFinder, 90 CodeAttributeEditor codeAttributeEditor, 91 InstructionVisitor extraInstructionVisitor) 92 { 93 super(createInstructionSequenceReplacers(patternConstants, 94 instructionSequences, 95 branchTargetFinder, 96 codeAttributeEditor, 97 extraInstructionVisitor)); 98 } 99 100 101 117 private static InstructionVisitor[] createInstructionSequenceReplacers(Constant[] patternConstants, 118 Instruction[][][] instructionSequences, 119 BranchTargetFinder branchTargetFinder, 120 CodeAttributeEditor codeAttributeEditor, 121 InstructionVisitor extraInstructionVisitor) 122 { 123 InstructionVisitor[] instructionSequenceReplacers = 124 new InstructionSequenceReplacer[instructionSequences.length]; 125 126 for (int index = 0; index < instructionSequenceReplacers.length; index++) 127 { 128 Instruction[][] instructionSequencePair = instructionSequences[index]; 129 instructionSequenceReplacers[index] = 130 new InstructionSequenceReplacer(patternConstants, 131 instructionSequencePair[PATTERN_INDEX], 132 instructionSequencePair[REPLACEMENT_INDEX], 133 branchTargetFinder, 134 codeAttributeEditor, 135 extraInstructionVisitor); 136 } 137 138 return instructionSequenceReplacers; 139 } 140 } 141 | Popular Tags |