2016-04-27 51 views
0

我正在開發Intellij想法的插件。我堅持在聲明後插入一段代碼。Intellij想法插件:Psi類

對於如:

mHelper.launchPurchaseflow(str,str,str); 

我需要找到元素launchPurchaseflow並添加一段代碼,statement.I使用PsiElement和字符串匹配後得到相應的字符串。

現在我的PsiElement = mhelper.launchPurchaseFlow。 如果我使用

psiClass.addAfter(newElement, PsiElement.getContext()); 

它只是試圖添加結束paranthesis.So其彈出後,我的新元素作爲不正確的語句。

對於如:

其在位置

mHelper.launchPurchaseflow(str,str,str)//newElement; 

增加但我需要在

mHelper.launchPurchaseflow(str,str,str); // new Element. 

回答

0

添加很難給你一個正確的答案,因爲你不向我們展示如何插入新文本,但假設您有一個變量PsiElement myElement,其中包含表達式mHelper.launchPurchaseflow(str,str,str)(不含分號)。 如果您在元素上調用getParent(),你將有可能進入聲明表示方法調用:

// Should represent "mHelper.launchPurchaseflow(str,str,str);" with the semicolon 
PsiElement parent = myElement.getParent(); 

如果這個節點之後添加你的代碼,它應該產生一個有效的語句。

另外,如果getParent()不返回PsiStatement和你想一定有完整的語句,你可以這樣做:

PsiElement statement = PsiTreeUtil.getParentOfType(myElement, PsiStatement.class);