package com.baselet.generator.java.bcel;
import java.io.IOException;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.Field;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BcelJavaClass implements com.baselet.generator.java.JavaClass {
private static final Logger log = LoggerFactory.getLogger(BcelJavaClass.class);
private final JavaClass clazz;
private String className;
public BcelJavaClass(String filename) throws IOException {
ClassParser parser = new ClassParser(filename);
clazz = parser.parse();
}
@Override
public String getName() {
String nameWithPackage = clazz.getClassName();
className = nameWithPackage.substring(nameWithPackage.lastIndexOf(".") + 1, nameWithPackage.length());
return className;
}
@Override
public com.baselet.generator.java.Field[] getFields() {
Field[] fields = clazz.getFields();
BcelField[] newFields = new BcelField[fields.length];
for (int i = 0; i < fields.length; ++i) {
newFields[i] = new BcelField(fields[i]);
}
return newFields;
}
@Override
public com.baselet.generator.java.Method[] getMethods() {
Method[] methods = clazz.getMethods();
BcelMethod[] newMethods = new BcelMethod[methods.length];
for (int i = 0; i < methods.length; ++i) {
newMethods[i] = new BcelMethod(methods[i], className);
}
return newMethods;
}
@Override
public ClassRole getRole() {
if (clazz.isInterface()) {
return ClassRole.INTERFACE;
}
else if (clazz.isAbstract()) {
return ClassRole.ABSTRACT;
}
else {
return ClassRole.CLASS;
}
}
@Override
public String getPackage() {
return clazz.getPackageName();
}
}