gpt4 book ai didi

java - Sonarqube:跨文件自定义java规则?

转载 作者:行者123 更新时间:2023-11-30 10:40:18 28 4
gpt4 key购买 nike

我们正在寻求实现一个自定义规则,该规则涉及必须在不同文件之间导航语法树。像这样的东西:

ClassA --> 私有(private) ClassB 字段 --> ClassB --> 私有(private) ClassC 字段 --> ClassC ...

但是,我不确定是否有可能这样做。我查看了示例存储库以及已编写的现有 Sonar 检查,但大多数(如果不是全部)似乎仅限于文件范围。我想知道是否有办法解决这个问题?

我目前尝试从类的符号类型中获取声明变量,如下所示:

public void visitNode(final Tree tree) {
final ClassTree clazz = (ClassTree) tree;

final VariableTree memberField = tree.members().get(0);
final JavaSymbol memberClassSymbol = (JavaSymbol) memberField.symbol().type().symbol();
final ClassTree memberClass = memberClassSymbol.declaration();
}

但是,该字段为空。似乎在我尝试过的每一种情况下都是如此。有没有其他方法可以使用自定义 Sonar 扩展来处理此任务?

谢谢。

最佳答案

这在语法级别是不可能的:分析是逐个文件完成的。

一旦文件被分析,语法树就会被删除,分析会转到下一个文件。由于无法保证分析文件的顺序,您也无法存储一些语法节点供以后使用。

但是,使用分析字节码的语义分析,根据您想要实现的目标,您可以依赖语义 API 并检测类 B 是否具有 C 类型的字段(使用符号和类型)等。

关于java - Sonarqube:跨文件自定义java规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com