package com.chrisfolger.needsmoredojo.intellij.actions; import com.chrisfolger.needsmoredojo.core.amd.importing.UnusedImportBlockEntry; import com.chrisfolger.needsmoredojo.core.amd.importing.UnusedImportsRemover; import com.chrisfolger.needsmoredojo.core.settings.DojoSettings; import com.chrisfolger.needsmoredojo.core.util.PsiFileUtil; 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.components.ServiceManager; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import java.util.List; /** * runs when the user wants to remove all unused imports */ public class UnusedImportsAction extends JavaScriptAction { protected boolean deleteMode = false; public static void removeUnusedImports(PsiFile psiFile) { final UnusedImportsRemover detector = new UnusedImportsRemover(); final List<UnusedImportBlockEntry> results = detector.filterUsedModules(psiFile, ServiceManager.getService(psiFile.getProject(), DojoSettings.class).getRuiImportExceptions()); int numDeleted = 0; for(UnusedImportBlockEntry entry : results) { if(entry.getDefines() == null || entry.getParameters() == null || entry.getDefines().size() == 0 || entry.getParameters().size() == 0) { continue; } UnusedImportsRemover.RemovalResult result = detector.removeUnusedParameters(entry.getParameters(), entry.getDefines()); numDeleted += result.getElementsToDelete().size(); if(result.getElementsToDelete().size() > 0) { Notifications.Bus.notify(new Notification("needsmoredojo", "Remove Unused Imports", result.getDeletedElementNames(), NotificationType.INFORMATION)); } } if(numDeleted == 0) { Notifications.Bus.notify(new Notification("needsmoredojo", "Remove Unused Imports", "No unused imports were detected to delete", NotificationType.INFORMATION)); } } public void actionPerformed(@NotNull final AnActionEvent e) { final PsiFile psiFile = PsiFileUtil.getPsiFileInCurrentEditor(e.getProject()); if(this.deleteMode) { CommandProcessor.getInstance().executeCommand(psiFile.getProject(), new Runnable() { @Override public void run() { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { removeUnusedImports(psiFile); } }); } }, "Remove Unused Imports", "Remove Unused Imports"); } } }