diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java index e144db57a921..c9fb90d555cf 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java @@ -20,6 +20,7 @@ package com.intellij.lang.properties.editor; import com.intellij.codeHighlighting.BackgroundEditorHighlighter; +import com.intellij.codeInsight.FileModificationService; import com.intellij.ide.FileEditorProvider; import com.intellij.ide.SelectInContext; import com.intellij.ide.structureView.StructureViewBuilder; @@ -61,7 +62,10 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.*; +import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileListener; +import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.wm.StatusBar; import com.intellij.openapi.wm.WindowManager; import com.intellij.pom.Navigatable; @@ -72,7 +76,10 @@ import com.intellij.ui.JBColor; import com.intellij.ui.JBSplitter; import com.intellij.ui.OnePixelSplitter; import com.intellij.ui.components.JBScrollPane; -import com.intellij.util.*; +import com.intellij.util.Alarm; +import com.intellij.util.EditorPopupHandler; +import com.intellij.util.IncorrectOperationException; +import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.containers.Stack; @@ -924,13 +931,16 @@ public class ResourceBundleEditor extends UserDataHolderBase implements Document } ApplicationManager.getApplication().runWriteAction(() -> WriteCommandAction.runWriteCommandAction(myProject, () -> { try { - for (Map.Entry entry : myEditors.entrySet()) { - final Editor translationEditor = entry.getValue(); - if (translationEditor != editor) { - final VirtualFile propertiesFile = entry.getKey(); - myPropertiesInsertDeleteManager.insertOrUpdateTranslation(currentSelectedProperty, valueToPropagate, PropertiesImplUtil.getPropertiesFile(propertiesFile, myProject)); - translationEditor.getDocument().setText(valueToPropagate); + final PropertiesFile[] propertiesFiles = myResourceBundle.getPropertiesFiles().stream().filter(f -> { + final IProperty property = f.findPropertyByKey(currentSelectedProperty); + return property == null || !valueToPropagate.equals(property.getValue()); + }).toArray(PropertiesFile[]::new); + final PsiFile[] filesToPrepare = Arrays.stream(propertiesFiles).map(PropertiesFile::getContainingFile).toArray(PsiFile[]::new); + if (FileModificationService.getInstance().preparePsiElementsForWrite(filesToPrepare)) { + for (PropertiesFile file : propertiesFiles) { + myPropertiesInsertDeleteManager.insertOrUpdateTranslation(currentSelectedProperty, valueToPropagate, file); } + recreateEditorsPanel(); } } catch (final IncorrectOperationException e1) {