我正在开发一个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.
答案 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);