package com.github.wdn.coding2017.jvm.attr; 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 LocalVariableTable extends AttributeInfo{ List<LocalVariableTableItem> localVariableTableItems = new ArrayList<>(); public LocalVariableTable(int attributeNameIndex, int attributeLength) { super(attributeNameIndex, attributeLength); } private static class LocalVariableTableItem{ int startPC; int length; int nameIndex; int descriptorIndex; int index; public int getStartPC() { return startPC; } public void setStartPC(int startPC) { this.startPC = startPC; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getNameIndex() { return nameIndex; } public void setNameIndex(int nameIndex) { this.nameIndex = nameIndex; } public int getDescriptorIndex() { return descriptorIndex; } public void setDescriptorIndex(int descriptorIndex) { this.descriptorIndex = descriptorIndex; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } private void addLocalVariableItem(LocalVariableTableItem item){ this.localVariableTableItems.add(item); } public static LocalVariableTable parse(ByteCodeIterator iter) { LocalVariableTable localVariableTable = new LocalVariableTable(iter.readU2ToInt(),iter.readU2ToInt()); int LocalVariableTableCount = iter.readU2ToInt(); for (int l = 0; l < LocalVariableTableCount; l++) { LocalVariableTableItem item = new LocalVariableTableItem(); item.setStartPC(iter.readU2ToInt()); item.setLength(iter.readU2ToInt()); item.setNameIndex(iter.readU2ToInt()); item.setDescriptorIndex(iter.readU2ToInt()); item.setIndex(iter.readU2ToInt()); localVariableTable.addLocalVariableItem(item); } return localVariableTable; } }