簡體   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