package com.coderising.jvm.field;
import java.util.ArrayList;
import java.util.List;
import com.coderising.jvm.attr.AttributeInfo;
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 List<AttributeInfo> attributeInfos = new ArrayList<>();
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 int getAccessFlag() {
return accessFlag;
}
public void setAccessFlag(int accessFlag) {
this.accessFlag = accessFlag;
}
public List<AttributeInfo> getAttributeInfos() {
return attributeInfos;
}
public void setAttributeInfos(List<AttributeInfo> attributeInfos) {
this.attributeInfos = attributeInfos;
}
@Override
public String toString() {
String fieldName = pool.getUTF8String(nameIndex);
String fieldDesc = pool.getUTF8String(descriptorIndex);
return (fieldName+":"+fieldDesc);
}
public static Field parse(ConstantPool pool,ByteCodeIterator iter){
int accessFlag = iter.nextU2ToInt();
int nameIndex = iter.nextU2ToInt();
int descriptorIndex = iter.nextU2ToInt();
Field field = new Field(accessFlag,nameIndex,descriptorIndex,pool);
field.setAttributeInfos(AttributeInfo.parseAttributes(pool,iter));
return field;
}
}