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 9434fb9c33d6..d52ac1ab4f96 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 @@ -208,7 +208,7 @@ public final class ArtifactManagerImpl extends ArtifactManager implements Persis if (myLoaded) { final ArtifactModelImpl model = new ArtifactModelImpl(this, artifacts); - doCommit(model); + WriteAction.run(() -> doCommit(model)); } else { myModel.setArtifactsList(artifacts); diff --git a/java/java-tests/testData/reloading/changeArtifact/initial/.idea/artifacts/a.xml b/java/java-tests/testData/reloading/changeArtifact/initial/.idea/artifacts/a.xml new file mode 100644 index 000000000000..88e589d18c9a --- /dev/null +++ b/java/java-tests/testData/reloading/changeArtifact/initial/.idea/artifacts/a.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/a + + + + + \ No newline at end of file diff --git a/java/java-tests/testData/reloading/changeArtifact/update/.idea/artifacts/a.xml b/java/java-tests/testData/reloading/changeArtifact/update/.idea/artifacts/a.xml new file mode 100644 index 000000000000..5d40ee6e0642 --- /dev/null +++ b/java/java-tests/testData/reloading/changeArtifact/update/.idea/artifacts/a.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/a + + + + + \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/configurationStore/ReloadProjectTest.kt b/java/java-tests/testSrc/com/intellij/java/configurationStore/ReloadProjectTest.kt index 5d5ffbb25396..78ad44fbbc11 100644 --- a/java/java-tests/testSrc/com/intellij/java/configurationStore/ReloadProjectTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/configurationStore/ReloadProjectTest.kt @@ -10,6 +10,8 @@ import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtilCore +import com.intellij.packaging.artifacts.ArtifactManager +import com.intellij.packaging.impl.elements.FileCopyPackagingElement import com.intellij.testFramework.ApplicationRule import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.TemporaryDirectory @@ -71,6 +73,19 @@ class ReloadProjectTest { } } + @Test + fun `change artifact`() { + loadProjectAndCheckResults("changeArtifact/initial") { project -> + val artifact = ArtifactManager.getInstance(project).artifacts.single() + assertThat(artifact.name).isEqualTo("a") + assertThat((artifact.rootElement.children.single() as FileCopyPackagingElement).filePath).endsWith("/a.txt") + copyFilesAndReload(project, "changeArtifact/update") + val artifact2 = ArtifactManager.getInstance(project).artifacts.single() + assertThat(artifact2.name).isEqualTo("a") + assertThat((artifact2.rootElement.children.single() as FileCopyPackagingElement).filePath).endsWith("/bbb.txt") + } + } + private suspend fun copyFilesAndReload(project: Project, relativePath: String) { val base = Paths.get(project.basePath!!) val projectDir = VfsUtil.findFile(base, true)!!