From acf2c70efa9c10a861b036b53a653afe4f84c4f1 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 11 Feb 2010 11:34:36 +0300 Subject: [PATCH] artifacts pointers fixed (IDEA-27203 & IDEA-27189) --- .../packaging/impl/artifacts/ArtifactManagerImpl.java | 7 ++++--- .../impl/artifacts/ArtifactPointerManagerImpl.java | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactManagerImpl.java b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactManagerImpl.java index b3c58b3a17be..342c17a815e4 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactManagerImpl.java @@ -314,12 +314,13 @@ public class ArtifactManagerImpl extends ArtifactManager implements ProjectCompo myModel.setArtifactsList(allArtifacts); myModificationCount++; final ArtifactListener publisher = myProject.getMessageBus().syncPublisher(TOPIC); - for (ArtifactImpl artifact : added) { - publisher.artifactAdded(artifact); - } for (ArtifactImpl artifact : removed) { publisher.artifactRemoved(artifact); } + //it's important to send 'removed' events before 'added'. Otherwise when artifacts are reloaded from xml artifact pointers will be damaged + for (ArtifactImpl artifact : added) { + publisher.artifactAdded(artifact); + } for (Pair pair : changed) { publisher.artifactChanged(pair.getFirst(), pair.getSecond()); } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactPointerManagerImpl.java b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactPointerManagerImpl.java index 60ebae5d470a..74fbb5993a02 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactPointerManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactPointerManagerImpl.java @@ -103,7 +103,13 @@ public class ArtifactPointerManagerImpl extends ArtifactPointerManager { public ArtifactPointer createPointer(@NotNull Artifact artifact) { ArtifactPointerImpl pointer = myPointers.get(artifact); if (pointer == null) { - pointer = new ArtifactPointerImpl(artifact); + pointer = myUnresolvedPointers.get(artifact.getName()); + if (pointer != null) { + pointer.setArtifact(artifact); + } + else { + pointer = new ArtifactPointerImpl(artifact); + } myPointers.put(artifact, pointer); } return pointer;