package com.pan.jvm.field;
import com.pan.jvm.constant.ConstantPool;
import com.pan.jvm.constant.UTF8Info;
import com.pan.jvm.loader.ByteCodeIterator;
public class Field {
private int accessFlag;
private int nameIndex;
private int descriptorIndex;
private ConstantPool pool;
public Field( int accessFlag, int nameIndex, int descriptorIndex,ConstantPool pool) {
this.accessFlag = accessFlag;
this.nameIndex = nameIndex;
this.descriptorIndex = descriptorIndex;
this.pool = pool;
}
@Override
public String toString() {
String name = ((UTF8Info) pool.getConstantInfo(this.nameIndex)).getValue();
String desc = ((UTF8Info) pool.getConstantInfo(this.descriptorIndex)).getValue();
return name + ":" + desc;
}
public static Field parse(ConstantPool pool, ByteCodeIterator iter){
int accessFlags = iter.nextU2ToInt();
int nameIndex = iter.nextU2ToInt();
int descriptorIndex = iter.nextU2ToInt();
int attrCount = iter.nextU2ToInt();
System.out.println("Field Attributes Count: " + attrCount);
Field field = new Field(accessFlags, nameIndex, descriptorIndex, pool);
if (attrCount > 0){
throw new RuntimeException("Attributes Count > 0");
}
return field;
}
}