JDepend пропускает циклы - PullRequest
       20

JDepend пропускает циклы

1 голос
/ 30 августа 2011

У нас есть тест JUnit, основанный на JDepend 2.9.1, чтобы найти недопустимые зависимости и циклы.

Сегодня мы обнаружили, что в JDepend отсутствуют зависимости.Кажется, он не учитывает A в зависимости от B в следующем фрагменте кода:

public class A {
    @SomeAnotation(value = B.class)
    public String someMethod() {
        ...
    }
}

Наш тест выглядит следующим образом:

private JDepend setupJDepend() {
    JDepend jdepend = null;
    try {
        jdepend = new JDepend();
        jdepend.addDirectory("target/classes");
        jdepend.addDirectory("target/test-classes");
    } catch (final IOException ioException) {
        fail("An IOException occured: " + ioException.getMessage());
    }
    jdepend.analyzeInnerClasses(true);
    return jdepend;
}

@Test
public final void testNoCyclesOnPackageLevel() {
    final JDepend jdepend = setupJDepend();
    final Collection<?> packages = analyzeDependencies();

    assertTrue(packages.size() > 0);

    assertFalse("The code contains dependency cycles on package level!",
            jdepend.containsCycles());

    if (ignorePackageCycle) {
        return;
    }

    java.util.List<String> packagesWithCycle = new ArrayList<String>();
    for (Object pObject : packages) {
        JavaPackage javaPackage = (JavaPackage) pObject;
        if (javaPackage.containsCycle()) {
            packagesWithCycle.add(javaPackage.getName());
        }
    }
    assertTrue(packagesWithCycle.toString(), packagesWithCycle.isEmpty());
}

Плагин JDepend4Eclipse видит зависимость и сообщаетрезультирующий цикл.

Это ошибка?Есть ли обходной путь?Мы делаем что-то не так?

В примечании, связанном с: jdepend.containsCycles () всегда возвращает false.

1 Ответ

2 голосов
/ 30 августа 2011

Это отсутствующая функция!

Для @Retention(SOURCE), объявленного @SomeAnotation, ни один инструмент не может найти B в скомпилированном файле класса.Для других политик аннотации включены в файл класса, но ClassFileParser в JDepend не поддерживает аннотации любого рода, пока это отсутствует функция.

РЕДАКТИРОВАТЬ: исходный код отмеченJava 5 аннотаций и используется в плагине Eclipse.Может быть, 2.9.1 не основан на этом.Не найдены заметки о выпуске JDepend и дата его выпуска.Кодекс был проверен в 2010-05-19.«Последний» релиз, похоже, выпущен в 2008 году.

...