2017-08-14 21 views
3

特定のカスタム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で検出できるように登録する必要がありますか。

実際のカスタム注釈の名前を検出して印刷できるように、変更する必要があることをお勧めします。

ありがとうございます!

+0

どのように分析を行っていますか? 'sonar.java.libraries'プロパティを提供していますか? –

+0

私はまだSonarQubeとルールを統合していません。この結果は、Eclipseでルールを実行したことによるものです。 –

+0

テスト中に実行していますか?カスタムアノテーションはクラスパスで利用できますか? –

答えて

1

あなたのテストでは、このガイドとランニングチェックに従っていると仮定します。https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101あなたのテストに依存関係を提供するには、いずれかのテストでtarget/test-jarsディレクトリ(ここではMavenの依存関係のプラグインでhttps://github.com/SonarSource/sonar-custom-rules-examples/blob/master/java-custom-rules/pom.xml#L147それを行う方法を参照)

    • プット・ジャーJavaCheckVerifier.verify(filename, check, classpath)

    • を使用してカスタムクラスパスを提供することができます
  • +0

    私はtarget/test-jarsにカスタム注釈jarを追加しました。 –

    関連する問題