下面列出了com.intellij.psi.PsiElement#addBefore ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void doRefactor(JSLiteralExpression className, JSExpression[] mixins, List<JSExpressionStatement> methods, JSElement originalReturnStatement, JSVarStatement declarationVariable)
{
PsiElement parent = originalReturnStatement.getParent();
JSVariable variable = declarationVariable.getVariables()[0];
String declareStatement = buildUtilPatternString(className, mixins, methods, variable.getName());
PsiElement declareExpression = JSUtil.createStatement(parent, declareStatement);
parent.addBefore(declareExpression, originalReturnStatement);
// delete all of the old code
for(JSExpressionStatement method : methods)
{
method.delete();
}
originalReturnStatement.delete();
declarationVariable.delete();
}
@Override
public void invoke(@NotNull final Project project, Editor editor, final PsiFile file) throws IncorrectOperationException {
PsiWhiteSpace newline = HaskellElementFactory.createNewLine(project);
HaskellPpragma ppragma = HaskellElementFactory.createPpragmaFromText(
project, "{-# ANN module (\"HLint: ignore " + hint + "\"::String) #-}");
FileASTNode fileNode = file.getNode();
ASTNode[] nodes;
ASTNode node;
// If the user has imports, place the pragma after them.
node = fileNode.findChildByType(HaskellTypes.BODY);
if (node != null) {
nodes = node.getChildren(TokenSet.create(HaskellTypes.IMPDECL));
if (nodes.length > 0) {
PsiElement element = node.getPsi();
element.addBefore(newline, element.addAfter(ppragma, nodes[nodes.length - 1].getPsi()));
return;
}
}
// If the user has a module declaration, place the pragma after it.
node = fileNode.findChildByType(HaskellTypes.MODULEDECL);
if (node != null) {
file.addBefore(newline, file.addAfter(ppragma, node.getPsi()));
return;
}
// If the user has any existing pragmas, place the pragma after them.
nodes = fileNode.getChildren(TokenSet.create(HaskellTypes.PPRAGMA));
if (nodes.length > 0) {
file.addBefore(newline, file.addAfter(ppragma, nodes[nodes.length - 1].getPsi()));
return;
}
// Otherwise, just insert the pragma at the top of the file.
file.addAfter(newline, file.addBefore(ppragma, file.getFirstChild()));
}
@Nullable
public PsiElement addDeclaration(CSharpIntroduceOperation operation, PsiElement declaration)
{
PsiElement anchor = operation.isReplaceAll() ? findAnchor(operation.getOccurrences()) : findAnchor(operation.getInitializer());
if(anchor == null)
{
CommonRefactoringUtil.showErrorHint(operation.getProject(), operation.getEditor(), RefactoringBundle.getCannotRefactorMessage(null), RefactoringBundle.getCannotRefactorMessage(null),
null);
return null;
}
final PsiElement parent = anchor.getParent();
PsiElement psiElement = parent.addBefore(declaration, anchor);
CodeStyleManager.getInstance(declaration.getProject()).reformat(psiElement);
return psiElement;
}
public static PsiElement addStatementBeforeElement(PsiElement parent, PsiElement element, String statement, String whitespace)
{
ASTNode node = JSChangeUtil.createStatementFromText(parent.getProject(), statement, JSUtils.getDialect(parent.getContainingFile()));
parent.addBefore(node.getPsi(), element);
if(!whitespace.equals(""))
{
parent.addBefore(JSChangeUtil.createJSTreeFromText(parent.getProject(), whitespace).getPsi(), element);
}
return node.getPsi();
}
private static void addPhpDocTag(@NotNull PhpNamedElement forElement, @NotNull Document document, @NotNull PsiFile file, @NotNull PsiElement beforeElement, @NotNull String annotationClass, @Nullable String tagParameter) {
String phpDocTagName = getQualifiedName(forElement, annotationClass);
if(phpDocTagName == null) {
return;
}
String tagString = "@" + phpDocTagName;
if(tagParameter != null) {
tagString += "(" + tagParameter + ")";
}
PhpDocComment docComment = forElement.getDocComment();
if(docComment != null) {
PsiElement elementToInsert = PhpPsiElementFactory.createFromText(forElement.getProject(), PhpDocTag.class, "/** " + tagString + " */\\n");
if(elementToInsert == null) {
return;
}
PsiElement fromText = PhpPsiElementFactory.createFromText(forElement.getProject(), PhpDocTokenTypes.DOC_LEADING_ASTERISK, "/** \n * @var */");
docComment.addBefore(fromText, docComment.getLastChild());
docComment.addBefore(elementToInsert, docComment.getLastChild());
PsiDocumentManager.getInstance(forElement.getProject()).doPostponedOperationsAndUnblockDocument(document);
PsiDocumentManager.getInstance(forElement.getProject()).commitDocument(document);
return;
}
// new PhpDoc see PhpDocCommentGenerator
docComment = PhpPsiElementFactory.createFromText(forElement.getProject(), PhpDocComment.class, "/**\n " + tagString + " \n */");
if(docComment == null) {
return;
}
PsiElement parent = beforeElement.getParent();
int atOffset = beforeElement.getTextRange().getStartOffset() + 1;
parent.addBefore(docComment, beforeElement);
PsiDocumentManager.getInstance(forElement.getProject()).doPostponedOperationsAndUnblockDocument(document);
PsiElement atElement = file.findElementAt(atOffset);
if (atElement != null) {
PsiElement docParent = PsiTreeUtil.findFirstParent(atElement, true, element -> ((element instanceof PhpDocComment)) || ((element instanceof PhpFile)));
if ((docParent instanceof PhpDocComment)) {
CodeStyleManager.getInstance(forElement.getProject()).reformatNewlyAddedElement(docParent.getParent().getNode(), docParent.getNode());
}
}
PsiDocumentManager.getInstance(forElement.getProject()).doPostponedOperationsAndUnblockDocument(document);
PsiDocumentManager.getInstance(forElement.getProject()).commitDocument(document);
}