mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
added quick-fix to delete all unused libraries (IDEA-99885)
This commit is contained in:
+16
-6
@@ -46,6 +46,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.TreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class BaseLibrariesConfigurable extends BaseStructureConfigurable {
|
||||
@@ -257,14 +258,23 @@ public abstract class BaseLibrariesConfigurable extends BaseStructureConfigurabl
|
||||
}
|
||||
|
||||
public void removeLibrary(@NotNull LibraryProjectStructureElement element) {
|
||||
getModelProvider().getModifiableModel().removeLibrary(element.getLibrary());
|
||||
myContext.getDaemonAnalyzer().removeElement(element);
|
||||
final MyNode node = findNodeByObject(myRoot, element.getLibrary());
|
||||
if (node != null) {
|
||||
removePaths(TreeUtil.getPathFromRoot(node));
|
||||
}
|
||||
removeLibraries(Collections.singletonList(element));
|
||||
}
|
||||
|
||||
public void removeLibraries(@NotNull List<LibraryProjectStructureElement> libraries) {
|
||||
List<TreePath> pathsToRemove = new ArrayList<TreePath>();
|
||||
for (LibraryProjectStructureElement element : libraries) {
|
||||
getModelProvider().getModifiableModel().removeLibrary(element.getLibrary());
|
||||
MyNode node = findNodeByObject(myRoot, element.getLibrary());
|
||||
if (node != null) {
|
||||
pathsToRemove.add(TreeUtil.getPathFromRoot(node));
|
||||
}
|
||||
}
|
||||
myContext.getDaemonAnalyzer().removeElements(libraries);
|
||||
removePaths(pathsToRemove.toArray(new TreePath[pathsToRemove.size()]));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean removeLibrary(final Library library) {
|
||||
final LibraryTable table = library.getTable();
|
||||
|
||||
+22
-1
@@ -41,6 +41,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -148,7 +149,7 @@ public class LibraryProjectStructureElement extends ProjectStructureElement {
|
||||
|
||||
@Override
|
||||
public ProjectStructureProblemDescription createUnusedElementWarning() {
|
||||
final List<ConfigurationErrorQuickFix> fixes = Arrays.asList(new AddLibraryToDependenciesFix(), new RemoveLibraryFix());
|
||||
final List<ConfigurationErrorQuickFix> fixes = Arrays.asList(new AddLibraryToDependenciesFix(), new RemoveLibraryFix(), new RemoveAllUnusedLibrariesFix());
|
||||
return new ProjectStructureProblemDescription("Library '" + StringUtil.escapeXml(myLibrary.getName()) + "'" + " is not used", null, createPlace(),
|
||||
ProjectStructureProblemType.unused("unused-library"), ProjectStructureProblemDescription.ProblemLevel.PROJECT,
|
||||
fixes, false);
|
||||
@@ -225,4 +226,24 @@ public class LibraryProjectStructureElement extends ProjectStructureElement {
|
||||
BaseLibrariesConfigurable.getInstance(myContext.getProject(), myLibrary.getTable().getTableLevel()).removeLibrary(LibraryProjectStructureElement.this);
|
||||
}
|
||||
}
|
||||
|
||||
private class RemoveAllUnusedLibrariesFix extends ConfigurationErrorQuickFix {
|
||||
private RemoveAllUnusedLibrariesFix() {
|
||||
super("Remove All Unused Libraries");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performFix() {
|
||||
BaseLibrariesConfigurable configurable = BaseLibrariesConfigurable.getInstance(myContext.getProject(), LibraryTablesRegistrar.PROJECT_LEVEL);
|
||||
Library[] libraries = configurable.getModelProvider().getModifiableModel().getLibraries();
|
||||
List<LibraryProjectStructureElement> toRemove = new ArrayList<LibraryProjectStructureElement>();
|
||||
for (Library library : libraries) {
|
||||
LibraryProjectStructureElement libraryElement = new LibraryProjectStructureElement(myContext, library);
|
||||
if (myContext.getDaemonAnalyzer().getUsages(libraryElement).isEmpty()) {
|
||||
toRemove.add(libraryElement);
|
||||
}
|
||||
}
|
||||
configurable.removeLibraries(toRemove);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
-10
@@ -141,21 +141,28 @@ public class ProjectStructureDaemonAnalyzer implements Disposable {
|
||||
}
|
||||
|
||||
public void removeElement(ProjectStructureElement element) {
|
||||
myElementWithNotCalculatedUsages.remove(element);
|
||||
myElementsToShowWarningIfUnused.remove(element);
|
||||
myWarningsAboutUnused.remove(element);
|
||||
myProblemHolders.remove(element);
|
||||
final Collection<ProjectStructureElementUsage> usages = mySourceElement2Usages.removeAll(element);
|
||||
if (usages != null) {
|
||||
for (ProjectStructureElementUsage usage : usages) {
|
||||
myProblemHolders.remove(usage.getContainingElement());
|
||||
removeElements(Collections.singletonList(element));
|
||||
}
|
||||
|
||||
public void removeElements(@NotNull List<? extends ProjectStructureElement> elements) {
|
||||
myElementWithNotCalculatedUsages.removeAll(elements);
|
||||
myElementsToShowWarningIfUnused.removeAll(elements);
|
||||
for (ProjectStructureElement element : elements) {
|
||||
myWarningsAboutUnused.remove(element);
|
||||
myProblemHolders.remove(element);
|
||||
final Collection<ProjectStructureElementUsage> usages = mySourceElement2Usages.removeAll(element);
|
||||
if (usages != null) {
|
||||
for (ProjectStructureElementUsage usage : usages) {
|
||||
myProblemHolders.remove(usage.getContainingElement());
|
||||
}
|
||||
}
|
||||
removeUsagesInElement(element);
|
||||
myDispatcher.getMulticaster().problemsChanged(element);
|
||||
}
|
||||
removeUsagesInElement(element);
|
||||
myDispatcher.getMulticaster().problemsChanged(element);
|
||||
reportUnusedElements();
|
||||
}
|
||||
|
||||
|
||||
private void reportUnusedElements() {
|
||||
if (!myElementWithNotCalculatedUsages.isEmpty()) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user