SonarQube:创建自定义规则以在类

时间:2017-08-14 09:02:38

标签: java annotations sonarqube

我正在尝试创建一个自定义SonarQube规则,该规则将检测特定自定义Java Annotation的使用情况。这是我找到的代码,它打印了一个类中使用的所有注释的列表。

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

我得到了!unknownSymbol!而不是自定义注释&#39;实际的名字。其中一个自定义注释是io.swagger.jaxrs.PATCH。

另一个注释在单独的包中定义,并由样本类导入。

我们是否必须在某处注册这些自定义注释以供API检测?

请建议应做出哪些更改,以便我们检测并打印实际的自定义注释名称。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我假设您正在遵循本指南并在测试https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101中运行检查。要为测试提供依赖关系,您可以