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