package krasa.console; import org.apache.commons.lang.ClassUtils; import com.intellij.lang.Language; import com.intellij.lang.xml.XMLLanguage; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; public class FormatUtils { private static final Logger LOG = Logger.getInstance(FormatUtils.class); static String reformat(final Project project, final String actual) { PsiFile actualPsiFile = null; if (isJson(actual)) { Language instance = null; try { instance = (Language) ClassUtils.getClass("com.intellij.json.JsonLanguage").getField("INSTANCE").get( null); actualPsiFile = reformat(project, actual, instance); } catch (Throwable e) { LOG.info(e); } } else { actualPsiFile = reformat(project, actual, XMLLanguage.INSTANCE); } if (actualPsiFile == null) { return actual; } return actualPsiFile.getText(); } private static PsiFile reformat(final Project project, final String actual, Language instance) { final PsiFile actualPsiFile; actualPsiFile = PsiFileFactory.getInstance(project).createFileFromText("temp", instance, actual); WriteCommandAction.runWriteCommandAction(project, new Runnable() { @Override public void run() { try { CodeStyleManager.getInstance(project).reformatRange(actualPsiFile, 0, actual.length()); } catch (Exception e) { e.printStackTrace(); } } }); return actualPsiFile; } private static boolean isJson(String actual) { return actual.startsWith("{"); } }