package org.tinylcy.attributeinfo;
import org.tinylcy.basictype.U2;
import org.tinylcy.basictype.U4;
import org.tinylcy.constantpool.ConstantPool;
import org.tinylcy.constantpool.ConstantUtf8Info;
import java.io.InputStream;
/**
* Created by chenyangli.
*/
public class LocalVariableTable extends BasicAttributeInfo {
private short localVariableTableLength;
private LocalVariableInfo[] localVariableTable;
public LocalVariableTable(ConstantPool constantPool, short attributeNameIndex) {
super(constantPool);
setAttributeNameIndex(attributeNameIndex);
}
@Override
public void read(InputStream inputStream) {
U4 attributeLengthU4 = U4.read(inputStream);
U2 localVariableTableLengthU2 = U2.read(inputStream);
setAttributeLength(attributeLengthU4.getValue());
localVariableTableLength = localVariableTableLengthU2.getValue();
localVariableTable = new LocalVariableInfo[localVariableTableLength];
for (int i = 0; i < localVariableTableLength; i++) {
localVariableTable[i] = new LocalVariableInfo();
localVariableTable[i].read(inputStream);
}
}
private class LocalVariableInfo {
public short startPc;
public short length;
public short nameIndex;
public short descriptorIndex;
public short index;
public void read(InputStream inputStream) {
U2 startPcU2 = U2.read(inputStream);
U2 lengthU2 = U2.read(inputStream);
U2 nameIndexU2 = U2.read(inputStream);
U2 descriptorIndexU2 = U2.read(inputStream);
U2 indexU2 = U2.read(inputStream);
startPc = startPcU2.getValue();
length = lengthU2.getValue();
nameIndex = nameIndexU2.getValue();
descriptorIndex = descriptorIndexU2.getValue();
index = indexU2.getValue();
}
@Override
public String toString() {
return "LocalVariableInfo{" +
"startPc=" + startPc +
", length=" + length +
", nameIndex=" + nameIndex +
", descriptorIndex=" + descriptorIndex +
", index=" + index +
'}';
}
}
@Override
public String toString() {
return "LocalVariableTable{" +
"attributeNameIndex=" + getAttributeNameIndex() +
" [attribute name = " + ((ConstantUtf8Info) (constantPool.getCpInfo()[getAttributeNameIndex() - 1])).getValue() + "]" +
", attributeLength=" + getAttributeLength() +
", localVariableTableLength=" + localVariableTableLength +
'}';
}
}