【发布时间】:2017-07-28 17:23:43
【问题描述】:
所以,我目前正在开发一个带有一些自定义规则的 SonarQube Java 插件。
其中一个需要分析 Java 文件中的特定注释,如果缺少它,它应该报告一个问题,除非该注释在其超类上。
问题是我无法在当前分析期间(在类上)分析另一个文件(超类)。
有没有办法做到这一点?
Obs:我正在使用 SonarQube Server 5.6.3 和 Sonar Java Plugin 4.9。
【问题讨论】:
所以,我目前正在开发一个带有一些自定义规则的 SonarQube Java 插件。
其中一个需要分析 Java 文件中的特定注释,如果缺少它,它应该报告一个问题,除非该注释在其超类上。
问题是我无法在当前分析期间(在类上)分析另一个文件(超类)。
有没有办法做到这一点?
Obs:我正在使用 SonarQube Server 5.6.3 和 Sonar Java Plugin 4.9。
【问题讨论】:
您可以使用语义模型来获取有关项目中定义的符号(类、方法...)的信息。当您分析类时,您可以访问ClassTree,因此您可以像这样测试其超类上是否存在注释
ClassTree classTree = (ClassTree) tree;
Symbol.TypeSymbol classSymbol = classTree.symbol();
Type superClass = classSymbol.superClass();
SymbolMetadata superClassMetadata = superClass.symbol().metadata();
if (superClassMetadata.isAnnotatedWith("org.acme.MyAnnotation")) {
//...
}
例如查看此检查implementation,它使用 API
【讨论】: