package com.github.wdn.coding2017.jvm.attr; import com.github.wdn.coding2017.jvm.constant.ConstantPool; import com.github.wdn.coding2017.jvm.loader.ByteCodeIterator; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/4/12 0012. */ public class LineNumberTable extends AttributeInfo{ public LineNumberTable(int attributeNameIndex, int attributeLength) { super(attributeNameIndex, attributeLength); } List<LineNumberItem> lineNumberItems = new ArrayList<>(); 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.lineNumberItems.add(item); } public static LineNumberTable parse(ByteCodeIterator iter){ LineNumberTable lineNumberTable = new LineNumberTable(0, iter.readU4ToInt()); int lineNumberTableCount = iter.readU2ToInt(); for (int l = 0; l < lineNumberTableCount; l++) { LineNumberItem lineNumberItem = new LineNumberItem(); lineNumberItem.setStartPC(iter.readU2ToInt()); lineNumberItem.setLineNum(iter.readU2ToInt()); lineNumberTable.addLineNumberItem(lineNumberItem); } return lineNumberTable; } }