Intellij idea插件:Psi Classes

时间:2016-04-27 06:18:18

标签: intellij-idea intellij-plugin

我正在开发一个Intellij想法的插件。我坚持在声明后插入一段代码。

例如:

mHelper.launchPurchaseflow(str,str,str);

我需要找到元素launchPurchaseflow并在该语句之后添加一段代码。我使用PsiElement和字符串匹配器来获取相应的字符串。

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

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

它只是在关闭paranthesis之后尝试添加。因此它将我的新元素弹出为Incorrect Statement。

例如:

在位置添加

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

但我需要添加

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

1 个答案:

答案 0 :(得分:1)

由于您未向我们展示您是如何插入新文字的,因此很难给出正确的答案,但我们假设您的变量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);