package com.coding.basic.homework_04.jvm.clz;
import java.util.ArrayList;
import java.util.List;
import com.coding.basic.homework_04.jvm.attr.AccessFlag;
import com.coding.basic.homework_04.jvm.constant.ConstantPool;
import com.coding.basic.homework_04.jvm.field.Field;
import com.coding.basic.homework_04.jvm.info.ClassInfo;
import com.coding.basic.homework_04.jvm.method.Method;
public class ClassFile {
private String MagicNumber;
private int minorVersion;
private int majorVersion;
private int ConstantNum;
private ConstantPool constantPool;
private ClassIndex clzIndex;
private AccessFlag accessFlag;
private List<Field> fields = new ArrayList<Field>();
private List<Method> methods = new ArrayList<Method>();
public Method getMethod(String methodName, String paramAndReturnType){
for(Method method : methods){
String name = constantPool.getUTF8String(method.getNameIndex());
String descriptor = constantPool.getUTF8String(method.getDescriptorIndex());
if(name.equals(methodName) && descriptor.equals(paramAndReturnType)){
return method;
}
}
return null;
}
public Method getMainMethod(){
for(Method method : methods){
String name = constantPool.getUTF8String(method.getNameIndex());
String descriptor = constantPool.getUTF8String(method.getDescriptorIndex());
if(name.equals("main") && descriptor.equals("([Ljava/lang/String;)V")){
return method;
}
}
return null;
}
public void addMethod(Method method){
methods.add(method);
}
public List<Method> getMethods() {
return methods;
}
public void addField(Field field){
fields.add(field);
}
public AccessFlag getAccessFlag() {
return accessFlag;
}
public void setAccessFlag(AccessFlag accessFlag) {
this.accessFlag = accessFlag;
}
public ClassIndex getClzIndex() {
return clzIndex;
}
public void setClzIndex(ClassIndex clzIndex) {
this.clzIndex = clzIndex;
}
public int getConstantNum() {
return ConstantNum;
}
public void setConstantNum(int constantNum) {
ConstantNum = constantNum;
}
public void print() {
System.out.println("MagicNumber: "+ MagicNumber);
System.out.println( "minorVersion" +minorVersion);
System.out.println("majorVersion" + majorVersion);
}
public String getMagicNumber() {
return MagicNumber;
}
public void setMagicNumber(String magicNumber) {
MagicNumber = magicNumber;
}
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 ConstantPool getConstantPool() {
return constantPool;
}
public void setConstantPool(ConstantPool constantPool) {
this.constantPool = constantPool;
}
public List<Field> getFields() {
return fields;
}
public String getClassName() {
ClassInfo clzInfo = (ClassInfo)constantPool.getConstantInfo(1);
String clzName = clzInfo.getClassName();
return clzName;
}
public String getSuperClassName() {
ClassInfo clzInfo = (ClassInfo)constantPool.getConstantInfo(3);
String clzName = clzInfo.getClassName();
return clzName;
}
}