如何在 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 文件,其中定义了它。
我想构建一个 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