繁体   English   中英

IntelliJ IDEA插件开发:如何修改Psi树?

[英]IntelliJ IDEA plugin development: how to modify the Psi tree?

我想知道创建新PsiElement实例并将它们添加到Psi树的“正确”方法是什么。

我查看了JetBrains提供的教程( http://www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support/quick_fix.html )。 他们在那里使用的方法似乎适合他们引入的简单属性语言,但我不认为这是采用更复杂语法的方式,我想添加一个不能出现在PsiFile根级别的子PsiElement。

对我来说最好的是能够将文本片段解析为元素并将其添加到树中。 我试着这样做:

myLangTopElement.getNode().addLeaf(MyLangTypes.CHILD_EXPRESSION, "fish = '42'", null);

它实际上似乎工作 - 文本被添加到文档并创建一个节点但是当我在编辑器中编辑引号内的文本时 - 会抛出一些例外...

我究竟做错了什么? 添加新元素的正确方法是什么?

PSI很复杂:(。通常的方法是从精心准备的文本(PsiFileFactory#createFileFromText)创建一个完整的文件,从中提取你需要添加到树中的PSI元素,然后调用PsiElement #add / addBefore / addAfter将提取的元素作为参数传递。如果你的PSI元素是AST的包装器(即AstDelegatePsiElement),它的add *方法已经为不抛出的异常做了必要的魔术。

您可以从IDEA CE源学习GrCreateSubclassAction#startTemplate作为示例,并调用它调用的createCodeReferenceElementFromText的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM