java - 在编写 Sonar 插件规则时,如何获取另一个java源文件中定义的Tree.Kind.VARIABLE的类型?

标签 java sonarqube sonarqube5.1

我正在编写 Sonar 插件规则,如何获得在另一个java源文件中定义的Tree.Kind.VARIABLE的类型?

//Cursor.java:
public interface Cursor extends Closeable {
    // TODO.
};

//Engine.java:
public class Engine extends HandlerThread {
    private Cursor mCursor;
    public List<Suggestion> getSuggestions(){
        Cursor photoCursor = contentResolver.query();
        // TODO.
    }
}

Sonar 插件规则分析Engine.java时,如何获取mCursor的类型?和 photoCursor 的类型?

我的代码是:

public class VarCheck extends IssuableSubscriptionVisitor
{

    @Override
    public List<Tree.Kind> nodesToVisit()
    {
        return ImmutableList.of(Tree.Kind.VARIABLE);
    }

    @Override
    public void visitNode(Tree tree)
    {
        if (tree.is(Tree.Kind.VARIABLE))
        {
            VariableTree vart = (VariableTree)tree;
            System.out.println("visitNode 02: " + vart.symbol().name() +" "+ vart.symbol().type().name());

            if (vart.symbol().isVariableSymbol())
            {
                VariableSymbol varSymbol = (VariableSymbol)vart.symbol();
                System.out.println("visitNode 03: " + varSymbol.name() 
                                +" "+ varSymbol.type().name()
                                +" "+ varSymbol.type().isSubtypeOf("java.io.Closeable"));
                // Why varSymbol.type().name() is unknownSymbol?
            }

//          vart.accept(visitor);

        }
    }
}

最佳答案

订阅Tree.Kind.VARIABLE,将节点转换为VariableTree,访问该VariableTree的symbol().type()。

关于java - 在编写 Sonar 插件规则时,如何获取另一个java源文件中定义的Tree.Kind.VARIABLE的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231820/

相关文章:

java - Sonar-checkstyle 插件未按预期工作

java - 无法启动 SonarQube,无法启动 JVM : Permission denied (13)

scala - sbt : findbugs, scalastyle 中的 SonarQube 运行者

java - Spring-通过链接传递参数

java - Namenode恶魔启动错误

java - 如何使用 postman 测试获得代码覆盖率

sonarqube - SonarQube 6.2升级到6.4缺少项目和用户

sonarqube - 使用 SonarQube 进行多模块项目分析

java - PropertyResourceBundle 与 ListResourceBundle 冲突

java - 设置RecyclerView不可见