List of usage examples for com.google.common.collect HashBasedTable create
public static <R, C, V> HashBasedTable<R, C, V> create(int expectedRows, int expectedCellsPerRow)
From source file:soot.asm.JimpleSource.java
private void convert() { ArrayDeque<Edge> worklist = new ArrayDeque<Edge>(); for (LabelNode ln : trapHandlers.keySet()) worklist.add(new Edge(ln, new ArrayList<Operand>())); worklist.add(new Edge(instructions.getFirst(), new ArrayList<Operand>())); conversionWorklist = worklist;/* www.j av a 2s . c o m*/ edges = HashBasedTable.create(1, 1); do { Edge edge = worklist.pollLast(); AbstractInsnNode insn = edge.insn; stack = edge.stack; edge.stack = null; do { int type = insn.getType(); if (type == FIELD_INSN) { convertFieldInsn((FieldInsnNode) insn); } else if (type == IINC_INSN) { convertIincInsn((IincInsnNode) insn); } else if (type == INSN) { convertInsn((InsnNode) insn); int op = insn.getOpcode(); if ((op >= IRETURN && op <= RETURN) || op == ATHROW) { break; } } else if (type == INT_INSN) { convertIntInsn((IntInsnNode) insn); } else if (type == LDC_INSN) { convertLdcInsn((LdcInsnNode) insn); } else if (type == JUMP_INSN) { JumpInsnNode jmp = (JumpInsnNode) insn; convertJumpInsn(jmp); int op = jmp.getOpcode(); if (op == JSR) throw new UnsupportedOperationException("JSR!"); if (op != GOTO) { /* ifX opcode, i.e. two successors */ AbstractInsnNode next = insn.getNext(); addEdges(insn, next, Collections.singletonList(jmp.label)); } else { addEdges(insn, jmp.label, null); } break; } else if (type == LOOKUPSWITCH_INSN) { LookupSwitchInsnNode swtch = (LookupSwitchInsnNode) insn; convertLookupSwitchInsn(swtch); LabelNode dflt = swtch.dflt; addEdges(insn, dflt, swtch.labels); break; } else if (type == METHOD_INSN) { convertMethodInsn((MethodInsnNode) insn); } else if (type == MULTIANEWARRAY_INSN) { convertMultiANewArrayInsn((MultiANewArrayInsnNode) insn); } else if (type == TABLESWITCH_INSN) { TableSwitchInsnNode swtch = (TableSwitchInsnNode) insn; convertTableSwitchInsn(swtch); LabelNode dflt = swtch.dflt; addEdges(insn, dflt, swtch.labels); } else if (type == TYPE_INSN) { convertTypeInsn((TypeInsnNode) insn); } else if (type == VAR_INSN) { if (insn.getOpcode() == RET) throw new UnsupportedOperationException("RET!"); convertVarInsn((VarInsnNode) insn); } else if (type == LABEL) { convertLabel((LabelNode) insn); } else if (type == LINE || type == FRAME) { // we can ignore it } else throw new RuntimeException("Unknown instruction type: " + type); } while ((insn = insn.getNext()) != null); } while (!worklist.isEmpty()); conversionWorklist = null; edges = null; }
From source file:soot.asm.AsmMethodSource.java
private void convert() { ArrayDeque<Edge> worklist = new ArrayDeque<Edge>(); for (LabelNode ln : trapHandlers.keySet()) worklist.add(new Edge(ln, new ArrayList<Operand>())); worklist.add(new Edge(instructions.getFirst(), new ArrayList<Operand>())); conversionWorklist = worklist;// w w w . j av a2 s . co m edges = HashBasedTable.create(1, 1); do { Edge edge = worklist.pollLast(); AbstractInsnNode insn = edge.insn; stack = edge.stack; edge.stack = null; do { int type = insn.getType(); if (type == FIELD_INSN) { convertFieldInsn((FieldInsnNode) insn); } else if (type == IINC_INSN) { convertIincInsn((IincInsnNode) insn); } else if (type == INSN) { convertInsn((InsnNode) insn); int op = insn.getOpcode(); if ((op >= IRETURN && op <= RETURN) || op == ATHROW) { break; } } else if (type == INT_INSN) { convertIntInsn((IntInsnNode) insn); } else if (type == LDC_INSN) { convertLdcInsn((LdcInsnNode) insn); } else if (type == JUMP_INSN) { JumpInsnNode jmp = (JumpInsnNode) insn; convertJumpInsn(jmp); int op = jmp.getOpcode(); if (op == JSR) throw new UnsupportedOperationException("JSR!"); if (op != GOTO) { /* ifX opcode, i.e. two successors */ AbstractInsnNode next = insn.getNext(); addEdges(insn, next, Collections.singletonList(jmp.label)); } else { addEdges(insn, jmp.label, null); } break; } else if (type == LOOKUPSWITCH_INSN) { LookupSwitchInsnNode swtch = (LookupSwitchInsnNode) insn; convertLookupSwitchInsn(swtch); LabelNode dflt = swtch.dflt; addEdges(insn, dflt, swtch.labels); break; } else if (type == METHOD_INSN) { convertMethodInsn((MethodInsnNode) insn); } else if (type == INVOKE_DYNAMIC_INSN) { convertInvokeDynamicInsn((InvokeDynamicInsnNode) insn); } else if (type == MULTIANEWARRAY_INSN) { convertMultiANewArrayInsn((MultiANewArrayInsnNode) insn); } else if (type == TABLESWITCH_INSN) { TableSwitchInsnNode swtch = (TableSwitchInsnNode) insn; convertTableSwitchInsn(swtch); LabelNode dflt = swtch.dflt; addEdges(insn, dflt, swtch.labels); } else if (type == TYPE_INSN) { convertTypeInsn((TypeInsnNode) insn); } else if (type == VAR_INSN) { if (insn.getOpcode() == RET) throw new UnsupportedOperationException("RET!"); convertVarInsn((VarInsnNode) insn); } else if (type == LABEL) { convertLabel((LabelNode) insn); } else if (type == LINE) { convertLine((LineNumberNode) insn); } else if (type == FRAME) { // we can ignore it } else throw new RuntimeException("Unknown instruction type: " + type); } while ((insn = insn.getNext()) != null); } while (!worklist.isEmpty()); conversionWorklist = null; edges = null; }