package main.coding_170416.jvm.field; import main.coding_170416.jvm.constant.ConstantPool; import main.coding_170416.jvm.constant.UTF8Info; import main.coding_170416.jvm.loader.ByteCodeIterator; /** * Created by peter on 2017/4/21. */ public class Field { private int accessFlag; private int nameIndex; private int descriptionIndex; private ConstantPool pool; public Field(int accessFlag,int nameIndex,int descriptionIndex,ConstantPool pool){ this.accessFlag = accessFlag; this.nameIndex = nameIndex; this.descriptionIndex = descriptionIndex; this.pool = pool; } @Override public String toString() { String name = ((UTF8Info)pool.getConstantInfo(this.nameIndex)).getValue(); String desc = ((UTF8Info)pool.getConstantInfo(this.descriptionIndex)).getValue(); return name+":"+desc; } public static Field parse(ConstantPool pool, ByteCodeIterator iterator){ int accessFlag = iterator.nextU2ToInt(); int nameIndex = iterator.nextU2ToInt(); int descIndex = iterator.nextU2ToInt(); int attributeCount = iterator.nextU2ToInt(); Field f = new Field(accessFlag,nameIndex,descIndex,pool); if(attributeCount>0){ throw new RuntimeException("Field attribute has not implemented"); } return f; } }