mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
'Project Structure' dialog: process possible usages from unloaded modules
This is also needed to avoid reporting project libraries used from unloaded modules only as unused.
This commit is contained in:
+29
-4
@@ -18,22 +18,23 @@ package com.intellij.openapi.roots.ui.configuration;
|
||||
import com.intellij.compiler.ModuleCompilerUtil;
|
||||
import com.intellij.compiler.ModuleSourceSet;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.UnloadedModuleDescription;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ModuleRootModel;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.Chunk;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -123,6 +124,30 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement {
|
||||
|
||||
@Override
|
||||
public List<ProjectStructureElementUsage> getUsagesInElement() {
|
||||
Collection<UnloadedModuleDescription> unloadedModules = ModuleManager.getInstance(myContext.getProject()).getUnloadedModuleDescriptions();
|
||||
if (!unloadedModules.isEmpty()) {
|
||||
MultiMap<Module, UnloadedModuleDescription> dependenciesInUnloadedModules = new MultiMap<>();
|
||||
for (UnloadedModuleDescription unloaded : unloadedModules) {
|
||||
for (String moduleName : unloaded.getDependencyModuleNames()) {
|
||||
Module depModule = myContext.getModulesConfigurator().getModuleModel().findModuleByName(moduleName);
|
||||
if (depModule != null) {
|
||||
dependenciesInUnloadedModules.putValue(depModule, unloaded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<ProjectStructureElementUsage> usages = new ArrayList<>();
|
||||
for (Map.Entry<Module, Collection<UnloadedModuleDescription>> entry : dependenciesInUnloadedModules.entrySet()) {
|
||||
usages.add(new UsagesInUnloadedModules(myContext, this, new ModuleProjectStructureElement(myContext, entry.getKey()),
|
||||
entry.getValue()));
|
||||
}
|
||||
|
||||
//currently we don't store dependencies on project libraries from unloaded modules in the model, so suppose that all the project libraries are used
|
||||
for (Library library : myContext.getProjectLibrariesProvider().getModifiableModel().getLibraries()) {
|
||||
usages.add(new UsagesInUnloadedModules(myContext, this, new LibraryProjectStructureElement(myContext, library), unloadedModules));
|
||||
}
|
||||
return usages;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.openapi.roots.ui.configuration.projectRoot.daemon;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.module.UnloadedModuleDescription;
|
||||
import com.intellij.openapi.roots.ui.configuration.GeneralProjectSettingsElement;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
import com.intellij.ui.navigation.Place;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class UsagesInUnloadedModules extends ProjectStructureElementUsage {
|
||||
private final StructureConfigurableContext myContext;
|
||||
private final GeneralProjectSettingsElement myContainingElement;
|
||||
private final ProjectStructureElement mySourceElement;
|
||||
private final String myPresentableName;
|
||||
|
||||
public UsagesInUnloadedModules(StructureConfigurableContext context, GeneralProjectSettingsElement element,
|
||||
ProjectStructureElement sourceElement, Collection<UnloadedModuleDescription> unloadedModules) {
|
||||
myContext = context;
|
||||
myContainingElement = element;
|
||||
mySourceElement = sourceElement;
|
||||
myPresentableName =
|
||||
unloadedModules.size() > 1 ? unloadedModules.size() + " Unloaded Modules"
|
||||
: "Unloaded Module '" + ObjectUtils.notNull(ContainerUtil.getFirstItem(unloadedModules)).getName() + "'";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectStructureElement getSourceElement() {
|
||||
return mySourceElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectStructureElement getContainingElement() {
|
||||
return myContainingElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPresentableName() {
|
||||
return myPresentableName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlaceInProjectStructure getPlace() {
|
||||
Place configurablePlace = ProjectStructureConfigurable.getInstance(myContext.getProject()).createProjectConfigurablePlace();
|
||||
return new PlaceInProjectStructureBase(myContext.getProject(), configurablePlace, myContainingElement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSourceElement() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void replaceElement(ProjectStructureElement newElement) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return AllIcons.Modules.UnloadedModule;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof UsagesInUnloadedModules;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user