/** Loads the code of the method. */ protected Instruction[] loadCode(Method m) { Code c = m.getCode(); if (c == null) { return null; } InstructionList il = new InstructionList(c.getCode()); InstructionHandle[] hs = il.getInstructionHandles(); int length = hs.length; Instruction[] is = new Instruction[length]; for (int i = 0; i < length; i++) { is[i] = insnFactory.createAndInitialize(this, hs[i], i, m.getConstantPool()); if (c.getLineNumberTable() != null) { // annoying bug when BCEL don't seem to find linenumber - pos match // also sometimes linenumber tables are not available is[i].setContext( ci.getName(), name, c.getLineNumberTable().getSourceLine(is[i].getPosition()), is[i].getPosition()); } } return is; }
/** Loads the line numbers for the method. */ protected int[] loadLineNumbers(Method m) { Code c = m.getCode(); if (c == null) { return null; } LineNumberTable lnt = c.getLineNumberTable(); int length = code.length; int[] ln = new int[length]; if (lnt == null) { // no line information return null; } else { for (int i = 0; i < length; i++) { try { // annoying bug when BCEL don't seem to find linenumber - pos match ln[i] = lnt.getSourceLine(code[i].getPosition()); } catch (RuntimeException e) { System.out.print("^"); } } } return ln; }