sonarqube java 规则未扩展 类 应该是最终的
sonarqube java rule not extended classes should be final
我编写了一个规则来检查未扩展的 class 是否是最终的。
我已经使用 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;
只有当我在一个文件中定义三个 class 时,这才有效,在一个 class 中。
当我在声纳 Class1 中对此进行测试时,Class2 和 Class3 与项目的 classes 分开,结果是:usages = 0 for Class1、Class2 和 Class3 即使 Class1 被 Class3 扩展。
我该如何解决?
提前致谢
您将无法基于 SonarJava 语义引擎编写此类规则。您正在访问的用法 tree.symbol().usages()
仅指当前正在分析的文件中的用法。
无法识别或收集其他文件中的其他用法(如类型扩展),因此目前无法使用 SonarJava API 轻松实现您尝试实现的规则。
我编写了一个规则来检查未扩展的 class 是否是最终的。 我已经使用 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;
只有当我在一个文件中定义三个 class 时,这才有效,在一个 class 中。 当我在声纳 Class1 中对此进行测试时,Class2 和 Class3 与项目的 classes 分开,结果是:usages = 0 for Class1、Class2 和 Class3 即使 Class1 被 Class3 扩展。
我该如何解决?
提前致谢
您将无法基于 SonarJava 语义引擎编写此类规则。您正在访问的用法 tree.symbol().usages()
仅指当前正在分析的文件中的用法。
无法识别或收集其他文件中的其他用法(如类型扩展),因此目前无法使用 SonarJava API 轻松实现您尝试实现的规则。