package main.coding_170423.jvm.clz; import main.coding_170423.jvm.constant.ClassInfo; import main.coding_170423.jvm.constant.ConstantPool; import main.coding_170423.jvm.field.Field; import main.coding_170423.jvm.method.Method; import java.util.ArrayList; import java.util.List; /** * Created by peter on 2017/4/21. */ public class ClassFile { private int minorVersion; private int majorVersion; private ConstantPool pool; private AccessFlag accessFlag; private ClassIndex clzIndex; private List<Field> fields = new ArrayList<>(); private List<Method> methods = new ArrayList<>(); public ClassIndex getClzIndex(){ return clzIndex; } public AccessFlag getAccessFlag(){ return accessFlag; } public void setAccessFlag(AccessFlag accessFlag){ this.accessFlag = accessFlag; } public ConstantPool getConstantPool(){ return pool; } public int getMinorVersion(){ return minorVersion; } public void setMinorVersion(int minorVersion){ this.minorVersion = minorVersion; } public int getMajorVersion(){ return majorVersion; } public void setMajorVersion(int majorVersion){ this.majorVersion = majorVersion; } public void setConstantPool(ConstantPool pool){ this.pool = pool; } public void setClassIndex(ClassIndex clzIndex){ this.clzIndex = clzIndex; } public void addField(Field f){ this.fields.add(f); } public List<Field> getFields(){ return this.fields; } public void addMethod(Method m){ this.methods.add(m); } public List<Method> getMethods(){ return methods; } public void print(){ if(this.accessFlag.isPublicClass()){ System.out.println("Access flag : public"); } System.out.println("Class Name:"+getClassName()); System.out.println("Super Class Name:"+getSuperClassName()); } public String getClassName(){ int thisClassIndex = this.clzIndex.getThisClassIndex(); ClassInfo thisClass = (ClassInfo)this.getConstantPool().getConstantInfo(thisClassIndex); return thisClass.getClassName(); } public String getSuperClassName(){ ClassInfo superClass = (ClassInfo)this.getConstantPool().getConstantInfo(this.getClzIndex().getSuperClassIndex()); return superClass.getClassName(); } }