package com.github.wdn.coding2017.jvm.field;
import com.github.wdn.coding2017.jvm.clz.AccessFlag;
import com.github.wdn.coding2017.jvm.constant.ConstantPool;
import com.github.wdn.coding2017.jvm.loader.ByteCodeIterator;
/**
* Created by Administrator on 2017/4/10 0010.
*/
public class Field {
private AccessFlag accessFlag; // 例如是public , private 等等
private int nameIndex; // 指向常量池的入口
private int descriptorIndex; //指向常量池的入口
private int attributesCount; // 该字段的属性有多少个
private ConstantPool pool;
// attribute_info attributes[attributes_count]; //属性信息
private Field(){
}
public Field(ConstantPool pool){
this.pool = pool;
}
public static Field parse(ByteCodeIterator iter){
Field field = new Field();
field.setAccessFlags(new AccessFlag(iter.readU2ToInt()));
field.setNameIndex(iter.readU2ToInt());
field.setDescriptorIndex(iter.readU2ToInt());
int attCount = iter.readU2ToInt();
if(attCount>0){
throw new RuntimeException("字段属性数量大于0");
}
field.setAttributesCount(attCount);
return field;
}
public String toString(){
return pool.getConstantInfo(nameIndex).getValue()+pool.getConstantInfo(descriptorIndex).getValue();
}
public AccessFlag getAccessFlags() {
return accessFlag;
}
public void setAccessFlags(AccessFlag accessFlags) {
this.accessFlag = accessFlags;
}
public int getNameIndex() {
return nameIndex;
}
public void setNameIndex(int nameIndex) {
this.nameIndex = nameIndex;
}
public int getDescriptorIndex() {
return descriptorIndex;
}
public void setDescriptorIndex(int descriptorIndex) {
this.descriptorIndex = descriptorIndex;
}
public int getAttributesCount() {
return attributesCount;
}
public void setAttributesCount(int attributesCount) {
this.attributesCount = attributesCount;
}
public void setPool(ConstantPool pool) {
this.pool = pool;
}
}