mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEADEV-41212: Created an artifact from a folder, then renamed the artifact and it broke the link with the artifact I extracted it from (90.137)
This commit is contained in:
@@ -16,11 +16,9 @@
|
||||
package com.intellij.packaging.impl.artifacts;
|
||||
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.packaging.artifacts.ArtifactProperties;
|
||||
import com.intellij.packaging.artifacts.ArtifactPropertiesProvider;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
import com.intellij.packaging.artifacts.ModifiableArtifact;
|
||||
import com.intellij.packaging.artifacts.*;
|
||||
import com.intellij.packaging.elements.CompositePackagingElement;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
@@ -37,16 +35,23 @@ public class ArtifactImpl extends UserDataHolderBase implements ModifiableArtifa
|
||||
private String myName;
|
||||
private boolean myBuildOnMake;
|
||||
private String myOutputPath;
|
||||
private final EventDispatcher<ArtifactListener> myDispatcher;
|
||||
private ArtifactType myArtifactType;
|
||||
private Map<ArtifactPropertiesProvider, ArtifactProperties<?>> myProperties;
|
||||
|
||||
public ArtifactImpl(@NotNull String name, @NotNull ArtifactType artifactType, boolean buildOnMake, @NotNull CompositePackagingElement<?> rootElement,
|
||||
String outputPath) {
|
||||
this(name, artifactType, buildOnMake, rootElement, outputPath, null);
|
||||
}
|
||||
public ArtifactImpl(@NotNull String name, @NotNull ArtifactType artifactType, boolean buildOnMake, @NotNull CompositePackagingElement<?> rootElement,
|
||||
String outputPath,
|
||||
EventDispatcher<ArtifactListener> dispatcher) {
|
||||
myName = name;
|
||||
myArtifactType = artifactType;
|
||||
myBuildOnMake = buildOnMake;
|
||||
myRootElement = rootElement;
|
||||
myOutputPath = outputPath;
|
||||
myDispatcher = dispatcher;
|
||||
myProperties = new HashMap<ArtifactPropertiesProvider, ArtifactProperties<?>>();
|
||||
resetProperties();
|
||||
}
|
||||
@@ -86,8 +91,8 @@ public class ArtifactImpl extends UserDataHolderBase implements ModifiableArtifa
|
||||
return Collections.unmodifiableCollection(myProperties.keySet());
|
||||
}
|
||||
|
||||
public ArtifactImpl createCopy() {
|
||||
final ArtifactImpl artifact = new ArtifactImpl(myName, myArtifactType, myBuildOnMake, myRootElement, myOutputPath);
|
||||
public ArtifactImpl createCopy(EventDispatcher<ArtifactListener> dispatcher) {
|
||||
final ArtifactImpl artifact = new ArtifactImpl(myName, myArtifactType, myBuildOnMake, myRootElement, myOutputPath, dispatcher);
|
||||
for (Map.Entry<ArtifactPropertiesProvider, ArtifactProperties<?>> entry : myProperties.entrySet()) {
|
||||
final ArtifactProperties newProperties = artifact.myProperties.get(entry.getKey());
|
||||
//noinspection unchecked
|
||||
@@ -97,7 +102,11 @@ public class ArtifactImpl extends UserDataHolderBase implements ModifiableArtifa
|
||||
}
|
||||
|
||||
public void setName(@NotNull String name) {
|
||||
String oldName = myName;
|
||||
myName = name;
|
||||
if (myDispatcher != null) {
|
||||
myDispatcher.getMulticaster().artifactChanged(this, oldName);
|
||||
}
|
||||
}
|
||||
|
||||
@NonNls @Override
|
||||
|
||||
+9
-7
@@ -52,7 +52,7 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo
|
||||
@NonNls public static final String COMPONENT_NAME = "ArtifactManager";
|
||||
@NonNls public static final String PACKAGING_ELEMENT_NAME = "element";
|
||||
@NonNls public static final String TYPE_ID_ATTRIBUTE = "id";
|
||||
private final ArtifactManagerModel myModel = new ArtifactManagerModel();
|
||||
private final ArtifactManagerModel myModel;
|
||||
private final Project myProject;
|
||||
private final DefaultPackagingElementResolvingContext myResolvingContext;
|
||||
private boolean myInsideCommit = false;
|
||||
@@ -67,6 +67,7 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo
|
||||
|
||||
public ArtifactManagerImpl(Project project, VirtualFileManager virtualFileManager) {
|
||||
myProject = project;
|
||||
myModel = new ArtifactManagerModel();
|
||||
myResolvingContext = new DefaultPackagingElementResolvingContext(myProject);
|
||||
virtualFileManager.addVirtualFileListener(new ArtifactVirtualFileListener(myProject, this), myProject);
|
||||
}
|
||||
@@ -85,6 +86,11 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo
|
||||
return myModel.getArtifactByOriginal(artifact);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Artifact getOriginalArtifact(@NotNull Artifact artifact) {
|
||||
return myModel.getOriginalArtifact(artifact);
|
||||
}
|
||||
|
||||
public Collection<? extends Artifact> getArtifactsByType(@NotNull ArtifactType type) {
|
||||
return myModel.getArtifactsByType(type);
|
||||
}
|
||||
@@ -183,8 +189,7 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo
|
||||
}
|
||||
|
||||
if (myLoaded) {
|
||||
final ArtifactModelImpl model = new ArtifactModelImpl(this);
|
||||
model.addArtifacts(artifacts);
|
||||
final ArtifactModelImpl model = new ArtifactModelImpl(this, artifacts);
|
||||
doCommit(model);
|
||||
}
|
||||
else {
|
||||
@@ -258,10 +263,7 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo
|
||||
|
||||
@Override
|
||||
public ModifiableArtifactModel createModifiableModel() {
|
||||
((ArtifactPointerManagerImpl)ArtifactPointerManager.getInstance(myProject)).updateAllPointers();
|
||||
final ArtifactModelImpl model = new ArtifactModelImpl(this);
|
||||
model.addArtifacts(getArtifactsList());
|
||||
return model;
|
||||
return new ArtifactModelImpl(this, getArtifactsList());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -55,6 +55,11 @@ public abstract class ArtifactModelBase implements ArtifactModel {
|
||||
return artifact;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Artifact getOriginalArtifact(@NotNull Artifact artifact) {
|
||||
return artifact;
|
||||
}
|
||||
|
||||
public Collection<? extends Artifact> getArtifactsByType(@NotNull ArtifactType type) {
|
||||
final List<Artifact> result = new ArrayList<Artifact>();
|
||||
for (Artifact artifact : getArtifacts()) {
|
||||
|
||||
+23
-12
@@ -36,16 +36,15 @@ public class ArtifactModelImpl extends ArtifactModelBase implements ModifiableAr
|
||||
private final Map<ArtifactImpl, ArtifactImpl> myModifiable2Original = new HashMap<ArtifactImpl, ArtifactImpl>();
|
||||
private final EventDispatcher<ArtifactListener> myDispatcher = EventDispatcher.create(ArtifactListener.class);
|
||||
|
||||
public ArtifactModelImpl(ArtifactManagerImpl artifactManager) {
|
||||
public ArtifactModelImpl(ArtifactManagerImpl artifactManager, List<ArtifactImpl> originalArtifacts) {
|
||||
myArtifactManager = artifactManager;
|
||||
myOriginalArtifacts = new ArrayList<ArtifactImpl>();
|
||||
}
|
||||
|
||||
public void addArtifacts(List<ArtifactImpl> artifacts) {
|
||||
for (ArtifactImpl artifact : artifacts) {
|
||||
myOriginalArtifacts.add(artifact);
|
||||
}
|
||||
artifactsChanged();
|
||||
myOriginalArtifacts = new ArrayList<ArtifactImpl>(originalArtifacts);
|
||||
addListener(new ArtifactAdapter() {
|
||||
@Override
|
||||
public void artifactChanged(@NotNull Artifact artifact, @NotNull String oldName) {
|
||||
artifactsChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected List<? extends Artifact> getArtifactsList() {
|
||||
@@ -70,7 +69,7 @@ public class ArtifactModelImpl extends ArtifactModelBase implements ModifiableAr
|
||||
@NotNull
|
||||
public ModifiableArtifact addArtifact(@NotNull String name, @NotNull ArtifactType artifactType, CompositePackagingElement<?> rootElement) {
|
||||
final String outputPath = ArtifactUtil.getDefaultArtifactOutputPath(name, myArtifactManager.getProject());
|
||||
final ArtifactImpl artifact = new ArtifactImpl(generateUniqueName(name), artifactType, false, rootElement, outputPath);
|
||||
final ArtifactImpl artifact = new ArtifactImpl(generateUniqueName(name), artifactType, false, rootElement, outputPath, myDispatcher);
|
||||
myOriginalArtifacts.add(artifact);
|
||||
myArtifact2ModifiableCopy.put(artifact, artifact);
|
||||
myModifiable2Original.put(artifact, artifact);
|
||||
@@ -123,7 +122,8 @@ public class ArtifactModelImpl extends ArtifactModelBase implements ModifiableAr
|
||||
|
||||
ArtifactImpl modifiableCopy = myArtifact2ModifiableCopy.get(artifactImpl);
|
||||
if (modifiableCopy == null) {
|
||||
modifiableCopy = artifactImpl.createCopy();
|
||||
modifiableCopy = artifactImpl.createCopy(myDispatcher);
|
||||
myDispatcher.getMulticaster().artifactChanged(modifiableCopy, artifact.getName());
|
||||
myArtifact2ModifiableCopy.put(artifactImpl, modifiableCopy);
|
||||
myModifiable2Original.put(modifiableCopy, artifactImpl);
|
||||
artifactsChanged();
|
||||
@@ -131,7 +131,8 @@ public class ArtifactModelImpl extends ArtifactModelBase implements ModifiableAr
|
||||
return modifiableCopy;
|
||||
}
|
||||
|
||||
public Artifact getOriginalArtifact(Artifact artifact) {
|
||||
@NotNull
|
||||
public Artifact getOriginalArtifact(@NotNull Artifact artifact) {
|
||||
final ArtifactImpl original = myModifiable2Original.get(artifact);
|
||||
return original != null ? original : artifact;
|
||||
}
|
||||
@@ -151,6 +152,16 @@ public class ArtifactModelImpl extends ArtifactModelBase implements ModifiableAr
|
||||
myArtifactManager.commit(this);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
List<Artifact> artifacts = new ArrayList<Artifact>();
|
||||
for (ArtifactImpl artifact : myModifiable2Original.keySet()) {
|
||||
if (myModifiable2Original.get(artifact).equals(artifact)) {
|
||||
artifacts.add(artifact);
|
||||
}
|
||||
}
|
||||
((ArtifactPointerManagerImpl)ArtifactPointerManager.getInstance(myArtifactManager.getProject())).disposePointers(artifacts);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ArtifactImpl getModifiableCopy(Artifact artifact) {
|
||||
//noinspection SuspiciousMethodCalls
|
||||
|
||||
+21
-16
@@ -15,9 +15,7 @@
|
||||
*/
|
||||
package com.intellij.packaging.impl.artifacts;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactManager;
|
||||
import com.intellij.packaging.artifacts.ArtifactModel;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -26,35 +24,42 @@ import org.jetbrains.annotations.NotNull;
|
||||
* @author nik
|
||||
*/
|
||||
public class ArtifactPointerImpl implements ArtifactPointer {
|
||||
private final Project myProject;
|
||||
private String myName;
|
||||
private Artifact myArtifact;
|
||||
|
||||
public ArtifactPointerImpl(@NotNull Project project, @NotNull String name) {
|
||||
myProject = project;
|
||||
public ArtifactPointerImpl(@NotNull String name) {
|
||||
myName = name;
|
||||
}
|
||||
|
||||
public ArtifactPointerImpl(@NotNull Artifact artifact) {
|
||||
myArtifact = artifact;
|
||||
myName = artifact.getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getName() {
|
||||
public String getArtifactName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public Artifact getArtifact() {
|
||||
if (myArtifact == null) {
|
||||
myArtifact = findArtifact(ArtifactManager.getInstance(myProject));
|
||||
}
|
||||
return myArtifact;
|
||||
}
|
||||
|
||||
public Artifact findArtifact(@NotNull ArtifactModel artifactModel) {
|
||||
if (myArtifact != null) {
|
||||
final Artifact artifact = artifactModel.getArtifactByOriginal(myArtifact);
|
||||
if (!artifact.equals(myArtifact)) {
|
||||
return artifact;
|
||||
}
|
||||
@NotNull
|
||||
public String getArtifactName(@NotNull ArtifactModel artifactModel) {
|
||||
final Artifact artifact = getArtifact();
|
||||
if (artifact != null) {
|
||||
return artifactModel.getArtifactByOriginal(artifact).getName();
|
||||
}
|
||||
return artifactModel.findArtifact(myName);
|
||||
return myName;
|
||||
}
|
||||
|
||||
public Artifact findArtifact(@NotNull ArtifactModel artifactModel) {
|
||||
final Artifact artifact = getArtifact();
|
||||
if (artifact != null) {
|
||||
return artifactModel.getArtifactByOriginal(artifact);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
void setArtifact(Artifact artifact) {
|
||||
|
||||
+54
-28
@@ -20,72 +20,98 @@ import com.intellij.packaging.artifacts.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ArtifactPointerManagerImpl extends ArtifactPointerManager {
|
||||
private final Map<String, ArtifactPointerImpl> myUnresolvedPointers = new HashMap<String, ArtifactPointerImpl>();
|
||||
private final Map<Artifact, ArtifactPointerImpl> myPointers = new HashMap<Artifact, ArtifactPointerImpl>();
|
||||
private final Project myProject;
|
||||
private final Map<String, ArtifactPointerImpl> myPointers = new HashMap<String, ArtifactPointerImpl>();
|
||||
|
||||
public ArtifactPointerManagerImpl(Project project) {
|
||||
myProject = project;
|
||||
myProject.getMessageBus().connect().subscribe(ArtifactManager.TOPIC, new ArtifactAdapter() {
|
||||
project.getMessageBus().connect().subscribe(ArtifactManager.TOPIC, new ArtifactAdapter() {
|
||||
@Override
|
||||
public void artifactRemoved(@NotNull Artifact artifact) {
|
||||
final ArtifactPointerImpl pointer = myPointers.get(artifact.getName());
|
||||
if (pointer != null) {
|
||||
pointer.setArtifact(null);
|
||||
}
|
||||
disposePointer(artifact);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void artifactAdded(@NotNull Artifact artifact) {
|
||||
final ArtifactPointerImpl artifactPointer = myPointers.get(artifact.getName());
|
||||
if (artifactPointer != null) {
|
||||
artifactPointer.setArtifact(artifact);
|
||||
final ArtifactPointerImpl pointer = myPointers.get(artifact);
|
||||
if (pointer != null) {
|
||||
pointer.setName(artifact.getName());
|
||||
}
|
||||
|
||||
final ArtifactPointerImpl unresolved = myUnresolvedPointers.remove(artifact.getName());
|
||||
if (unresolved != null) {
|
||||
unresolved.setArtifact(artifact);
|
||||
if (pointer == null) {
|
||||
myPointers.put(artifact, unresolved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void artifactChanged(@NotNull Artifact artifact, @NotNull String oldName) {
|
||||
final ArtifactPointerImpl pointer = myPointers.get(oldName);
|
||||
final ArtifactPointerImpl pointer = myPointers.get(artifact);
|
||||
if (pointer != null) {
|
||||
pointer.setArtifact(artifact);
|
||||
final String newName = artifact.getName();
|
||||
if (!newName.equals(oldName)) {
|
||||
pointer.setName(newName);
|
||||
myPointers.remove(oldName);
|
||||
myPointers.put(newName, pointer);
|
||||
pointer.setName(artifact.getName());
|
||||
}
|
||||
|
||||
final ArtifactPointerImpl unresolved = myUnresolvedPointers.remove(artifact.getName());
|
||||
if (unresolved != null) {
|
||||
unresolved.setArtifact(artifact);
|
||||
if (pointer == null) {
|
||||
myPointers.put(artifact, unresolved);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void updateAllPointers() {
|
||||
for (ArtifactPointerImpl pointer : myPointers.values()) {
|
||||
pointer.getArtifact();
|
||||
private void disposePointer(Artifact artifact) {
|
||||
final ArtifactPointerImpl pointer = myPointers.remove(artifact);
|
||||
if (pointer != null) {
|
||||
pointer.setArtifact(null);
|
||||
myUnresolvedPointers.put(pointer.getArtifactName(), pointer);
|
||||
}
|
||||
}
|
||||
|
||||
public ArtifactPointer create(@NotNull String name) {
|
||||
ArtifactPointerImpl pointer = myPointers.get(name);
|
||||
public ArtifactPointer createPointer(@NotNull String name) {
|
||||
final Artifact artifact = ArtifactManager.getInstance(myProject).findArtifact(name);
|
||||
if (artifact != null) {
|
||||
return createPointer(artifact);
|
||||
}
|
||||
|
||||
ArtifactPointerImpl pointer = myUnresolvedPointers.get(name);
|
||||
if (pointer == null) {
|
||||
pointer = new ArtifactPointerImpl(myProject, name);
|
||||
myPointers.put(name, pointer);
|
||||
pointer = new ArtifactPointerImpl(name);
|
||||
myUnresolvedPointers.put(name, pointer);
|
||||
}
|
||||
return pointer;
|
||||
}
|
||||
|
||||
public ArtifactPointer create(@NotNull Artifact artifact) {
|
||||
final String name = artifact.getName();
|
||||
ArtifactPointerImpl pointer = myPointers.get(name);
|
||||
public ArtifactPointer createPointer(@NotNull Artifact artifact) {
|
||||
ArtifactPointerImpl pointer = myPointers.get(artifact);
|
||||
if (pointer == null) {
|
||||
pointer = new ArtifactPointerImpl(myProject, name);
|
||||
myPointers.put(artifact.getName(), pointer);
|
||||
pointer = new ArtifactPointerImpl(artifact);
|
||||
myPointers.put(artifact, pointer);
|
||||
}
|
||||
return pointer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArtifactPointer createPointer(@NotNull Artifact artifact, @NotNull ArtifactModel artifactModel) {
|
||||
return createPointer(artifactModel.getOriginalArtifact(artifact));
|
||||
}
|
||||
|
||||
public void disposePointers(List<Artifact> artifacts) {
|
||||
for (Artifact artifact : artifacts) {
|
||||
disposePointer(artifact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ public class ArtifactElementType extends ComplexPackagingElementType<ArtifactPac
|
||||
List<Artifact> artifacts = context.chooseArtifacts(getAvailableArtifacts(context, artifact), CompilerBundle.message("dialog.title.choose.artifacts"));
|
||||
final List<ArtifactPackagingElement> elements = new ArrayList<ArtifactPackagingElement>();
|
||||
for (Artifact selected : artifacts) {
|
||||
elements.add(new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).create(selected.getName())));
|
||||
elements.add(new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).createPointer(selected, context.getArtifactModel())));
|
||||
}
|
||||
return elements;
|
||||
}
|
||||
|
||||
+6
-9
@@ -18,19 +18,16 @@ package com.intellij.packaging.impl.elements;
|
||||
import com.intellij.compiler.ant.BuildProperties;
|
||||
import com.intellij.compiler.ant.Generator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointer;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointerManager;
|
||||
import com.intellij.packaging.artifacts.*;
|
||||
import com.intellij.packaging.elements.*;
|
||||
import com.intellij.packaging.impl.ui.ArtifactElementPresentation;
|
||||
import com.intellij.packaging.impl.ui.DelegatedPackagingElementPresentation;
|
||||
import com.intellij.packaging.ui.PackagingElementPresentation;
|
||||
import com.intellij.packaging.ui.ArtifactEditorContext;
|
||||
import com.intellij.packaging.ui.PackagingElementPresentation;
|
||||
import com.intellij.util.xmlb.annotations.Attribute;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -107,14 +104,14 @@ public class ArtifactPackagingElement extends ComplexPackagingElement<ArtifactPa
|
||||
public ArtifactPackagingElementState getState() {
|
||||
final ArtifactPackagingElementState state = new ArtifactPackagingElementState();
|
||||
if (myArtifactPointer != null) {
|
||||
state.setArtifactName(myArtifactPointer.getName());
|
||||
state.setArtifactName(myArtifactPointer.getArtifactName());
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
public void loadState(ArtifactPackagingElementState state) {
|
||||
final String name = state.getArtifactName();
|
||||
myArtifactPointer = name != null ? ArtifactPointerManager.getInstance(myProject).create(name) : null;
|
||||
myArtifactPointer = name != null ? ArtifactPointerManager.getInstance(myProject).createPointer(name) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -135,7 +132,7 @@ public class ArtifactPackagingElement extends ComplexPackagingElement<ArtifactPa
|
||||
|
||||
@Nullable
|
||||
public String getArtifactName() {
|
||||
return myArtifactPointer != null ? myArtifactPointer.getName() : null;
|
||||
return myArtifactPointer != null ? myArtifactPointer.getArtifactName() : null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+8
-1
@@ -27,6 +27,7 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointer;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointerManager;
|
||||
import com.intellij.packaging.elements.*;
|
||||
import com.intellij.packaging.ui.ArtifactEditorContext;
|
||||
@@ -114,7 +115,7 @@ public class PackagingElementFactoryImpl extends PackagingElementFactory {
|
||||
@NotNull
|
||||
@Override
|
||||
public PackagingElement<?> createArtifactElement(@NotNull Artifact artifact, @NotNull Project project) {
|
||||
return new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).create(artifact));
|
||||
return new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).createPointer(artifact));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -204,6 +205,12 @@ public class PackagingElementFactoryImpl extends PackagingElementFactory {
|
||||
return elements;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PackagingElement<?> createArtifactElement(@NotNull ArtifactPointer artifactPointer, @NotNull Project project) {
|
||||
return new ArtifactPackagingElement(project, artifactPointer);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PackagingElement<?> createLibraryFiles(@NotNull String libraryName, @NotNull String level, String moduleName) {
|
||||
|
||||
@@ -32,7 +32,7 @@ import java.util.List;
|
||||
public class ArtifactChooser extends ElementsChooser<ArtifactPointer> {
|
||||
private static final Comparator<ArtifactPointer> ARTIFACT_COMPARATOR = new Comparator<ArtifactPointer>() {
|
||||
public int compare(ArtifactPointer o1, ArtifactPointer o2) {
|
||||
return o1.getName().compareToIgnoreCase(o2.getName());
|
||||
return o1.getArtifactName().compareToIgnoreCase(o2.getArtifactName());
|
||||
}
|
||||
};
|
||||
private static final ElementProperties INVALID_ARTIFACT_PROPERTIES = new ElementProperties() {
|
||||
@@ -57,7 +57,7 @@ public class ArtifactChooser extends ElementsChooser<ArtifactPointer> {
|
||||
|
||||
@Override
|
||||
protected String getItemText(@NotNull ArtifactPointer value) {
|
||||
return value.getName();
|
||||
return value.getArtifactName();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,7 +72,7 @@ public class BuildArtifactsBeforeRun implements BeforeRunTaskProvider<BuildArtif
|
||||
return "Build Artifacts";
|
||||
}
|
||||
if (pointers.size() == 1) {
|
||||
return "Build '" + pointers.get(0).getName() + "' artifact";
|
||||
return "Build '" + pointers.get(0).getArtifactName() + "' artifact";
|
||||
}
|
||||
return "Build " + pointers.size() + " artifacts";
|
||||
}
|
||||
@@ -89,7 +89,7 @@ public class BuildArtifactsBeforeRun implements BeforeRunTaskProvider<BuildArtif
|
||||
final Artifact[] artifacts = ArtifactManager.getInstance(myProject).getArtifacts();
|
||||
Set<ArtifactPointer> pointers = new THashSet<ArtifactPointer>();
|
||||
for (Artifact artifact : artifacts) {
|
||||
pointers.add(ArtifactPointerManager.getInstance(myProject).create(artifact));
|
||||
pointers.add(ArtifactPointerManager.getInstance(myProject).createPointer(artifact));
|
||||
}
|
||||
pointers.addAll(task.getArtifactPointers());
|
||||
ArtifactChooser chooser = new ArtifactChooser(new ArrayList<ArtifactPointer>(pointers));
|
||||
|
||||
+4
-4
@@ -46,7 +46,7 @@ public class BuildArtifactsBeforeRunTask extends BeforeRunTask {
|
||||
final List<Element> children = element.getChildren(ARTIFACT_ELEMENT);
|
||||
final ArtifactPointerManager pointerManager = ArtifactPointerManager.getInstance(myProject);
|
||||
for (Element child : children) {
|
||||
myArtifactPointers.add(pointerManager.create(child.getAttributeValue(NAME_ATTRIBUTE)));
|
||||
myArtifactPointers.add(pointerManager.createPointer(child.getAttributeValue(NAME_ATTRIBUTE)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public class BuildArtifactsBeforeRunTask extends BeforeRunTask {
|
||||
public void writeExternal(Element element) {
|
||||
super.writeExternal(element);
|
||||
for (ArtifactPointer pointer : myArtifactPointers) {
|
||||
element.addContent(new Element(ARTIFACT_ELEMENT).setAttribute(NAME_ATTRIBUTE, pointer.getName()));
|
||||
element.addContent(new Element(ARTIFACT_ELEMENT).setAttribute(NAME_ATTRIBUTE, pointer.getArtifactName()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,14 +74,14 @@ public class BuildArtifactsBeforeRunTask extends BeforeRunTask {
|
||||
}
|
||||
|
||||
public void addArtifact(Artifact artifact) {
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(myProject).create(artifact);
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(myProject).createPointer(artifact);
|
||||
if (!myArtifactPointers.contains(pointer)) {
|
||||
myArtifactPointers.add(pointer);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeArtifact(Artifact artifact) {
|
||||
myArtifactPointers.remove(ArtifactPointerManager.getInstance(myProject).create(artifact));
|
||||
myArtifactPointers.remove(ArtifactPointerManager.getInstance(myProject).createPointer(artifact));
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
|
||||
+18
-10
@@ -24,43 +24,51 @@ import com.intellij.packaging.ui.PackagingElementWeights;
|
||||
import com.intellij.packaging.ui.TreeNodePresentation;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ArtifactElementPresentation extends TreeNodePresentation {
|
||||
private final Artifact myArtifact;
|
||||
private final ArtifactPointer myArtifactPointer;
|
||||
private final ArtifactEditorContext myContext;
|
||||
private final String myName;
|
||||
|
||||
public ArtifactElementPresentation(ArtifactPointer artifactPointer, ArtifactEditorContext context) {
|
||||
myName = artifactPointer != null ? artifactPointer.getName() : "<unknown>";
|
||||
myArtifact = artifactPointer != null ? artifactPointer.findArtifact(context.getArtifactModel()) : null;
|
||||
myArtifactPointer = artifactPointer;
|
||||
myContext = context;
|
||||
}
|
||||
|
||||
public String getPresentableName() {
|
||||
return myName;
|
||||
return myArtifactPointer != null ? myArtifactPointer.getArtifactName(myContext.getArtifactModel()) : "<unknown>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canNavigateToSource() {
|
||||
return myArtifact != null;
|
||||
return findArtifact() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getSourceObject() {
|
||||
return myArtifact;
|
||||
return myArtifactPointer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void navigateToSource() {
|
||||
myContext.selectArtifact(myArtifact);
|
||||
final Artifact artifact = findArtifact();
|
||||
if (artifact != null) {
|
||||
myContext.selectArtifact(artifact);
|
||||
}
|
||||
}
|
||||
|
||||
public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes, SimpleTextAttributes commentAttributes) {
|
||||
presentationData.setIcons(myArtifact != null ? myArtifact.getArtifactType().getIcon() : PlainArtifactType.ARTIFACT_ICON);
|
||||
presentationData.addText(myName, myArtifact != null ? mainAttributes : SimpleTextAttributes.ERROR_ATTRIBUTES);
|
||||
final Artifact artifact = findArtifact();
|
||||
presentationData.setIcons(artifact != null ? artifact.getArtifactType().getIcon() : PlainArtifactType.ARTIFACT_ICON);
|
||||
presentationData.addText(getPresentableName(), artifact != null ? mainAttributes : SimpleTextAttributes.ERROR_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Artifact findArtifact() {
|
||||
return myArtifactPointer != null ? myArtifactPointer.findArtifact(myContext.getArtifactModel()) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,5 +33,8 @@ public interface ArtifactModel {
|
||||
@NotNull
|
||||
Artifact getArtifactByOriginal(@NotNull Artifact artifact);
|
||||
|
||||
@NotNull
|
||||
Artifact getOriginalArtifact(@NotNull Artifact artifact);
|
||||
|
||||
Collection<? extends Artifact> getArtifactsByType(@NotNull ArtifactType type);
|
||||
}
|
||||
|
||||
@@ -24,11 +24,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
public interface ArtifactPointer {
|
||||
|
||||
@NotNull
|
||||
String getName();
|
||||
String getArtifactName();
|
||||
|
||||
@Nullable
|
||||
Artifact getArtifact();
|
||||
|
||||
@NotNull
|
||||
String getArtifactName(@NotNull ArtifactModel artifactModel);
|
||||
|
||||
@Nullable
|
||||
Artifact findArtifact(@NotNull ArtifactModel artifactModel);
|
||||
|
||||
|
||||
+4
-2
@@ -27,7 +27,9 @@ public abstract class ArtifactPointerManager {
|
||||
return ServiceManager.getService(project, ArtifactPointerManager.class);
|
||||
}
|
||||
|
||||
public abstract ArtifactPointer create(@NotNull String name);
|
||||
public abstract ArtifactPointer createPointer(@NotNull String name);
|
||||
|
||||
public abstract ArtifactPointer create(@NotNull Artifact artifact);
|
||||
public abstract ArtifactPointer createPointer(@NotNull Artifact artifact);
|
||||
|
||||
public abstract ArtifactPointer createPointer(@NotNull Artifact artifact, @NotNull ArtifactModel artifactModel);
|
||||
}
|
||||
|
||||
+9
-2
@@ -35,10 +35,17 @@ public interface ModifiableArtifactModel extends ArtifactModel {
|
||||
@NotNull
|
||||
ModifiableArtifact getOrCreateModifiableArtifact(@NotNull Artifact artifact);
|
||||
|
||||
@Nullable
|
||||
Artifact getModifiableCopy(Artifact artifact);
|
||||
|
||||
void addListener(@NotNull ArtifactListener listener);
|
||||
|
||||
void removeListener(@NotNull ArtifactListener listener);
|
||||
|
||||
|
||||
boolean isModified();
|
||||
|
||||
void commit();
|
||||
|
||||
@Nullable
|
||||
Artifact getModifiableCopy(Artifact artifact);
|
||||
void dispose();
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointer;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -53,6 +54,9 @@ public abstract class PackagingElementFactory {
|
||||
@NotNull
|
||||
public abstract List<? extends PackagingElement<?>> createLibraryElements(@NotNull Library library);
|
||||
|
||||
@NotNull
|
||||
public abstract PackagingElement<?> createArtifactElement(@NotNull ArtifactPointer artifactPointer, @NotNull Project project);
|
||||
|
||||
@NotNull
|
||||
public abstract PackagingElement<?> createArtifactElement(@NotNull Artifact artifact, @NotNull Project project);
|
||||
|
||||
|
||||
+7
-5
@@ -22,7 +22,6 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigur
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.packaging.artifacts.*;
|
||||
import com.intellij.packaging.elements.CompositePackagingElement;
|
||||
import com.intellij.packaging.impl.artifacts.ArtifactModelImpl;
|
||||
import com.intellij.packaging.impl.artifacts.ArtifactUtil;
|
||||
import com.intellij.packaging.ui.ManifestFileConfiguration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -69,7 +68,7 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
|
||||
@NotNull
|
||||
public Artifact getOriginalArtifact(@NotNull Artifact artifact) {
|
||||
if (myModifiableModel != null) {
|
||||
return ((ArtifactModelImpl)myModifiableModel).getOriginalArtifact(artifact);
|
||||
return myModifiableModel.getOriginalArtifact(artifact);
|
||||
}
|
||||
return artifact;
|
||||
}
|
||||
@@ -108,7 +107,7 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
|
||||
artifact = getOriginalArtifact(artifact);
|
||||
ArtifactEditorImpl artifactEditor = myArtifactEditors.get(artifact);
|
||||
if (artifactEditor == null) {
|
||||
final ArtifactEditorSettings settings = myEditorSettings.get(ArtifactPointerManager.getInstance(myProject).create(artifact));
|
||||
final ArtifactEditorSettings settings = myEditorSettings.get(ArtifactPointerManager.getInstance(myProject).createPointer(artifact, getArtifactModel()));
|
||||
artifactEditor = new ArtifactEditorImpl(this, artifact, settings != null ? settings : myDefaultSettings);
|
||||
myArtifactEditors.put(artifact, artifactEditor);
|
||||
}
|
||||
@@ -124,7 +123,7 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
|
||||
public ModifiableArtifactModel getModifiableArtifactModel() {
|
||||
if (myModifiableModel == null) {
|
||||
myModifiableModel = ArtifactManager.getInstance(myProject).createModifiableModel();
|
||||
((ArtifactModelImpl)myModifiableModel).addListener(myModifiableModelListener);
|
||||
myModifiableModel.addListener(myModifiableModelListener);
|
||||
}
|
||||
return myModifiableModel;
|
||||
}
|
||||
@@ -168,12 +167,15 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
|
||||
Disposer.dispose(editor);
|
||||
}
|
||||
myArtifactEditors.clear();
|
||||
if (myModifiableModel != null) {
|
||||
myModifiableModel.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public void saveEditorSettings() {
|
||||
myEditorSettings.clear();
|
||||
for (ArtifactEditorImpl artifactEditor : myArtifactEditors.values()) {
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(myProject).create(artifactEditor.getArtifact());
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(myProject).createPointer(artifactEditor.getArtifact(), getArtifactModel());
|
||||
myEditorSettings.put(pointer, artifactEditor.createSettings());
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@
|
||||
package com.intellij.openapi.roots.ui.configuration.artifacts.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.roots.ui.configuration.artifacts.ArtifactEditorEx;
|
||||
@@ -71,7 +70,7 @@ public class ExtractArtifactAction extends LayoutTreeActionBase {
|
||||
for (PackagingElement element : selectedElements) {
|
||||
parent.removeChild(element);
|
||||
}
|
||||
parent.addOrFindChild(new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).create(artifact)));
|
||||
parent.addOrFindChild(new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).createPointer(artifact, myArtifactEditor.getContext().getArtifactModel())));
|
||||
}
|
||||
});
|
||||
treeComponent.rebuildTree();
|
||||
|
||||
+10
-4
@@ -15,15 +15,19 @@
|
||||
*/
|
||||
package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointerManager;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointer;
|
||||
import com.intellij.packaging.artifacts.ArtifactPointerManager;
|
||||
import com.intellij.packaging.elements.PackagingElement;
|
||||
import com.intellij.packaging.elements.PackagingElementFactory;
|
||||
import com.intellij.packaging.elements.PackagingElementOutputKind;
|
||||
import com.intellij.packaging.impl.artifacts.JarArtifactType;
|
||||
import com.intellij.packaging.impl.ui.ArtifactElementPresentation;
|
||||
import com.intellij.packaging.ui.*;
|
||||
import com.intellij.packaging.ui.ArtifactEditorContext;
|
||||
import com.intellij.packaging.ui.PackagingSourceItem;
|
||||
import com.intellij.packaging.ui.SourceItemPresentation;
|
||||
import com.intellij.packaging.ui.SourceItemWeights;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -40,7 +44,7 @@ public class ArtifactSourceItem extends PackagingSourceItem {
|
||||
}
|
||||
|
||||
public SourceItemPresentation createPresentation(@NotNull ArtifactEditorContext context) {
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(context.getProject()).create(myArtifact);
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(context.getProject()).createPointer(myArtifact, context.getArtifactModel());
|
||||
return new DelegatedSourceItemPresentation(new ArtifactElementPresentation(pointer, context)) {
|
||||
@Override
|
||||
public int getWeight() {
|
||||
@@ -51,7 +55,9 @@ public class ArtifactSourceItem extends PackagingSourceItem {
|
||||
|
||||
@NotNull
|
||||
public List<? extends PackagingElement<?>> createElements(@NotNull ArtifactEditorContext context) {
|
||||
return Collections.singletonList(PackagingElementFactory.getInstance().createArtifactElement(myArtifact, context.getProject()));
|
||||
final Project project = context.getProject();
|
||||
final ArtifactPointer pointer = ArtifactPointerManager.getInstance(project).createPointer(myArtifact, context.getArtifactModel());
|
||||
return Collections.singletonList(PackagingElementFactory.getInstance().createArtifactElement(pointer, project));
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+3
@@ -133,6 +133,9 @@ public class MavenDefaultModifiableModelsProvider extends MavenBaseModifiableMod
|
||||
each.dispose();
|
||||
}
|
||||
myModuleModel.dispose();
|
||||
if (myArtifactModel != null) {
|
||||
myArtifactModel.dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user