package jdepend.metadata.tree;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import jdepend.metadata.JavaClass;
public abstract class JavaClassTreeCreator {
private Collection<JavaClass> javaClasses = new HashSet<JavaClass>();// 记录扫描过的JavaClass
JavaClassTreeCreator() {
}
public JavaClassTree create(JavaClass rootClass) {
JavaClassTree tree = new JavaClassTree(rootClass);
javaClasses.add(rootClass);
this.rout(rootClass, tree);
return tree;
}
private void rout(JavaClass javaClass, JavaClassTree tree) {
List<JavaClass> dependClasses = new ArrayList<JavaClass>();
// 广度搜索
for (JavaClass dependClass : getRelationClass(javaClass)) {
if (!javaClasses.contains(dependClass)) {
javaClasses.add(dependClass);
dependClasses.add(dependClass);
tree.addNode(javaClass, dependClass);
}
}
// 深度搜索
for (JavaClass dependClass1 : dependClasses) {
rout(dependClass1, tree);
}
}
/**
* 得到指定与该类有关系的类集合
*
* @param javaClass
* @return
*/
protected abstract Collection<JavaClass> getRelationClass(JavaClass javaClass);
}