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)!!