SonarQube: создание пользовательских правил для получения пользовательских аннотаций в классе

Я пытаюсь создать собственное правило SonarQube, которое будет определять использование определенной пользовательской аннотации Java. Вот код, который я нашел, который печатает список всех аннотаций, используемых в классе.

public class SampleAnnotationCheck extends IssuableSubscriptionVisitor {
    @Override
    public List<Tree.Kind> nodesToVisit() {
        return ImmutableList.of(Tree.Kind.METHOD);
    }

    @Override
    public void visitNode(Tree tree) {
        MethodTree methodTree = (MethodTree) tree;
        for (AnnotationInstance ai : ((JavaSymbol.MethodJavaSymbol) methodTree.symbol()).metadata().annotations()) {
            System.out.println(ai.symbol().name());
        }
    }
}

Образец файла Java:

@GET
@Path(values)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
method1(...) {...}

@CustomAnnotation(values)
@POST
@Path(values)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
method2(...) {...}

@PATCH
@Path(values)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
method3(...) {...}

Ожидаемый результат:

GET
Path
Consumes
Produces
CustomAnnotation
POST
Path
Consumes
Produces
PATCH
Path
Consumes
Produces

Фактический выход:

GET
Path
Consumes
Produces
!unknownSymbol!
POST
Path
Consumes
Produces
!unknownSymbol!
Path
Consumes
Produces

Я получаю! Неизвестный символ! вместо фактических имен пользовательских аннотаций. Одна из пользовательских аннотаций - io.swagger.jaxrs.PATCH.

Другая аннотация определяется внутри отдельного пакета и импортируется образцом класса.

Нужно ли где-то регистрировать эти пользовательские аннотации, чтобы их мог обнаружить API?

Пожалуйста, предложите, какие изменения следует внести, чтобы мы могли обнаружить и напечатать фактическое имя пользовательской аннотации.

Заранее спасибо!

1 ответ

Решение

Я предполагаю, что вы следуете этому руководству и проводите проверку в своих тестах https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101. Чтобы предоставить зависимости для ваших тестов, вы можете либо

Другие вопросы по тегам