package com.chrisfolger.needsmoredojo.core.util; import com.intellij.lang.ASTFactory; import com.intellij.lang.ASTNode; import com.intellij.lang.javascript.JSTokenTypes; import com.intellij.lang.javascript.psi.JSElement; import com.intellij.lang.javascript.psi.JSElementFactory; import com.intellij.lang.javascript.psi.impl.JSChangeUtil; import com.intellij.lang.javascript.psi.impl.JSElementImpl; import com.intellij.lang.javascript.psi.impl.JSPsiImplUtils; import com.intellij.lang.javascript.psi.util.JSUtils; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementFactory; import com.intellij.psi.impl.source.tree.LeafElement; import javax.swing.text.AbstractDocument; public class JSUtil { 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(); } public static PsiElement addStatementAfterElement(PsiElement parent, PsiElement element, String statement, String whitespace) { if(!whitespace.equals("")) { //parent.addAfter(JSChangeUtil.createExpressionFromText(parent.getProject(), statement).getPsi(), comma); } return null; } public static PsiElement addStatementBeforeElement(PsiElement parent, PsiElement element, String statement) { return addStatementBeforeElement(parent, element, statement, "\n\n"); } public static PsiElement createStatement(PsiElement parent, String statement) { ASTNode node = JSChangeUtil.createStatementFromText(parent.getProject(), statement, JSUtils.getDialect(parent.getContainingFile())); return node.getPsi(); } public static PsiElement createExpression(PsiElement parent, String statement) { ASTNode node = JSChangeUtil.createExpressionFromText(parent.getProject(), statement, JSUtils.getDialect(parent.getContainingFile())); return node.getPsi(); } public static PsiElement addStatement(PsiElement parent, String statement) { ASTNode node = JSChangeUtil.createStatementFromText(parent.getProject(), statement, JSUtils.getDialect(parent.getContainingFile())); parent.add(node.getPsi()); return node.getPsi(); } public static PsiElement addExpression(PsiElement parent, String statement) { ASTNode node = JSChangeUtil.createExpressionFromText(parent.getProject(), statement, JSUtils.getDialect(parent.getContainingFile())); parent.add(node.getPsi()); return node.getPsi(); } }