package com.coderising.jvm.field; import java.util.ArrayList; import java.util.List; import com.coderising.jvm.attr.AttributeInfo; import com.coderising.jvm.attr.InvalidAttributeInfoException; import com.coderising.jvm.constant.ConstantPool; import com.coderising.jvm.constant.UTF8Info; 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) throws InvalidAttributeInfoException{ int accessFlag = iter.getNextNBytesInteger(2); int nameIndex = iter.getNextNBytesInteger(2); int descriptorIndex = iter.getNextNBytesInteger(2); int attributeCount = iter.getNextNBytesInteger(2); List<AttributeInfo> attributeList = new ArrayList<>(); for(int i = 0; i<attributeCount; i++){ } if(attributeCount>0){ throw new InvalidAttributeInfoException("Attribute infomation is NOT valid."); } Field newField = new Field(accessFlag, nameIndex, descriptorIndex,pool); return newField; } public String toString(){ return pool.getUTF8String(nameIndex) + ":" +pool.getUTF8String( descriptorIndex); } }