diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java index 5f0a90571523..d154510c8740 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java @@ -65,9 +65,7 @@ import com.intellij.psi.SingleRootFileViewProvider; import com.intellij.testFramework.LightVirtualFile; import com.intellij.ui.UIBundle; import com.intellij.ui.components.JBScrollPane; -import com.intellij.util.Function; import com.intellij.util.PairProcessor; -import com.intellij.util.ThrowableRunnable; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBus; import org.jetbrains.annotations.NotNull; @@ -640,6 +638,7 @@ public class FileDocumentManagerImpl extends FileDocumentManager implements Virt documentEx.setReadOnly(false); LoadTextUtil.setCharsetWasDetectedFromBytes(file, null); file.setBOM(null); // reset BOM in case we had one and the external change stripped it away + file.setCharset(null); if (!isBinaryWithoutDecompiler(file)) { documentEx.replaceText(LoadTextUtil.loadText(file), file.getModificationStamp()); documentEx.setReadOnly(!wasWritable); diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java index cc5c960a9ddb..2e4c2f534276 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java @@ -33,8 +33,11 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.project.ProjectManagerAdapter; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.SimpleModificationTracker; @@ -67,9 +70,15 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement private String myOldUTFGuessing; private boolean myNative2AsciiForPropertiesFilesWasSpecified; - public EncodingProjectManagerImpl(Project project, EncodingManager ideEncodingManager) { + public EncodingProjectManagerImpl(Project project, EncodingManager ideEncodingManager, ProjectManager projectManager) { myProject = project; myIdeEncodingManager = (EncodingManagerImpl)ideEncodingManager; + projectManager.addProjectManagerListener(project, new ProjectManagerAdapter() { + @Override + public void projectOpened(Project project) { + StartupManager.getInstance(project).runWhenProjectIsInitialized(EncodingProjectManagerImpl.this::reloadAlreadyLoadedDocuments); + } + }); } private final Map myMapping = ContainerUtil.newConcurrentMap(); @@ -146,6 +155,15 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement } } + private void reloadAlreadyLoadedDocuments() { + for (VirtualFile file : myMapping.keySet()) { + Document cachedDocument = FileDocumentManager.getInstance().getCachedDocument(file); + if (cachedDocument != null) { + reload(file); // reload document in the right encoding if someone sneaky (you, BreakpointManager) managed to load the document before project opened + } + } + } + @Override @Nullable public Charset getEncoding(@Nullable VirtualFile virtualFile, boolean useParentDefaults) {