Sonarqube - 如何在代码中检查Logger或LoggerFactory

时间:2017-04-20 02:50:25

标签: java sonarqube

我想使用Java在Sonarqube中构建一个自定义规则,可以捕获这种情况:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
代码中的

或单词LoggerLogFactory。 我应该使用visitLiteral()吗?

1 个答案:

答案 0 :(得分:1)

您有多种选择来实现这一目标,最简单的方法是编写扩展org.sonar.plugins.java.api.IssuableSubscriptionVisitor的自定义规则,遵循tutorial中的描述(正如@ user7790438在评论中所完美指出的那样)你的问题......你可能需要调整其中描述的内容,但它会为你提供基础知识),并注册到Tree.Kind.Identifier个节点。

然后,一旦访问所有标识符节点,只需将给定节点转换为 org.sonar.plugins.java.api.tree.IdentifierTree,并检索他们的name()。从那里,您可以检查它是否被称为LoggerLoggerFactory

另一种方法可能是订阅Tree.Kind.IMPORT树,只需检查合格的标识符。但是使用星级导入会使其效率降低,并且不会让您找到所有出现的内容。

为了您的信息,您不能访问文字,因为您最终只会访问该语言的字面值(字符串,整数,双精度,布尔值等),如方法名称建议...