特定のカスタムJavaアノテーションの使用状況を検出するカスタムSonarQubeルールを作成しようとしています。ここで私が見つけたコードは、クラスで使用されているすべての注釈のリストを出力します。SonarQube:カスタムルールを作成してクラス内にカスタムアノテーションを作成する
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!カスタムアノテーションの実際の名前の代わりに使用します。カスタムアノテーションの1つはio.swagger.jaxrs.PATCHです。
他の注釈は別のパッケージ内で定義され、サンプルクラスによってインポートされます。
これらのカスタム注釈をAPIで検出できるように登録する必要がありますか。
実際のカスタム注釈の名前を検出して印刷できるように、変更する必要があることをお勧めします。
ありがとうございます!
どのように分析を行っていますか? 'sonar.java.libraries'プロパティを提供していますか? –
私はまだSonarQubeとルールを統合していません。この結果は、Eclipseでルールを実行したことによるものです。 –
テスト中に実行していますか?カスタムアノテーションはクラスパスで利用できますか? –