Расчет эфферентной связи в 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()]);
}
Другие вопросы по тегам