package com.coderising.jvm.field;
import com.coderising.jvm.constant.ConstantPool;
import com.coderising.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;
}
public static Field parse(ConstantPool pool, ByteCodeIterator iter) {
int accessFlag = iter.nextU2ToInt();
int nameIndex = iter.nextU2ToInt();
int descriptorIndex = iter.nextU2ToInt();
int attributeCount = iter.nextU2ToInt();
System.out.println("Filed accessFlag: " + accessFlag);
System.out.println("Filed nameIndex: " + nameIndex);
System.out.println("Filed descriptorIndex: " + descriptorIndex);
System.out.println("Filed attributeCount: " + attributeCount);
if (attributeCount > 0) {
throw new RuntimeException("Filed attribute hasn't been implemented yet");
}
return new Field(accessFlag, nameIndex, descriptorIndex, pool);
}
@Override
public String toString() {
String name = pool.getUTF8String(this.nameIndex);
String desc = pool.getUTF8String(this.descriptorIndex);
return name + ":" + desc;
}
}