package com.coderising.jvm.attr; import java.util.ArrayList; import java.util.List; import com.coderising.jvm.loader.ByteCodeIterator; public class LineNumberTable extends AttributeInfo { List<LineNumberItem> items = new ArrayList<LineNumberItem>(); private static class LineNumberItem{ int startPC; int lineNum; public int getStartPC() { return startPC; } public void setStartPC(int startPC) { this.startPC = startPC; } public int getLineNum() { return lineNum; } public void setLineNum(int lineNum) { this.lineNum = lineNum; } } public void addLineNumberItem(LineNumberItem item){ this.items.add(item); } public LineNumberTable(int attrNameIndex, int attrLen) { super(attrNameIndex, attrLen); } public static LineNumberTable parse(ByteCodeIterator iter){ int attributeLength = iter.getNextNBytesInteger(4); int lineNumberTableLength = iter.getNextNBytesInteger(2); System.out.println("attribute length: " + attributeLength); System.out.println("line number table length: " + lineNumberTableLength); LineNumberTable table = new LineNumberTable(attributeLength, lineNumberTableLength); for(int i = 0; i<lineNumberTableLength; i++){ LineNumberItem item = new LineNumberItem(); item.setStartPC(iter.getNextNBytesInteger(2)); item.setLineNum(iter.getNextNBytesInteger(2)); table.addLineNumberItem(item); System.out.println("start pc: " + item.getStartPC() + " line number: " + item.getLineNum()); } return table; } }