【问题标题】:Intellij Idea Plugin, Create Kotlin PSI VisitorIntellij Idea 插件,创建 Kotlin PSI 访问者
【发布时间】:2018-09-04 12:14:35
【问题描述】:

我正在创建一个访问者来解析KtFile 中的所有方法/属性。问题是,我在调试器中只使用了一个 @override 方法,即visitKtFile,尽管我在另一种方法中也设置了一些其他的刹车点,请找到附加的代码访客。

public class TestVisitor extends KtVisitorVoid {

@Override
public void visitProperty(@NotNull KtProperty property) {
    super.visitProperty(property);
}

@Override
public void visitClass(@NotNull KtClass klass) {
    super.visitClass(klass);
}

@Override
public void visitNamedFunction(@NotNull KtNamedFunction function) {
    super.visitNamedFunction(function);
}

@Override
public void visitKtElement(@NotNull KtElement element) {
    super.visitKtElement(element);
}

@Override
public void visitKtFile(@NotNull KtFile file) {
    super.visitKtFile(file);
}

@Override
public void visitDeclaration(@NotNull KtDeclaration dcl) {
    super.visitDeclaration(dcl);
}
}

这是Action的代码,

public class HelloAction extends AnAction {
public HelloAction() {
    super("Hello");
}

public void actionPerformed(AnActionEvent event) {
    PsiFile psiFile = event.getData(PlatformDataKeys.PSI_FILE);
    TestVisitor visitor = new TestVisitor();
    psiFile.accept(visitor);
}
}

这是我要解析的测试类的代码。根据我所拥有的结构,我希望能够使用 visitProperty 方法 2 次。现在根本没有发生。

class TestC {
var s = true
val t = 1

fun testLog(): String {
    var test = ""
    test = "Alex"
    return test
}
}

感谢为这个令人惊叹的 Intellij Idea 平台创建插件的任何帮助。谢谢。

【问题讨论】:

    标签: kotlin intellij-plugin


    【解决方案1】:

    KtVisitorVoid 是一个非递归访问者类。如果要访问整棵树,则需要使用KtTreeVisitorVoid 作为访问者的基类。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多