package com.coderising.jvm.attr; import java.util.ArrayList; import java.util.List; import com.coderising.jvm.constant.ConstantPool; import com.coderising.jvm.loader.ByteCodeIterator; public class LocalVariableTable extends AttributeInfo{ private List<LocalVariableItem> localVariableItems = new ArrayList<>(); public List<LocalVariableItem> getLocalVariableItems() { return localVariableItems; } public void addLocalVariableItem(LocalVariableItem localVariableItem) { this.localVariableItems.add(localVariableItem); } public LocalVariableTable(int attrNameIndex, int attrLength) { super(attrNameIndex, attrLength); } public static LocalVariableTable parse(ByteCodeIterator it, ConstantPool constantPool) { int attrNameIndex = it.next2ByteToInt(); int attrLength = it.next4ByteToInt(); LocalVariableTable localVariableTable = new LocalVariableTable(attrNameIndex, attrLength); int localVariableTableLength = it.next2ByteToInt(); while(localVariableTableLength > 0) { int startPc = it.next2ByteToInt(); int length = it.next2ByteToInt(); int nameIndex = it.next2ByteToInt(); int descIndex = it.next2ByteToInt(); int index = it.next2ByteToInt(); localVariableTable.addLocalVariableItem(new LocalVariableItem(startPc, length, nameIndex, descIndex, index)); localVariableTableLength--; } return localVariableTable; } }