如何在 intellij API 中探索 PSITree?

How to explore a PSITree in intellij API?

我想构建一个 Intellij 插件来识别带有某些注释的 scala classes。

例如:

@RunWith(classOf[SimpleTestRunner])

当我为最后一个代码段使用 PSIViewer 插件构建 PSITree 时,我得到了这棵树

ScalaFile:Dummy.scala(0,36)
  PsiErrorElement:Wrong top statement declaration(0,0)
    <empty list>
  PsiElement(@)('@')(0,1)
  MethodCall(1,35)
    ReferenceExpression: RunWith(1,8)
      PsiElement(identifier)('RunWith')(1,8)
    ArgumentList(8,35)
      PsiElement(()('(')(8,9)
      GenericCall(9,34)
        ReferenceExpression: classOf(9,16)
          PsiElement(identifier)('classOf')(9,16)
        TypeArgumentsList(16,34)
          PsiElement([)('[')(16,17)
          SimpleType: SimpleTestRunner(17,33)
            CodeReferenceElement: SimpleTestRunner(17,33)
              PsiElement(identifier)('SimpleTestRunner')(17,33)
          PsiElement(])(']')(33,34)
      PsiElement())(')')(34,35)

现在,我正在尝试使用导航元素 "ReferenceExpression,ArgumentList,GenericCall" 访问子项,我知道如何递归访问树,但我不知道要查找什么。

那么有人能告诉我代表这些元素的接口是什么吗?或者是否有某种实用程序 class 可以帮助我这样做?

我假设你有source code of the Scala plugin

接口(或实际上是 Scala 特性)在 org.jetbrains.plugins.scale.lang.psi.api 包中定义。例如,您可以在那里找到 ./expr/ScGenericCall.scala。树中的每个元素都有一个对应的 Sc.scala 文件,其中定义了它。