有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案