mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-152063 IntelliJ fails to use encoding from project settings for files containing breakpoints when project is opened
This commit is contained in:
+1
-2
@@ -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);
|
||||
|
||||
+19
-1
@@ -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<VirtualFile, Charset> 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) {
|
||||
|
||||
Reference in New Issue
Block a user