From 9d8fe6a5cc4279f2c09fd45ceb3d6ff382cc0a15 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 11 Sep 2015 14:32:36 +0300 Subject: [PATCH] IDEA-138829 --- .../encoding/EncodingProjectManagerImpl.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) 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 116069d219d7..25e85397e0a4 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 @@ -42,6 +42,7 @@ import com.intellij.psi.PsiFile; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; +import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -60,9 +61,10 @@ import java.util.*; @Storage(file = StoragePathMacros.PROJECT_CONFIG_DIR + "/encodings.xml", scheme = StorageScheme.DIRECTORY_BASED) } ) -public class EncodingProjectManagerImpl extends EncodingProjectManager implements NamedComponent, PersistentStateComponent { +public class EncodingProjectManagerImpl extends EncodingProjectManager implements BaseComponent, PersistentStateComponent { @NonNls private static final String PROJECT_URL = "PROJECT"; private final Project myProject; + private final EncodingManagerImpl myIdeEncodingManager; private boolean myNative2AsciiForPropertiesFiles; private Charset myDefaultCharsetForPropertiesFiles; private final SimpleModificationTracker myModificationTracker = new SimpleModificationTracker(); @@ -71,12 +73,13 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement private String myOldUTFGuessing; private boolean myNative2AsciiForPropertiesFilesWasSpecified; - public EncodingProjectManagerImpl(Project project, PsiDocumentManager documentManager) { + public EncodingProjectManagerImpl(Project project, PsiDocumentManager documentManager, EncodingManager ideEncodingManager) { myProject = project; + myIdeEncodingManager = (EncodingManagerImpl)ideEncodingManager; documentManager.addListener(new PsiDocumentManager.Listener() { @Override public void documentCreated(@NotNull Document document, PsiFile psiFile) { - ((EncodingManagerImpl)EncodingManager.getInstance()).queueUpdateEncodingFromContent(document); + myIdeEncodingManager.queueUpdateEncodingFromContent(document); } @Override @@ -262,8 +265,8 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement public void setMapping(@NotNull final Map mapping) { ApplicationManager.getApplication().assertIsDispatchThread(); FileDocumentManager.getInstance().saveAllDocuments(); // consider all files as unmodified - final Map newMap = new HashMap(mapping.size()); - final Map oldMap = new HashMap(myMapping); + final Map newMap = new THashMap(mapping.size()); + final Map oldMap = new THashMap(myMapping); // ChangeFileEncodingAction should not start progress "reload files..." suppressReloadDuring(new Runnable() { @@ -305,8 +308,13 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement myMapping.putAll(newMap); final Set changed = new HashSet(oldMap.keySet()); - for (VirtualFile newFile : newMap.keySet()) { - if (Comparing.equal(oldMap.get(newFile), newMap.get(newFile))) changed.remove(newFile); + for (Map.Entry entry : newMap.entrySet()) { + VirtualFile file = entry.getKey(); + Charset charset = entry.getValue(); + Charset oldCharset = oldMap.get(file); + if (Comparing.equal(oldCharset, charset)) { + changed.remove(file); + } } Set added = new HashSet(newMap.keySet()); @@ -455,7 +463,7 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement public void setNative2AsciiForPropertiesFiles(final VirtualFile virtualFile, final boolean native2Ascii) { if (myNative2AsciiForPropertiesFiles != native2Ascii) { myNative2AsciiForPropertiesFiles = native2Ascii; - ((EncodingManagerImpl)EncodingManager.getInstance()).firePropertyChange(null, PROP_NATIVE2ASCII_SWITCH, !native2Ascii, native2Ascii); + myIdeEncodingManager.firePropertyChange(null, PROP_NATIVE2ASCII_SWITCH, !native2Ascii, native2Ascii); } } @@ -482,18 +490,30 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement Charset old = myDefaultCharsetForPropertiesFiles; if (!Comparing.equal(old, charset)) { myDefaultCharsetForPropertiesFiles = charset; - ((EncodingManagerImpl)EncodingManager.getInstance()).firePropertyChange(null, PROP_PROPERTIES_FILES_ENCODING, old, charset); + myIdeEncodingManager.firePropertyChange(null, PROP_PROPERTIES_FILES_ENCODING, old, charset); } } @Override public void addPropertyChangeListener(@NotNull PropertyChangeListener listener, @NotNull Disposable parentDisposable) { - EncodingManager.getInstance().addPropertyChangeListener(listener,parentDisposable); + myIdeEncodingManager.addPropertyChangeListener(listener,parentDisposable); } @Override @Nullable public Charset getCachedCharsetFromContent(@NotNull Document document) { - return EncodingManager.getInstance().getCachedCharsetFromContent(document); + return myIdeEncodingManager.getCachedCharsetFromContent(document); + } + + @Override + public void initComponent() { + if (myProjectCharset == null) { + // if the project charset was not specified, use the IDE encoding, save this back + myProjectCharset = myIdeEncodingManager.getDefaultCharset(); + } + } + + @Override + public void disposeComponent() { } }