package org.xukai.jvm.attr; import org.xukai.jvm.loader.ByteCodeIterator; import java.util.ArrayList; import java.util.List; public class LocalVariableTable extends AttributeInfo{ List<LocalVariableItem> items = new ArrayList<LocalVariableItem>(); public LocalVariableTable(int attrNameIndex, int attrLen) { super(attrNameIndex, attrLen); } public static LocalVariableTable parse(ByteCodeIterator iter){ int attributeNameIndex = iter.nextToInt(2); int attributeLength = iter.nextToInt(4); LocalVariableTable localVariableTable = new LocalVariableTable(attributeNameIndex, attributeLength); int localVariableTableLength = iter.nextToInt(2); if (localVariableTableLength > 0) { for (int i = 0; i < localVariableTableLength; i++) { int startPc = iter.nextToInt(2); int length = iter.nextToInt(2); int nameIndex = iter.nextToInt(2); int descriptorIndex = iter.nextToInt(2); int index = iter.nextToInt(2); LocalVariableItem lineNumberItem = new LocalVariableItem(); lineNumberItem.setStartPC(startPc); lineNumberItem.setLength(length); lineNumberItem.setNameIndex(nameIndex); lineNumberItem.setLength(descriptorIndex); lineNumberItem.setLength(index); localVariableTable.addLocalVariableItem(lineNumberItem); } } return localVariableTable; } private void addLocalVariableItem(LocalVariableItem item) { this.items.add(item); } }