Расчет эфферентной связи в Java
Мне нужно рассчитать Efferent Coupling (Связь между объектами) Java-программы из исходного файла.
Я уже извлекаю абстрактное синтаксическое дерево с помощью jdt в Eclipse, но я не уверен, возможно ли напрямую извлечь зависимости класса из другого класса.
Я не могу использовать какой-либо метрический плагин.
Спасибо за вашу помощь.
1 ответ
Вы можете использовать ASTVisitor
чтобы проверить соответствующие узлы в вашем AST. Вы можете использовать resolveBinding()
или же resolveTypeBinding()
извлечь зависимости. (Чтобы это работало, вам нужно включить "resolBindings" при разборе.)
Я не проверял это, но этот пример должен дать вам представление:
public static IType[] findDependencies(ASTNode node) {
final Set<IType> result = new HashSet<IType>();
node.accept(new ASTVisitor() {
@Override
public boolean visit(SimpleName node) {
ITypeBinding typeBinding = node.resolveTypeBinding();
if (typeBinding == null)
return false;
IJavaElement element = typeBinding.getJavaElement();
if (element != null && element instanceof IType) {
result.add((IType)element);
}
return false;
}
});
return result.toArray(new IType[result.size()]);
}