package jvm.classfile.constant.item.impl;
import jvm.classfile.ConstantPool;
import jvm.classfile.constant.item.Constant;
import jvm.classfile.constant.item.IReference;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Haochen on 2017/4/9.
* TODO:
*/
public class FieldRefInfo implements Constant, IReference {
private int classIndex;
private int nameAndTypeIndex;
private String className;
private String nameAndType;
public FieldRefInfo(int classIndex, int nameAndTypeIndex) {
this.classIndex = classIndex;
this.nameAndTypeIndex = nameAndTypeIndex;
}
@Override
public int size() {
return 5;
}
@Override
public Map<Integer, String> printableMap() {
Map<Integer, String> map = new HashMap<>();
map.put(PRINT_TYPE, "FieldRef");
map.put(PRINT_PARAM, "#" + classIndex + ".#" + nameAndTypeIndex);
map.put(PRINT_COMMENT, "// " + className + '.' + nameAndType);
return map;
}
public int getClassIndex() {
return classIndex;
}
public int getNameAndTypeIndex() {
return nameAndTypeIndex;
}
@Override
public void linkReference(ConstantPool constantPool) {
className = ((ClassInfo) constantPool.getConstantInfo(classIndex)).getClassName();
nameAndType = ((NameAndTypeInfo) constantPool.getConstantInfo(nameAndTypeIndex)).getNameAndType();
}
public String getClassName() {
return className;
}
public String getNameAndType() {
return nameAndType;
}
}