InstructionMethodItemFactory.java revision 0c65e0f4f54ead8fd2832c954d516367b3556ae3
1package org.jf.baksmali.Adaptors.Format; 2 3import org.antlr.stringtemplate.StringTemplateGroup; 4import org.jf.baksmali.Adaptors.MethodDefinition; 5import org.jf.dexlib.Code.Analysis.AnalyzedInstruction; 6import org.jf.dexlib.Code.Format.*; 7import org.jf.dexlib.Code.Instruction; 8import org.jf.dexlib.Code.OffsetInstruction; 9import org.jf.dexlib.CodeItem; 10 11public class InstructionMethodItemFactory { 12 private InstructionMethodItemFactory() { 13 } 14 15 public static InstructionMethodItem makeInstructionFormatMethodItem(MethodDefinition methodDefinition, 16 CodeItem codeItem, 17 int codeAddress, 18 StringTemplateGroup stg, 19 Instruction instruction, 20 boolean isLastInstruction) { 21 if (instruction instanceof OffsetInstruction) { 22 return new OffsetInstructionFormatMethodItem(methodDefinition.getLabelCache(), codeItem, codeAddress, stg, 23 instruction); 24 } 25 26 switch (instruction.getFormat()) { 27 case ArrayData: 28 return new ArrayDataMethodItem(codeItem, codeAddress, stg, 29 (ArrayDataPseudoInstruction)instruction); 30 case PackedSwitchData: 31 return new PackedSwitchMethodItem(methodDefinition, codeItem, codeAddress, stg, 32 (PackedSwitchDataPseudoInstruction)instruction); 33 case SparseSwitchData: 34 return new SparseSwitchMethodItem(methodDefinition, codeItem, codeAddress, stg, 35 (SparseSwitchDataPseudoInstruction)instruction); 36 case UnresolvedNullReference: 37 return new UnresolvedNullReferenceMethodItem(codeItem, codeAddress, stg, 38 (UnresolvedNullReference)instruction, isLastInstruction); 39 default: 40 return new InstructionMethodItem(codeItem, codeAddress, stg, instruction); 41 } 42 } 43} 44