1 21 package proguard.classfile.instruction.visitor; 22 23 import proguard.classfile.*; 24 import proguard.classfile.attribute.CodeAttribute; 25 import proguard.classfile.instruction.*; 26 27 28 34 public class MultiInstructionVisitor implements InstructionVisitor 35 { 36 private static final int ARRAY_SIZE_INCREMENT = 5; 37 38 39 private InstructionVisitor[] instructionVisitors; 40 private int instructionVisitorCount; 41 42 43 public MultiInstructionVisitor() 44 { 45 } 46 47 48 public MultiInstructionVisitor(InstructionVisitor[] instructionVisitors) 49 { 50 this.instructionVisitors = instructionVisitors; 51 this.instructionVisitorCount = instructionVisitors.length; 52 } 53 54 55 public void addInstructionVisitor(InstructionVisitor instructionVisitor) 56 { 57 ensureArraySize(); 58 59 instructionVisitors[instructionVisitorCount++] = instructionVisitor; 60 } 61 62 63 private void ensureArraySize() 64 { 65 if (instructionVisitors == null) 66 { 67 instructionVisitors = new InstructionVisitor[ARRAY_SIZE_INCREMENT]; 68 } 69 else if (instructionVisitors.length == instructionVisitorCount) 70 { 71 InstructionVisitor[] newInstructionVisitors = 72 new InstructionVisitor[instructionVisitorCount + 73 ARRAY_SIZE_INCREMENT]; 74 System.arraycopy(instructionVisitors, 0, 75 newInstructionVisitors, 0, 76 instructionVisitorCount); 77 instructionVisitors = newInstructionVisitors; 78 } 79 } 80 81 82 84 public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction) 85 { 86 for (int index = 0; index < instructionVisitorCount; index++) 87 { 88 instructionVisitors[index].visitSimpleInstruction(clazz, method, codeAttribute, offset, simpleInstruction); 89 } 90 } 91 92 public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction) 93 { 94 for (int index = 0; index < instructionVisitorCount; index++) 95 { 96 instructionVisitors[index].visitVariableInstruction(clazz, method, codeAttribute, offset, variableInstruction); 97 } 98 } 99 100 public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction) 101 { 102 for (int index = 0; index < instructionVisitorCount; index++) 103 { 104 instructionVisitors[index].visitConstantInstruction(clazz, method, codeAttribute, offset, constantInstruction); 105 } 106 } 107 108 public void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction) 109 { 110 for (int index = 0; index < instructionVisitorCount; index++) 111 { 112 instructionVisitors[index].visitBranchInstruction(clazz, method, codeAttribute, offset, branchInstruction); 113 } 114 } 115 116 public void visitTableSwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, TableSwitchInstruction tableSwitchInstruction) 117 { 118 for (int index = 0; index < instructionVisitorCount; index++) 119 { 120 instructionVisitors[index].visitTableSwitchInstruction(clazz, method, codeAttribute, offset, tableSwitchInstruction); 121 } 122 } 123 124 public void visitLookUpSwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, LookUpSwitchInstruction lookUpSwitchInstruction) 125 { 126 for (int index = 0; index < instructionVisitorCount; index++) 127 { 128 instructionVisitors[index].visitLookUpSwitchInstruction(clazz, method, codeAttribute, offset, lookUpSwitchInstruction); 129 } 130 } 131 } 132 | Popular Tags |