我的自定义SonarQube插件在本地SonarQube服务器上运行并且运行正常。现在我想添加更多东西。我对编写自己的声纳规则感兴趣,该规则检查非弃用的构造函数是否用于一个类。
可能的构造函数调用:
@Deprecated
public ExampleClass(String a)
{
//deprecated/old/wrong stuff happening
}
public ExampleClass(String a, String b)
{
//correct stuff happening
}
我已经在该州,只会访问Method
个笔记。
现在我想知道如何查看使用了哪个new ExampleClass
表达式?
答案 0 :(得分:0)
找到了一个有效的解决方案 这是我做的:
nodesToVisit
设为Tree.Kind.ASSIGNMENT
Tree.Kind.NEW_CLASS
identifier
是否为ExampleClass.class.getSimpleName()
代码:
AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree;
if ( assignment.expression().is(Tree.Kind.NEW_CLASS) )
{
NewClassTreeImpl expression = (NewClassTreeImpl) assignment.expression();
IdentifierTreeImpl identifier = (IdentifierTreeImpl) expression.identifier();
if ( StringUtils.equals(identifier.name(), ExampleClass.class.getSimpleName()) )
{
ArgumentListTreeImpl arguments = (ArgumentListTreeImpl) expression.arguments();
if ( arguments.size() != 2 )
{
reportIssue(expression, "Use the 2 parameter constructor call when creating new ExampleClass objects!");
}
else if ( StringUtils.indexOfAny(arguments.get(1).symbolType().name(), POSSIBLE_PARAMETER_TYPES) == -1 )
{
reportIssue(expression, "The second parameter must be from type String");
}
}
}
如果您发现我的规则有任何改进,请告诉我。谢谢!