package com.coderising.jvm.attribute; import java.util.ArrayList; import java.util.List; import com.coderising.jvm.clasfile.ClassFile; import com.coderising.jvm.loader.ByteCodeIterator; public class LocalVariableTable extends AttributeInfo{ private List<LocalVariableItem> localVariableItems = new ArrayList<>(); public LocalVariableTable(int attrNameIndex, int attrLen) { super(attrNameIndex, attrLen); } public void addLocalVaribleItem(LocalVariableItem lItem){ this.localVariableItems.add(lItem); } public static LocalVariableTable parse(ClassFile classFile, ByteCodeIterator iterator) { iterator.back(2); int attrIndex = iterator.next2BytesToInt(); int attrlen = iterator.next4BytesToInt(); int localVariCount = iterator.next2BytesToInt(); LocalVariableTable lTable = new LocalVariableTable(attrIndex, attrlen); if(localVariCount > 0){ for (int i = 0; i < localVariCount; i++) { LocalVariableItem lItem = new LocalVariableItem(); lItem.setStart(iterator.next2BytesToInt()); lItem.setLenth(iterator.next2BytesToInt()); lItem.setNameIndex(iterator.next2BytesToInt()); lItem.setDescribeIndex(iterator.next2BytesToInt()); lItem.setSlotIndex(iterator.next2BytesToInt()); lTable.addLocalVaribleItem(lItem); } } return lTable; } }