sonarqube java规则不是扩展类应该是final

时间:2018-04-20 11:05:08

标签: java sonarqube rules

我编写了一条规则来检查一个未扩展的类是否是最终的。 我使用了ClassTree.symbol()。usages()来检查它是否被使用:

public List<Kind> nodesToVisit() {
    // TODO Auto-generated method stub
    return ImmutableList.of(Tree.Kind.CLASS);
}

public void visitNode(Tree ttree) {
    ClassTree tree = (ClassTree) ttree;
    List<IdentifierTree> itl = tree.symbol().usages();
    System.out.println(itl.size());
}

当我在这里测试规则时:

public class Class1 {

}

public class Class2 {

}

public class Class3 extends Class1 {

}

Class1用法= 1 Class2和Class 3用法= 0;

只有在一个单独的类中将三个类定义在一个文件中时,这才有效。 当我在声纳Class1中测试它时,Class2和Class3是项目的分离类,结果是:usages = 0表示Class1,Class2和Class3,即使Class1正在被Class3扩展。

我该如何解决?

提前致谢

1 个答案:

答案 0 :(得分:0)

您无法根据SonarJava语义引擎编写此类规则。您通过tree.symbol().usages()访问的用法仅指当前正在分析的文件中的用法。

其他文件中的其他用法(如类型扩展名)无法识别或收集,因此目前无法使用SonarJava API轻松实现您尝试实施的规则。

相关问题