package com.chrisfolger.needsmoredojo.intellij.actions; import com.chrisfolger.needsmoredojo.core.amd.define.DefineResolver; import com.chrisfolger.needsmoredojo.core.amd.define.organizer.AMDImportOrganizer; import com.chrisfolger.needsmoredojo.core.amd.define.organizer.SortingResult; import com.chrisfolger.needsmoredojo.core.amd.importing.InvalidDefineException; import com.chrisfolger.needsmoredojo.core.util.PsiFileUtil; import com.intellij.ide.highlighter.HtmlFileType; import com.intellij.lang.javascript.psi.JSCallExpression; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import java.util.ArrayList; import java.util.List; import java.util.Set; /** * this is an action that takes a bunch of AMD imports and organizes them alphabetically */ public class OrganizeAMDImportsAction extends JavaScriptAction { @Override public void actionPerformed(AnActionEvent e) { final PsiFile psiFile = PsiFileUtil.getPsiFileInCurrentEditor(e.getProject()); final AMDImportOrganizer organizer = new AMDImportOrganizer(); CommandProcessor.getInstance().executeCommand(psiFile.getProject(), new Runnable() { @Override public void run() { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { int totalSize = 0; DefineResolver resolver = new DefineResolver(); Set<JSCallExpression> expressions = resolver.getAllImportBlocks(psiFile); for(JSCallExpression expression : expressions) { List<PsiElement> blockDefines = new ArrayList<PsiElement>(); List<PsiElement> blockParameters = new ArrayList<PsiElement>(); try { resolver.addDefinesAndParametersOfImportBlock(expression, blockDefines, blockParameters); } catch (InvalidDefineException e1) {} if(blockDefines.size() == 0 || blockParameters.size() == 0) { continue; } SortingResult result = organizer.sortDefinesAndParameters(blockDefines, blockParameters); totalSize += blockDefines.size(); organizer.reorder(blockDefines.toArray(new PsiElement[]{}), result.getDefines(), true, result); organizer.reorder(blockParameters.toArray(new PsiElement[]{}), result.getParameters(), false, result); } if(totalSize == 0) { Notifications.Bus.notify(new Notification("needsmoredojo", "Organize AMD Imports", "There were no AMD imports", NotificationType.WARNING)); return; } else { Notifications.Bus.notify(new Notification("needsmoredojo", "Organize AMD Imports", "Completed", NotificationType.INFORMATION)); } } }); } }, "Organize AMD Imports", "Organize AMD Imports"); } }