package org.wsc.coderising.jvm.clz; import org.wsc.coderising.jvm.constant.ClassInfo; import org.wsc.coderising.jvm.constant.ConstantPool; public class ClassFile { /** 次版本 */ private int minorVersion; /** 主版本 */ private int majorVersion; /** 访问标志 */ private AccessFlag accessFlag; /** 类及父类索引 */ private ClassIndex clzIndex; /** 常量池 */ private ConstantPool pool; 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 setConstPool(ConstantPool pool) { this.pool = pool; } public void setClassIndex(ClassIndex clzIndex) { this.clzIndex = clzIndex; } 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()); } private String getClassName() { int thisClassIndex = this.clzIndex.getThisClassIndex(); ClassInfo thisClass = (ClassInfo) this.getConstantPool().getConstantInfo(thisClassIndex); return thisClass.getClassName(); } private String getSuperClassName() { ClassInfo superClass = (ClassInfo) this.getConstantPool().getConstantInfo(this.clzIndex.getSuperClassIndex()); return superClass.getClassName(); } }