2016-04-27 119 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);