blob: d2ee781b07ac9001c76ec0f13c874b47e192b031 [file] [log] [blame]
package com.intellij.openapi.roots.ui.configuration.projectRoot.daemon;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.impl.OrderEntryUtil;
import com.intellij.openapi.roots.ui.configuration.ModuleEditor;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* @author nik
*/
public class UsageInModuleClasspath extends ProjectStructureElementUsage {
private final StructureConfigurableContext myContext;
private final ModuleProjectStructureElement myContainingElement;
@Nullable private final DependencyScope myScope;
private final ProjectStructureElement mySourceElement;
private final Module myModule;
public UsageInModuleClasspath(@NotNull StructureConfigurableContext context,
@NotNull ModuleProjectStructureElement containingElement,
ProjectStructureElement sourceElement,
@Nullable DependencyScope scope) {
myContext = context;
myContainingElement = containingElement;
myScope = scope;
myModule = containingElement.getModule();
mySourceElement = sourceElement;
}
@Override
public ProjectStructureElement getSourceElement() {
return mySourceElement;
}
@Override
public ModuleProjectStructureElement getContainingElement() {
return myContainingElement;
}
public Module getModule() {
return myModule;
}
@Override
public String getPresentableName() {
return myModule.getName();
}
@Override
public PlaceInProjectStructure getPlace() {
return new PlaceInModuleClasspath(myContext, myModule, myContainingElement, mySourceElement);
}
@Override
public int hashCode() {
return myModule.hashCode()*31 + mySourceElement.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof UsageInModuleClasspath && myModule.equals(((UsageInModuleClasspath)obj).myModule)
&& mySourceElement.equals(((UsageInModuleClasspath)obj).mySourceElement);
}
@Override
public Icon getIcon() {
return ModuleType.get(myModule).getIcon();
}
@Override
public void removeSourceElement() {
if (mySourceElement instanceof LibraryProjectStructureElement) {
ModuleStructureConfigurable.getInstance(myModule.getProject())
.removeLibraryOrderEntry(myModule, ((LibraryProjectStructureElement)mySourceElement).getLibrary());
}
}
@Nullable
@Override
public String getPresentableLocationInElement() {
return myScope != null && myScope != DependencyScope.COMPILE ? "[" + StringUtil.decapitalize(myScope.getDisplayName()) + "]" : null;
}
@Override
public void replaceElement(final ProjectStructureElement newElement) {
final ModuleEditor editor = myContext.getModulesConfigurator().getModuleEditor(myModule);
if (editor != null) {
final ModifiableRootModel rootModel = editor.getModifiableRootModelProxy();
OrderEntryUtil.replaceLibrary(rootModel, ((LibraryProjectStructureElement)mySourceElement).getLibrary(),
((LibraryProjectStructureElement)newElement).getLibrary());
myContext.getDaemonAnalyzer().queueUpdate(new ModuleProjectStructureElement(myContext, myModule));
}
}
}