package jdepend.parse.impl;
import java.io.InputStream;
import jdepend.metadata.JavaClass;
import jdepend.parse.ParseConfigurator;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.DescendingVisitor;
public class BCELClassFileParser extends AbstractParser {
public BCELClassFileParser(ParseConfigurator conf) {
super(conf);
}
@Override
protected JavaClass doParse(String place, InputStream is, String model) throws ParseClassException {
JavaClass jClass = null;
try {
ClassParser parser = new ClassParser(is, null);
org.apache.bcel.classfile.JavaClass javaClass = parser.parse();
jClass = new JavaClass("Unknown", true, javaClass.getAccessFlags());
jClass.setPlace(place);
JDependClassFileVisitor visitor = this.createVisitor(model);
visitor.setJavaClass(jClass);
visitor.setParser(this);
DescendingVisitor dvisitor = new DescendingVisitor(javaClass, visitor);
dvisitor.visit();
visitor.calImportedPackages();
this.debug("");
this.getWriter().flush();
return jClass;
} catch (Exception e) {
if (jClass != null) {
throw new ParseClassException(jClass.getName(), e);
} else {
throw new ParseClassException(e);
}
}
}
private JDependClassFileVisitor createVisitor(String model) {
if (model.equals(Model_Big)) {
return new BigClassFileVisitor();
} else {
return new SmallClassFileVisitor();
}
}
}