java SonarQube。检测超类中带有特定注释的重写方法的情况。(此外部API)
现在,我正在尝试为下一个案例使用SonarQube实现自定义规则。例如,我有下一节课:
public class SuperClass{
@CannotOverrideAnnotation
protected void methodCanNotBeOverrided(){}
protected void methodCanBeOverrided(){}
}
我想检测有人试图覆盖无法覆盖的方法的情况
public class ChildClass extend SuperClass{
protected void methodCanNotBeOverrided(){} // Noncompliant
protected void methodCanBeOverrided(){} //Compliant
}
首先,我想我必须访问每一棵MethodTree并获得它的所有者,就像:
@Override
protected void visitNode(MethodTree method){
Tree declaration = method.symbol().owner().declaration();
if (declaration.is(Tree.Kind.CLASS)) {
TypeTree superClass = ((ClassTree) declaration).superClass();
}
}
好的,我有超类,我可以提取完全限定的名称并使用反射API。。。。但也许有其他方法可以通过SonarqubeAPI实现呢罢工>
我发现这个注释的RetentionPolicy等于源代码,这意味着我现在不知道如何实现这个规则,反射API不能帮助我。。。有人能帮我想一想这东西吗
我还发现JavaSymbol.MethodJavaSymbol
中有一个非常有用的方法,比如overriddenSymbol
,但是这个类不属于org。声纳。插件。JAVAapi包,根据link我不能使用它。
组织。声纳。插件。JAVAapi包包含类似的接口符号,但所有语言只有通用方法,Java没有特定方法
我将非常乐意为您提供任何帮助
另外,我想强调的是,超类是一个外部库。我没有机会在那里改变什么
共 (0) 个答案