【问题标题】:sonarqube java rule not extended classes should be finalsonarqube java规则不扩展类应该是最终的
【发布时间】:2018-04-20 11:05:08
【问题描述】:

我已经编写了一个规则来检查一个非扩展类是否是最终的。 我已经使用 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 是项目的独立类,结果是:即使 Class1 被 Class3 扩展,Class1、Class2 和 Class3 的用法 = 0。

我该如何解决?

提前致谢

【问题讨论】:

  • 他们也有不同的包吗?他们都有公共标识符吗?

标签: java sonarqube rules


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2013-09-26
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多