我想使用 Java 在 Sonarqube 中构建一个自定义规则,可以捕获这种情况的发生:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
或代码中的单词
Logger
或 LogFactory
。
我应该为此使用 visitLiteral()
吗?
您有多种选择来实现这一目标,最简单的一种是按照
tutorial中的描述编写扩展
org.sonar.plugins.java.api.IssuableSubscriptionVisitor
的自定义规则(正如@user7790438在您的问题的评论中完美指出的那样......您可能必须适应其中描述的内容,但它为您提供了基础知识),并注册到 Tree.Kind.Identifier
节点。
然后,一旦访问了所有 Identifier 节点,只需将给定节点转换为
org.sonar.plugins.java.api.tree.IdentifierTree
,并取回他们的name()
。从那里,您可以检查它是否称为 Logger
或 LoggerFactory
。
另一种方法可能是订阅
Tree.Kind.IMPORT
树并简单地检查合格的标识符。但是使用星号导入会降低效率,并且不允许您找到所有出现的情况。
供您参考,您无法访问文字,因为您最终只会访问该语言的文字(字符串、整数、双精度数、布尔值等),就像方法名称建议的那样...