From 21c0cdee40757ed7cc9f9e31e3d1e3a3238b6691 Mon Sep 17 00:00:00 2001
From: hjk <qthjk@ovi.com>
Date: Thu, 19 Jan 2012 23:23:43 +0100
Subject: [PATCH] Core::Filemanager: make some methods static

This follows suit to the ICore changes.

Change-Id: Iba2de1b1e3f2574fd1459892eae702e6af1cc7dc
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
---
 src/plugins/bazaar/bazaarplugin.cpp           |   2 +-
 .../coreplugin/dialogs/shortcutsettings.cpp   |   2 +-
 .../editormanager/editormanager.cpp           |  23 +-
 src/plugins/coreplugin/externaltool.cpp       |  11 +-
 src/plugins/coreplugin/filemanager.cpp        | 247 ++++++++++--------
 src/plugins/coreplugin/filemanager.h          |  82 +++---
 src/plugins/coreplugin/icore.h                |   2 +-
 src/plugins/coreplugin/mainwindow.cpp         |  23 +-
 src/plugins/coreplugin/mainwindow.h           |   1 -
 src/plugins/coreplugin/vcsmanager.cpp         |   3 +-
 src/plugins/cpptools/cpptoolsplugin.cpp       |   3 +-
 src/plugins/cvs/cvsplugin.cpp                 |   2 +-
 src/plugins/fakevim/fakevimplugin.cpp         |   7 +-
 .../genericprojectmanager/genericproject.cpp  |   9 +-
 src/plugins/git/gitplugin.cpp                 |   5 +-
 src/plugins/madde/qt4maemotarget.cpp          |   4 +-
 src/plugins/mercurial/mercurialplugin.cpp     |   2 +-
 src/plugins/perforce/perforceplugin.cpp       |   2 +-
 .../baseprojectwizarddialog.cpp               |   5 +-
 .../foldernavigationwidget.cpp                |   9 +-
 .../projectexplorer/projectexplorer.cpp       |  29 +-
 .../projectexplorersettingspage.cpp           |  10 +-
 src/plugins/qmlprojectmanager/qmlproject.cpp  |   4 +-
 src/plugins/qt4projectmanager/qt4nodes.cpp    |   8 +-
 .../resourceeditor/resourceeditorw.cpp        |   2 +-
 src/plugins/subversion/subversionplugin.cpp   |   2 +-
 src/plugins/tasklist/taskfilefactory.cpp      |   2 +-
 src/plugins/texteditor/basefilefind.cpp       |   2 +-
 28 files changed, 241 insertions(+), 262 deletions(-)

diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp
index 2514f7ee9fb..e144c6632cc 100644
--- a/src/plugins/bazaar/bazaarplugin.cpp
+++ b/src/plugins/bazaar/bazaarplugin.cpp
@@ -641,7 +641,7 @@ bool BazaarPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submit
     QStringList files = commitEditor->checkedFiles();
     if (!files.empty()) {
         //save the commit message
-        if (!Core::ICore::fileManager()->saveFile(editorFile))
+        if (!Core::FileManager::saveFile(editorFile))
             return false;
 
         //rewrite entries of the form 'file => newfile' to 'newfile' because
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
index 046d9a5f0fe..ea492934bc7 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
@@ -266,7 +266,7 @@ void ShortcutSettings::defaultAction()
 
 void ShortcutSettings::exportAction()
 {
-    QString fileName = FileManager::instance()->getSaveFileNameWithExtension(
+    QString fileName = FileManager::getSaveFileNameWithExtension(
         tr("Export Keyboard Mapping Scheme"),
         ICore::resourcePath() + QLatin1String("/schemes/"),
         tr("Keyboard Mapping Scheme (*.kms)"));
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 9809c6e4f5c..887ed1cba83 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -536,7 +536,7 @@ void EditorManager::removeEditor(IEditor *editor)
     bool isDuplicate = d->m_editorModel->isDuplicate(editor);
     d->m_editorModel->removeEditor(editor);
     if (!isDuplicate)
-        FileManager::instance()->removeFile(editor->file());
+        FileManager::removeFile(editor->file());
     ICore::removeContextObject(editor);
 }
 
@@ -870,8 +870,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
     //ask whether to save modified files
     if (askAboutModifiedEditors) {
         bool cancelled = false;
-        QList<IFile*> list = ICore::fileManager()->
-            saveModifiedFiles(filesForEditors(acceptedEditors), &cancelled);
+        QList<IFile*> list = FileManager::saveModifiedFiles(filesForEditors(acceptedEditors), &cancelled);
         if (cancelled)
             return false;
         if (!list.isEmpty()) {
@@ -1206,10 +1205,9 @@ void EditorManager::addEditor(IEditor *editor, bool isDuplicate)
     if (!isDuplicate) {
         const bool isTemporary = editor->isTemporary();
         const bool addWatcher = !isTemporary;
-        ICore::fileManager()->addFile(editor->file(), addWatcher);
+        FileManager::addFile(editor->file(), addWatcher);
         if (!isTemporary)
-            ICore::fileManager()->addToRecentFiles(editor->file()->fileName(),
-                                                         editor->id());
+            FileManager::addToRecentFiles(editor->file()->fileName(), editor->id());
     }
     emit editorOpened(editor);
 }
@@ -1367,8 +1365,7 @@ QStringList EditorManager::getOpenFileNames() const
 {
     QString selectedFilter;
     const QString &fileFilters = ICore::mimeDatabase()->allFiltersString(&selectedFilter);
-    return ICore::fileManager()->getOpenFileNames(fileFilters,
-                                                              QString(), &selectedFilter);
+    return FileManager::getOpenFileNames(fileFilters, QString(), &selectedFilter);
 }
 
 
@@ -1485,7 +1482,7 @@ bool EditorManager::saveFile(IFile *fileParam)
     bool isReadOnly;
 
     // try saving, no matter what isReadOnly tells us
-    success = ICore::fileManager()->saveFile(file, QString(), &isReadOnly);
+    success = FileManager::saveFile(file, QString(), &isReadOnly);
 
     if (!success && isReadOnly) {
         MakeWritableResult answer =
@@ -1497,7 +1494,7 @@ bool EditorManager::saveFile(IFile *fileParam)
 
         file->checkPermissions();
 
-        success = ICore::fileManager()->saveFile(file);
+        success = FileManager::saveFile(file);
     }
 
     if (success) {
@@ -1571,7 +1568,7 @@ bool EditorManager::saveFileAs(IFile *fileParam)
     QString selectedFilter =
         ICore::mimeDatabase()->findByFile(QFileInfo(file->fileName())).filterString();
     const QString &absoluteFilePath =
-        ICore::fileManager()->getSaveAsFileName(file, filter, &selectedFilter);
+        FileManager::getSaveAsFileName(file, filter, &selectedFilter);
 
     if (absoluteFilePath.isEmpty())
         return false;
@@ -1584,7 +1581,7 @@ bool EditorManager::saveFileAs(IFile *fileParam)
         }
     }
 
-    const bool success = ICore::fileManager()->saveFile(file, absoluteFilePath);
+    const bool success = FileManager::saveFile(file, absoluteFilePath);
     file->checkPermissions();
 
     // @todo: There is an issue to be treated here. The new file might be of a different mime
@@ -1614,7 +1611,7 @@ void EditorManager::addFileToRecentFiles(IFile *file)
         }
     }
     if (!isTemporary)
-        ICore::fileManager()->addToRecentFiles(file->fileName(), editorId);
+        FileManager::addToRecentFiles(file->fileName(), editorId);
 }
 
 void EditorManager::gotoNextDocHistory()
diff --git a/src/plugins/coreplugin/externaltool.cpp b/src/plugins/coreplugin/externaltool.cpp
index 85633db2967..691628440be 100644
--- a/src/plugins/coreplugin/externaltool.cpp
+++ b/src/plugins/coreplugin/externaltool.cpp
@@ -603,12 +603,12 @@ void ExternalToolRunner::run()
         if (IEditor *editor = EditorManager::instance()->currentEditor()) {
             m_expectedFileName = editor->file()->fileName();
             bool cancelled = false;
-            FileManager::instance()->saveModifiedFiles(QList<IFile *>() << editor->file(), &cancelled);
+            FileManager::saveModifiedFiles(QList<IFile *>() << editor->file(), &cancelled);
             if (cancelled) {
                 deleteLater();
                 return;
             }
-            FileManager::instance()->expectFileChange(m_expectedFileName);
+            FileManager::expectFileChange(m_expectedFileName);
         }
     }
     m_process = new Utils::QtcProcess(this);
@@ -641,7 +641,7 @@ void ExternalToolRunner::finished(int exitCode, QProcess::ExitStatus status)
             emit ExternalToolManager::instance()->replaceSelectionRequested(m_processOutput);
         }
         if (m_tool->modifiesCurrentDocument()) {
-            FileManager::instance()->unexpectFileChange(m_expectedFileName);
+            FileManager::unexpectFileChange(m_expectedFileName);
         }
     }
     ICore::messageManager()->printToOutputPane(
@@ -651,9 +651,8 @@ void ExternalToolRunner::finished(int exitCode, QProcess::ExitStatus status)
 
 void ExternalToolRunner::error(QProcess::ProcessError error)
 {
-    if (m_tool->modifiesCurrentDocument()) {
-        FileManager::instance()->unexpectFileChange(m_expectedFileName);
-    }
+    if (m_tool->modifiesCurrentDocument())
+        FileManager::unexpectFileChange(m_expectedFileName);
     // TODO inform about errors
     Q_UNUSED(error);
     deleteLater();
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index 6ed6546b0d8..a7b970544c3 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -102,6 +102,15 @@ static const char useProjectDirectoryKeyC[] = "UseProjectsDirectory";
 
 
 namespace Core {
+
+static void readSettings();
+
+static QList<IFile *> saveModifiedFilesHelper(const QList<IFile *> &files,
+                               bool *cancelled, bool silently,
+                               const QString &message,
+                               const QString &alwaysSaveMessage = QString(),
+                               bool *alwaysSave = 0);
+
 namespace Internal {
 
 struct OpenWithEntry
@@ -125,12 +134,12 @@ struct FileState
 };
 
 
-struct FileManagerPrivate {
-    explicit FileManagerPrivate(FileManager *q, QMainWindow *mw);
+struct FileManagerPrivate
+{
+    explicit FileManagerPrivate(QMainWindow *mw);
     QFileSystemWatcher *fileWatcher();
     QFileSystemWatcher *linkWatcher();
 
-    static FileManager *m_instance;
     QMap<QString, FileState> m_states;
     QSet<QString> m_changedFiles;
     QList<IFile *> m_filesWithoutWatch;
@@ -156,6 +165,9 @@ struct FileManagerPrivate {
     IFile *m_blockedIFile;
 };
 
+static FileManager *m_instance;
+static Internal::FileManagerPrivate *d;
+
 QFileSystemWatcher *FileManagerPrivate::fileWatcher()
 {
     if (!m_fileWatcher) {
@@ -181,9 +193,7 @@ QFileSystemWatcher *FileManagerPrivate::linkWatcher()
 #endif
 }
 
-FileManager *FileManagerPrivate::m_instance = 0;
-
-FileManagerPrivate::FileManagerPrivate(FileManager *q, QMainWindow *mw) :
+FileManagerPrivate::FileManagerPrivate(QMainWindow *mw) :
     m_mainWindow(mw),
     m_fileWatcher(0),
     m_linkWatcher(0),
@@ -196,7 +206,6 @@ FileManagerPrivate::FileManagerPrivate(FileManager *q, QMainWindow *mw) :
 #endif
     m_blockedIFile(0)
 {
-    m_instance = q;
 }
 
 } // namespace Internal
@@ -206,10 +215,13 @@ Q_DECLARE_METATYPE(Core::Internal::OpenWithEntry)
 
 namespace Core {
 
+using namespace Internal;
+
 FileManager::FileManager(QMainWindow *mw)
-  : QObject(mw),
-    d(new Internal::FileManagerPrivate(this, mw))
+  : QObject(mw)
 {
+    d = new FileManagerPrivate(mw);
+    m_instance = this;
     connect(d->m_mainWindow, SIGNAL(windowActivated()),
         this, SLOT(mainWindowActivated()));
     connect(ICore::instance(), SIGNAL(contextChanged(Core::IContext*,Core::Context)),
@@ -225,7 +237,46 @@ FileManager::~FileManager()
 
 FileManager *FileManager::instance()
 {
-    return Internal::FileManagerPrivate::m_instance;
+    return m_instance;
+}
+
+/* only called from addFileInfo(IFile *) */
+static void addFileInfo(const QString &fileName, IFile *file, bool isLink)
+{
+    FileStateItem state;
+    if (!fileName.isEmpty()) {
+        const QFileInfo fi(fileName);
+        state.modified = fi.lastModified();
+        state.permissions = fi.permissions();
+        // Add watcher if we don't have that already
+        if (!d->m_states.contains(fileName)) {
+            d->m_states.insert(fileName, FileState());
+
+        }
+        QFileSystemWatcher *watcher = 0;
+        if (isLink)
+            watcher = d->linkWatcher();
+        else
+            watcher = d->fileWatcher();
+        if (!watcher->files().contains(fileName))
+            watcher->addPath(fileName);
+
+        d->m_states[fileName].lastUpdatedState.insert(file, state);
+    }
+    d->m_filesWithWatch[file].append(fileName); // inserts a new QStringList if not already there
+}
+
+/* Adds the IFile's file and possibly it's final link target to both m_states
+   (if it's file name is not empty), and the m_filesWithWatch list,
+   and adds a file watcher for each if not already done.
+   (The added file names are guaranteed to be absolute and cleaned.) */
+static void addFileInfo(IFile *file)
+{
+    const QString fixedName = FileManager::fixFileName(file->fileName(), FileManager::KeepLinks);
+    const QString fixedResolvedName = FileManager::fixFileName(file->fileName(), FileManager::ResolveLinks);
+    addFileInfo(fixedResolvedName, file, false);
+    if (fixedName != fixedResolvedName)
+        addFileInfo(fixedName, file, true);
 }
 
 /*!
@@ -242,7 +293,7 @@ void FileManager::addFiles(const QList<IFile *> &files, bool addWatcher)
 
         foreach (IFile *file, files) {
             if (file && !d->m_filesWithoutWatch.contains(file)) {
-                connect(file, SIGNAL(destroyed(QObject *)), this, SLOT(fileDestroyed(QObject *)));
+                connect(file, SIGNAL(destroyed(QObject *)), m_instance, SLOT(fileDestroyed(QObject *)));
                 d->m_filesWithoutWatch.append(file);
             }
         }
@@ -251,65 +302,51 @@ void FileManager::addFiles(const QList<IFile *> &files, bool addWatcher)
 
     foreach (IFile *file, files) {
         if (file && !d->m_filesWithWatch.contains(file)) {
-            connect(file, SIGNAL(changed()), this, SLOT(checkForNewFileName()));
-            connect(file, SIGNAL(destroyed(QObject *)), this, SLOT(fileDestroyed(QObject *)));
+            connect(file, SIGNAL(changed()), m_instance, SLOT(checkForNewFileName()));
+            connect(file, SIGNAL(destroyed(QObject *)), m_instance, SLOT(fileDestroyed(QObject *)));
             addFileInfo(file);
         }
     }
 }
 
-/* Adds the IFile's file and possibly it's final link target to both m_states
-   (if it's file name is not empty), and the m_filesWithWatch list,
-   and adds a file watcher for each if not already done.
-   (The added file names are guaranteed to be absolute and cleaned.) */
-void FileManager::addFileInfo(IFile *file)
-{
-    const QString fixedName = fixFileName(file->fileName(), KeepLinks);
-    const QString fixedResolvedName = fixFileName(file->fileName(), ResolveLinks);
-    addFileInfo(fixedResolvedName, file, false);
-    if (fixedName != fixedResolvedName)
-        addFileInfo(fixedName, file, true);
-}
 
-/* only called from addFileInfo(IFile *) */
-void FileManager::addFileInfo(const QString &fileName, IFile *file, bool isLink)
+/* Removes all occurrences of the IFile from m_filesWithWatch and m_states.
+   If that results in a file no longer being referenced by any IFile, this
+   also removes the file watcher.
+*/
+static void removeFileInfo(IFile *file)
 {
-    Internal::FileStateItem state;
-    if (!fileName.isEmpty()) {
-        const QFileInfo fi(fileName);
-        state.modified = fi.lastModified();
-        state.permissions = fi.permissions();
-        // Add watcher if we don't have that already
-        if (!d->m_states.contains(fileName)) {
-            d->m_states.insert(fileName, Internal::FileState());
-
+    if (!d->m_filesWithWatch.contains(file))
+        return;
+    foreach (const QString &fileName, d->m_filesWithWatch.value(file)) {
+        if (!d->m_states.contains(fileName))
+            continue;
+        d->m_states[fileName].lastUpdatedState.remove(file);
+        if (d->m_states.value(fileName).lastUpdatedState.isEmpty()) {
+            if (d->m_fileWatcher && d->m_fileWatcher->files().contains(fileName))
+                d->m_fileWatcher->removePath(fileName);
+            if (d->m_linkWatcher && d->m_linkWatcher->files().contains(fileName))
+                d->m_linkWatcher->removePath(fileName);
+            d->m_states.remove(fileName);
         }
-        QFileSystemWatcher *watcher = 0;
-        if (isLink)
-            watcher = d->linkWatcher();
-        else
-            watcher = d->fileWatcher();
-        if (!watcher->files().contains(fileName))
-            watcher->addPath(fileName);
-
-        d->m_states[fileName].lastUpdatedState.insert(file, state);
     }
-    d->m_filesWithWatch[file].append(fileName); // inserts a new QStringList if not already there
+    d->m_filesWithWatch.remove(file);
 }
 
 /// Dumps the state of the file manager's map
 /// For debugging purposes
-void FileManager::dump()
+/*
+static void dump()
 {
     qDebug() << "======== dumping state map";
-    QMap<QString, Internal::FileState>::const_iterator it, end;
+    QMap<QString, FileState>::const_iterator it, end;
     it = d->m_states.constBegin();
     end = d->m_states.constEnd();
     for (; it != end; ++it) {
         qDebug() << it.key();
         qDebug() << "   expected:" << it.value().expected.modified;
 
-        QMap<IFile *, Internal::FileStateItem>::const_iterator jt, jend;
+        QMap<IFile *, FileStateItem>::const_iterator jt, jend;
         jt = it.value().lastUpdatedState.constBegin();
         jend = it.value().lastUpdatedState.constEnd();
         for (; jt != jend; ++jt) {
@@ -327,6 +364,7 @@ void FileManager::dump()
     if (d->m_linkWatcher)
         qDebug() << d->m_linkWatcher->files();
 }
+*/
 
 /*!
     \fn void FileManager::renamedFile(const QString &from, const QString &to)
@@ -361,30 +399,6 @@ void FileManager::renamedFile(const QString &from, const QString &to)
         d->m_blockedIFile = 0;
     }
 }
-
-/* Removes all occurrences of the IFile from m_filesWithWatch and m_states.
-   If that results in a file no longer being referenced by any IFile, this
-   also removes the file watcher.
-*/
-void FileManager::removeFileInfo(IFile *file)
-{
-    if (!d->m_filesWithWatch.contains(file))
-        return;
-    foreach (const QString &fileName, d->m_filesWithWatch.value(file)) {
-        if (!d->m_states.contains(fileName))
-            continue;
-        d->m_states[fileName].lastUpdatedState.remove(file);
-        if (d->m_states.value(fileName).lastUpdatedState.isEmpty()) {
-            if (d->m_fileWatcher && d->m_fileWatcher->files().contains(fileName))
-                d->m_fileWatcher->removePath(fileName);
-            if (d->m_linkWatcher && d->m_linkWatcher->files().contains(fileName))
-                d->m_linkWatcher->removePath(fileName);
-            d->m_states.remove(fileName);
-        }
-    }
-    d->m_filesWithWatch.remove(file);
-}
-
 /*!
     \fn bool FileManager::addFile(IFile *files, bool addWatcher)
 
@@ -421,9 +435,9 @@ bool FileManager::removeFile(IFile *file)
     if (!d->m_filesWithoutWatch.removeOne(file)) {
         addWatcher = true;
         removeFileInfo(file);
-        disconnect(file, SIGNAL(changed()), this, SLOT(checkForNewFileName()));
+        disconnect(file, SIGNAL(changed()), m_instance, SLOT(checkForNewFileName()));
     }
-    disconnect(file, SIGNAL(destroyed(QObject *)), this, SLOT(fileDestroyed(QObject *)));
+    disconnect(file, SIGNAL(destroyed(QObject *)), m_instance, SLOT(fileDestroyed(QObject *)));
     return addWatcher;
 }
 
@@ -475,7 +489,7 @@ QString FileManager::fixFileName(const QString &fileName, FixMode fixmode)
 
     Returns the list of IFile's that have been modified.
 */
-QList<IFile *> FileManager::modifiedFiles() const
+QList<IFile *> FileManager::modifiedFiles()
 {
     QList<IFile *> modifiedFiles;
 
@@ -506,6 +520,18 @@ void FileManager::expectFileChange(const QString &fileName)
     d->m_expectedFileNames.insert(fileName);
 }
 
+/* only called from unblock and unexpect file change methods */
+static void updateExpectedState(const QString &fileName)
+{
+    if (fileName.isEmpty())
+        return;
+    if (d->m_states.contains(fileName)) {
+        QFileInfo fi(fileName);
+        d->m_states[fileName].expected.modified = fi.lastModified();
+        d->m_states[fileName].expected.permissions = fi.permissions();
+    }
+}
+
 /*!
     \fn void FileManager::unexpectFileChange(const QString &fileName)
 
@@ -530,18 +556,6 @@ void FileManager::unexpectFileChange(const QString &fileName)
         updateExpectedState(fixedResolvedName);
 }
 
-/* only called from unblock and unexpect file change methods */
-void FileManager::updateExpectedState(const QString &fileName)
-{
-    if (fileName.isEmpty())
-        return;
-    if (d->m_states.contains(fileName)) {
-        QFileInfo fi(fileName);
-        d->m_states[fileName].expected.modified = fi.lastModified();
-        d->m_states[fileName].expected.permissions = fi.permissions();
-    }
-}
-
 /*!
     \fn QList<IFile*> FileManager::saveModifiedFilesSilently(const QList<IFile*> &files)
 
@@ -550,7 +564,7 @@ void FileManager::updateExpectedState(const QString &fileName)
 */
 QList<IFile *> FileManager::saveModifiedFilesSilently(const QList<IFile *> &files, bool *cancelled)
 {
-    return saveModifiedFiles(files, cancelled, true, QString());
+    return saveModifiedFilesHelper(files, cancelled, true, QString());
 }
 
 /*!
@@ -570,10 +584,10 @@ QList<IFile *> FileManager::saveModifiedFiles(const QList<IFile *> &files,
                                               const QString &alwaysSaveMessage,
                                               bool *alwaysSave)
 {
-    return saveModifiedFiles(files, cancelled, false, message, alwaysSaveMessage, alwaysSave);
+    return saveModifiedFilesHelper(files, cancelled, false, message, alwaysSaveMessage, alwaysSave);
 }
 
-QList<IFile *> FileManager::saveModifiedFiles(const QList<IFile *> &files,
+static QList<IFile *> saveModifiedFilesHelper(const QList<IFile *> &files,
                                               bool *cancelled,
                                               bool silently,
                                               const QString &message,
@@ -606,7 +620,7 @@ QList<IFile *> FileManager::saveModifiedFiles(const QList<IFile *> &files,
         if (silently) {
             filesToSave = modifiedFiles;
         } else {
-            Internal::SaveItemsDialog dia(d->m_mainWindow, modifiedFiles);
+            SaveItemsDialog dia(d->m_mainWindow, modifiedFiles);
             if (!message.isEmpty())
                 dia.setMessage(message);
             if (!alwaysSaveMessage.isNull())
@@ -865,12 +879,12 @@ void FileManager::checkForReload()
     QMap<IFile*, QString> filesToSave;
 
     // collect file information
-    QMap<QString, Internal::FileStateItem> currentStates;
+    QMap<QString, FileStateItem> currentStates;
     QMap<QString, IFile::ChangeType> changeTypes;
     QSet<IFile *> changedIFiles;
     foreach (const QString &fileName, d->m_changedFiles) {
         IFile::ChangeType type = IFile::TypeContents;
-        Internal::FileStateItem state;
+        FileStateItem state;
         QFileInfo fi(fileName);
         if (!fi.exists()) {
             type = IFile::TypeRemoved;
@@ -915,9 +929,9 @@ void FileManager::checkForReload()
             if (!currentStates.contains(fileName))
                 continue;
 
-            Internal::FileStateItem currentState = currentStates.value(fileName);
-            Internal::FileStateItem expectedState = d->m_states.value(fileName).expected;
-            Internal::FileStateItem lastState = d->m_states.value(fileName).lastUpdatedState.value(file);
+            FileStateItem currentState = currentStates.value(fileName);
+            FileStateItem expectedState = d->m_states.value(fileName).expected;
+            FileStateItem lastState = d->m_states.value(fileName).lastUpdatedState.value(file);
 
             // did the file actually change?
             if (lastState.modified == currentState.modified && lastState.permissions == currentState.permissions)
@@ -1086,7 +1100,7 @@ void FileManager::addToRecentFiles(const QString &fileName, const Id &editorId)
     QMutableListIterator<RecentFile > it(d->m_recentFiles);
     while (it.hasNext()) {
         RecentFile file = it.next();
-        QString recentUnifiedForm(fixFileName(file.first, KeepLinks));
+        QString recentUnifiedForm(fixFileName(file.first, FileManager::KeepLinks));
         if (unifiedForm == recentUnifiedForm)
             it.remove();
     }
@@ -1111,7 +1125,7 @@ void FileManager::clearRecentFiles()
 
     Returns the list of recent files.
 */
-QList<FileManager::RecentFile> FileManager::recentFiles() const
+QList<FileManager::RecentFile> FileManager::recentFiles()
 {
     return d->m_recentFiles;
 }
@@ -1136,7 +1150,7 @@ void FileManager::saveSettings()
     s->endGroup();
 }
 
-void FileManager::readSettings()
+void readSettings()
 {
     QSettings *s = Core::ICore::settings();
     d->m_recentFiles.clear();
@@ -1151,7 +1165,7 @@ void FileManager::readSettings()
         if (ids.hasNext()) // guard against old or weird settings
             editorId = ids.next();
         if (QFileInfo(fileName).isFile())
-            d->m_recentFiles.append(RecentFile(QDir::fromNativeSeparators(fileName), // from native to guard against old settings
+            d->m_recentFiles.append(FileManager::RecentFile(QDir::fromNativeSeparators(fileName), // from native to guard against old settings
                                                Id(editorId)));
     }
 
@@ -1180,7 +1194,7 @@ void FileManager::setCurrentFile(const QString &filePath)
     if (d->m_currentFile == filePath)
         return;
     d->m_currentFile = filePath;
-    emit currentFileChanged(d->m_currentFile);
+    emit m_instance->currentFileChanged(d->m_currentFile);
 }
 
 /*!
@@ -1191,7 +1205,7 @@ void FileManager::setCurrentFile(const QString &filePath)
 
   \sa setCurrentFile
   */
-QString FileManager::currentFile() const
+QString FileManager::currentFile()
 {
     return d->m_currentFile;
 }
@@ -1204,7 +1218,7 @@ QString FileManager::currentFile() const
   \sa setFileDialogLastVisitedDirectory
 */
 
-QString FileManager::fileDialogInitialDirectory() const
+QString FileManager::fileDialogInitialDirectory()
 {
     if (!d->m_currentFile.isEmpty())
         return QFileInfo(d->m_currentFile).absolutePath();
@@ -1218,7 +1232,7 @@ QString FileManager::fileDialogInitialDirectory() const
   \sa setProjectsDirectory, setUseProjectsDirectory
 */
 
-QString FileManager::projectsDirectory() const
+QString FileManager::projectsDirectory()
 {
     return d->m_projectsDirectory;
 }
@@ -1243,7 +1257,7 @@ void FileManager::setProjectsDirectory(const QString &dir)
   \sa setProjectsDirectory, setUseProjectsDirectory
 */
 
-bool FileManager::useProjectsDirectory() const
+bool FileManager::useProjectsDirectory()
 {
     return d->m_useProjectsDirectory;
 }
@@ -1268,7 +1282,7 @@ void FileManager::setUseProjectsDirectory(bool useProjectsDirectory)
 
 */
 
-QString FileManager::fileDialogLastVisitedDirectory() const
+QString FileManager::fileDialogLastVisitedDirectory()
 {
     return d->m_lastVisitedDirectory;
 }
@@ -1289,7 +1303,7 @@ void FileManager::setFileDialogLastVisitedDirectory(const QString &directory)
 
 void FileManager::notifyFilesChangedInternally(const QStringList &files)
 {
-    emit filesChangedInternally(files);
+    emit m_instance->filesChangedInternally(files);
 }
 
 void FileManager::populateOpenWithMenu(QMenu *menu, const QString &fileName)
@@ -1311,7 +1325,7 @@ void FileManager::populateOpenWithMenu(QMenu *menu, const QString &fileName)
                 // Add action to open with this very editor factory
                 QString const actionTitle = editorFactory->displayName();
                 QAction * const action = menu->addAction(actionTitle);
-                Internal::OpenWithEntry entry;
+                OpenWithEntry entry;
                 entry.editorFactory = editorFactory;
                 entry.fileName = fileName;
                 action->setData(qVariantFromValue(entry));
@@ -1319,7 +1333,7 @@ void FileManager::populateOpenWithMenu(QMenu *menu, const QString &fileName)
             // Add all suitable external editors
             foreach (IExternalEditor *externalEditor, externalEditors) {
                 QAction * const action = menu->addAction(externalEditor->displayName());
-                Internal::OpenWithEntry entry;
+                OpenWithEntry entry;
                 entry.externalEditor = externalEditor;
                 entry.fileName = fileName;
                 action->setData(qVariantFromValue(entry));
@@ -1334,7 +1348,7 @@ void FileManager::executeOpenWithMenuAction(QAction *action)
     QTC_ASSERT(action, return);
     EditorManager *em = EditorManager::instance();
     const QVariant data = action->data();
-    Internal::OpenWithEntry entry = qVariantValue<Internal::OpenWithEntry>(data);
+    OpenWithEntry entry = qVariantValue<OpenWithEntry>(data);
     if (entry.editorFactory) {
         // close any open editors that have this file open, but have a different type.
         QList<IEditor *> editorsOpenForFile = em->editorsForFileName(entry.fileName);
@@ -1354,19 +1368,22 @@ void FileManager::executeOpenWithMenuAction(QAction *action)
         em->openExternalEditor(entry.fileName, entry.externalEditor->id());
 }
 
+void FileManager::slotExecuteOpenWithMenuAction(QAction *action)
+{
+    executeOpenWithMenuAction(action);
+}
+
 // -------------- FileChangeBlocker
 
 FileChangeBlocker::FileChangeBlocker(const QString &fileName)
     : m_fileName(fileName)
 {
-    Core::FileManager *fm = Core::ICore::fileManager();
-    fm->expectFileChange(fileName);
+    FileManager::expectFileChange(fileName);
 }
 
 FileChangeBlocker::~FileChangeBlocker()
 {
-    Core::FileManager *fm = Core::ICore::fileManager();
-    fm->unexpectFileChange(m_fileName);
+    FileManager::unexpectFileChange(m_fileName);
 }
 
 } // namespace Core
diff --git a/src/plugins/coreplugin/filemanager.h b/src/plugins/coreplugin/filemanager.h
index 9b91198440f..82d27fdee1a 100644
--- a/src/plugins/coreplugin/filemanager.h
+++ b/src/plugins/coreplugin/filemanager.h
@@ -48,15 +48,10 @@ QT_END_NAMESPACE
 
 namespace Core {
 
-class ICore;
 class IContext;
 class IFile;
 class IVersionControl;
 
-namespace Internal {
-struct FileManagerPrivate;
-}
-
 class CORE_EXPORT FileManager : public QObject
 {
     Q_OBJECT
@@ -74,44 +69,44 @@ public:
     static FileManager *instance();
 
     // file pool to monitor
-    void addFiles(const QList<IFile *> &files, bool addWatcher = true);
-    void addFile(IFile *file, bool addWatcher = true);
-    bool removeFile(IFile *file);
-    QList<IFile *> modifiedFiles() const;
+    static void addFiles(const QList<IFile *> &files, bool addWatcher = true);
+    static void addFile(IFile *file, bool addWatcher = true);
+    static bool removeFile(IFile *file);
+    static QList<IFile *> modifiedFiles();
 
-    void renamedFile(const QString &from, const QString &to);
+    static void renamedFile(const QString &from, const QString &to);
 
-    void expectFileChange(const QString &fileName);
-    void unexpectFileChange(const QString &fileName);
+    static void expectFileChange(const QString &fileName);
+    static void unexpectFileChange(const QString &fileName);
 
     // recent files
-    void addToRecentFiles(const QString &fileName, const Id &editorId = Id());
+    static void addToRecentFiles(const QString &fileName, const Id &editorId = Id());
     Q_SLOT void clearRecentFiles();
-    QList<RecentFile> recentFiles() const;
+    static QList<RecentFile> recentFiles();
 
-    void saveSettings();
+    static void saveSettings();
 
     // current file
-    void setCurrentFile(const QString &filePath);
-    QString currentFile() const;
+    static void setCurrentFile(const QString &filePath);
+    static QString currentFile();
 
     // helper methods
     static QString fixFileName(const QString &fileName, FixMode fixmode);
 
-    bool saveFile(IFile *file, const QString &fileName = QString(), bool *isReadOnly = 0);
+    static bool saveFile(IFile *file, const QString &fileName = QString(), bool *isReadOnly = 0);
 
-    QStringList getOpenFileNames(const QString &filters,
+    static QStringList getOpenFileNames(const QString &filters,
                                  const QString path = QString(),
                                  QString *selectedFilter = 0);
-    QString getSaveFileName(const QString &title, const QString &pathIn,
+    static QString getSaveFileName(const QString &title, const QString &pathIn,
                             const QString &filter = QString(), QString *selectedFilter = 0);
-    QString getSaveFileNameWithExtension(const QString &title, const QString &pathIn,
+    static QString getSaveFileNameWithExtension(const QString &title, const QString &pathIn,
                                          const QString &filter);
-    QString getSaveAsFileName(IFile *file, const QString &filter = QString(),
+    static QString getSaveAsFileName(IFile *file, const QString &filter = QString(),
                               QString *selectedFilter = 0);
 
-    QList<IFile *> saveModifiedFilesSilently(const QList<IFile *> &files, bool *cancelled = 0);
-    QList<IFile *> saveModifiedFiles(const QList<IFile *> &files,
+    static QList<IFile *> saveModifiedFilesSilently(const QList<IFile *> &files, bool *cancelled = 0);
+    static QList<IFile *> saveModifiedFiles(const QList<IFile *> &files,
                                      bool *cancelled = 0,
                                      const QString &message = QString(),
                                      const QString &alwaysSaveMessage = QString(),
@@ -126,25 +121,27 @@ public:
                                              QWidget *parent,
                                              bool displaySaveAsButton = false);
 
-    QString fileDialogLastVisitedDirectory() const;
-    void setFileDialogLastVisitedDirectory(const QString &);
+    static QString fileDialogLastVisitedDirectory();
+    static void setFileDialogLastVisitedDirectory(const QString &);
 
-    QString fileDialogInitialDirectory() const;
+    static QString fileDialogInitialDirectory();
 
-    bool useProjectsDirectory() const;
-    void setUseProjectsDirectory(bool);
+    static bool useProjectsDirectory();
+    static void setUseProjectsDirectory(bool);
 
-    QString projectsDirectory() const;
-    void setProjectsDirectory(const QString &);
+    static QString projectsDirectory();
+    static void setProjectsDirectory(const QString &);
 
     static void populateOpenWithMenu(QMenu *menu, const QString &fileName);
 
-public slots:
     /* Used to notify e.g. the code model to update the given files. Does *not*
        lead to any editors to reload or any other editor manager actions. */
-    void notifyFilesChangedInternally(const QStringList &files);
+    static void notifyFilesChangedInternally(const QStringList &files);
 
-    void executeOpenWithMenuAction(QAction *action);
+    static void executeOpenWithMenuAction(QAction *action);
+
+public slots:
+    void slotExecuteOpenWithMenuAction(QAction *action);
 
 signals:
     void currentFileChanged(const QString &filePath);
@@ -159,23 +156,6 @@ private slots:
     void changedFile(const QString &file);
     void mainWindowActivated();
     void syncWithEditor(Core::IContext *context);
-
-private:
-    void readSettings();
-    void dump();
-    void addFileInfo(IFile *file);
-    void addFileInfo(const QString &fileName, IFile *file, bool isLink);
-    void removeFileInfo(IFile *file);
-
-    void updateExpectedState(const QString &fileName);
-
-    QList<IFile *> saveModifiedFiles(const QList<IFile *> &files,
-                               bool *cancelled, bool silently,
-                               const QString &message,
-                               const QString &alwaysSaveMessage = QString(),
-                               bool *alwaysSave = 0);
-
-    Internal::FileManagerPrivate *d;
 };
 
 /*! The FileChangeBlocker blocks all change notifications to all IFile * that
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index d15d657d338..829d0426621 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -94,7 +94,7 @@ public:
                                        QWidget *parent = 0);
 
     static ActionManager *actionManager();
-    static FileManager *fileManager();
+    static QT_DEPRECATED FileManager *fileManager(); // Use FileManager::... directly.
     static MessageManager *messageManager();
     static EditorManager *editorManager();
     static ProgressManager *progressManager();
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 11ba5fbe82f..eb4f18cbe9e 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -138,7 +138,6 @@ MainWindow::MainWindow() :
     m_actionManager(new ActionManagerPrivate(this)),
     m_editorManager(0),
     m_externalToolManager(0),
-    m_fileManager(new FileManager(this)),
     m_progressManager(new ProgressManagerPrivate()),
     m_scriptManager(new ScriptManagerPrivate(this)),
     m_variableManager(new VariableManager),
@@ -171,6 +170,7 @@ MainWindow::MainWindow() :
 #endif
     m_toggleSideBarButton(new QToolButton)
 {
+    (void) new FileManager(this);
     OutputPaneManager::create();
 
     setWindowTitle(tr("Qt Creator"));
@@ -376,7 +376,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
 
     // Save opened files
     bool cancelled;
-    QList<IFile*> notSaved = fileManager()->saveModifiedFiles(fileManager()->modifiedFiles(), &cancelled);
+    QList<IFile*> notSaved = FileManager::saveModifiedFiles(FileManager::modifiedFiles(), &cancelled);
     if (cancelled || !notSaved.isEmpty()) {
         event->ignore();
         return;
@@ -962,18 +962,17 @@ void MainWindow::showNewItemDialog(const QString &title,
 
     QString path = defaultLocation;
     if (path.isEmpty()) {
-        const FileManager *fm = m_coreImpl->fileManager();
         switch (wizard->kind()) {
         case IWizard::ProjectWizard:
             // Project wizards: Check for projects directory or
             // use last visited directory of file dialog. Never start
             // at current.
-            path = fm->useProjectsDirectory() ?
-                       fm->projectsDirectory() :
-                       fm->fileDialogLastVisitedDirectory();
+            path = FileManager::useProjectsDirectory() ?
+                       FileManager::projectsDirectory() :
+                       FileManager::fileDialogLastVisitedDirectory();
             break;
         default:
-            path = fm->fileDialogInitialDirectory();
+            path = FileManager::fileDialogInitialDirectory();
             break;
         }
     }
@@ -993,7 +992,7 @@ bool MainWindow::showOptionsDialog(const QString &category,
 
 void MainWindow::saveAll()
 {
-    m_fileManager->saveModifiedFilesSilently(m_fileManager->modifiedFiles());
+    FileManager::saveModifiedFilesSilently(FileManager::modifiedFiles());
     emit m_coreImpl->saveSettingsRequested();
 }
 
@@ -1030,7 +1029,7 @@ ActionManager *MainWindow::actionManager() const
 
 FileManager *MainWindow::fileManager() const
 {
-    return m_fileManager;
+    return FileManager::instance();
 }
 
 MessageManager *MainWindow::messageManager() const
@@ -1236,7 +1235,7 @@ void MainWindow::writeSettings()
 
     m_settings->endGroup();
 
-    m_fileManager->saveSettings();
+    FileManager::saveSettings();
     m_actionManager->saveSettings(m_settings);
     m_editorManager->saveSettings();
     m_navigationWidget->saveSettings(m_settings);
@@ -1296,7 +1295,7 @@ void MainWindow::aboutToShowRecentFiles()
     aci->menu()->clear();
 
     bool hasRecentFiles = false;
-    foreach (const FileManager::RecentFile &file, m_fileManager->recentFiles()) {
+    foreach (const FileManager::RecentFile &file, FileManager::recentFiles()) {
         hasRecentFiles = true;
         QAction *action = aci->menu()->addAction(
                     QDir::toNativeSeparators(Utils::withTildeHomePath(file.first)));
@@ -1310,7 +1309,7 @@ void MainWindow::aboutToShowRecentFiles()
         aci->menu()->addSeparator();
         QAction *action = aci->menu()->addAction(QCoreApplication::translate(
                                                      "Core", Core::Constants::TR_CLEAR_MENU));
-        connect(action, SIGNAL(triggered()), m_fileManager, SLOT(clearRecentFiles()));
+        connect(action, SIGNAL(triggered()), FileManager::instance(), SLOT(clearRecentFiles()));
     }
 }
 
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index f2a35f5e5fb..94e17434e72 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -188,7 +188,6 @@ private:
     ActionManagerPrivate *m_actionManager;
     EditorManager *m_editorManager;
     ExternalToolManager *m_externalToolManager;
-    FileManager *m_fileManager;
     MessageManager *m_messageManager;
     ProgressManagerPrivate *m_progressManager;
     ScriptManager *m_scriptManager;
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index eece2cf9ad3..a828a2ab627 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -179,10 +179,9 @@ VcsManager::~VcsManager()
 void VcsManager::extensionsInitialized()
 {
     // Change signal connections
-    FileManager *fileManager = ICore::fileManager();
     foreach (IVersionControl *versionControl, allVersionControls()) {
         connect(versionControl, SIGNAL(filesChanged(QStringList)),
-                fileManager, SIGNAL(filesChangedInternally(QStringList)));
+                FileManager::instance(), SIGNAL(filesChangedInternally(QStringList)));
         connect(versionControl, SIGNAL(repositoryChanged(QString)),
                 this, SIGNAL(repositoryChanged(QString)));
     }
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 8adc6f9f1c0..bfde1d2c84c 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -110,10 +110,9 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
     // Objects
     m_modelManager = new CppModelManager(this);
     Core::VcsManager *vcsManager = Core::ICore::vcsManager();
-    Core::FileManager *fileManager = Core::ICore::fileManager();
     connect(vcsManager, SIGNAL(repositoryChanged(QString)),
             m_modelManager, SLOT(updateModifiedSourceFiles()));
-    connect(fileManager, SIGNAL(filesChangedInternally(QStringList)),
+    connect(Core::FileManager::instance(), SIGNAL(filesChangedInternally(QStringList)),
             m_modelManager, SLOT(updateSourceFiles(QStringList)));
     addAutoReleasedObject(m_modelManager);
 
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 7b8ff0ad901..000c5f5fcbc 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -504,7 +504,7 @@ bool CvsPlugin::submitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor)
     bool closeEditor = true;
     if (!fileList.empty()) {
         // get message & commit
-        closeEditor = ICore::fileManager()->saveFile(fileIFace);
+        closeEditor = FileManager::saveFile(fileIFace);
         if (closeEditor)
             closeEditor = commit(m_commitMessageFileName, fileList);
     }
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index b1f6a64c151..0911de403ae 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -1497,7 +1497,7 @@ void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
         const QString fileName = handler->currentFileName();
         if (editor && editor->file()->fileName() == fileName) {
             // Handle that as a special case for nicer interaction with core
-            ICore::fileManager()->saveFile(editor->file());
+            FileManager::saveFile(editor->file());
             // Check result by reading back.
             QFile file3(fileName);
             file3.open(QIODevice::ReadOnly);
@@ -1512,9 +1512,8 @@ void FakeVimPluginPrivate::handleExCommand(bool *handled, const ExCommand &cmd)
         }
     } else if (cmd.matches("wa", "wall")) {
         // :w[all]
-        FileManager *fm = ICore::fileManager();
-        QList<IFile *> toSave = fm->modifiedFiles();
-        QList<IFile *> failed = fm->saveModifiedFilesSilently(toSave);
+        QList<IFile *> toSave = FileManager::modifiedFiles();
+        QList<IFile *> failed = FileManager::saveModifiedFilesSilently(toSave);
         if (failed.isEmpty())
             handler->showBlackMessage(tr("Saving succeeded"));
         else
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index cbe18127423..772e09ffd87 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -91,11 +91,10 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
     m_includesIFile = new GenericProjectFile(this, m_includesFileName, GenericProject::Configuration);
     m_configIFile   = new GenericProjectFile(this, m_configFileName, GenericProject::Configuration);
 
-    Core::FileManager *fm = Core::FileManager::instance();
-    fm->addFile(m_creatorIFile);
-    fm->addFile(m_filesIFile);
-    fm->addFile(m_includesIFile);
-    fm->addFile(m_configIFile);
+    Core::FileManager::addFile(m_creatorIFile);
+    Core::FileManager::addFile(m_filesIFile);
+    Core::FileManager::addFile(m_includesIFile);
+    Core::FileManager::addFile(m_configIFile);
 
     m_rootNode = new GenericProjectNode(this, m_creatorIFile);
 
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index f298e905f66..caaa3f34ecd 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -774,7 +774,7 @@ bool GitPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEdi
     bool closeEditor = true;
     if (model->hasCheckedFiles() || !m_commitAmendSHA1.isEmpty()) {
         // get message & commit
-        if (!Core::ICore::fileManager()->saveFile(fileIFace))
+        if (!Core::FileManager::saveFile(fileIFace))
             return false;
 
         closeEditor = m_gitClient->addAndCommit(m_submitRepository, editor->panelData(),
@@ -891,11 +891,10 @@ static bool ensureFileSaved(const QString &fileName)
     Core::IFile *file = editors.front()->file();
     if (!file || !file->isModified())
         return true;
-    Core::FileManager *fm = Core::ICore::fileManager();
     bool canceled;
     QList<Core::IFile *> files;
     files << file;
-    fm->saveModifiedFiles(files, &canceled);
+    Core::FileManager::saveModifiedFiles(files, &canceled);
     return !canceled;
 }
 
diff --git a/src/plugins/madde/qt4maemotarget.cpp b/src/plugins/madde/qt4maemotarget.cpp
index 9d3525ecd55..0a86e5a08c6 100644
--- a/src/plugins/madde/qt4maemotarget.cpp
+++ b/src/plugins/madde/qt4maemotarget.cpp
@@ -718,7 +718,7 @@ void AbstractDebBasedQt4MaemoTarget::handleTargetAddedSpecial()
     connect(m_controlFile, SIGNAL(modified()), SIGNAL(controlChanged()));
     m_changeLogFile = new WatchableFile(changeLogFilePath(), this);
     connect(m_changeLogFile, SIGNAL(modified()), SIGNAL(changeLogChanged()));
-    Core::FileManager::instance()->addFiles(QList<Core::IFile *>()
+    Core::FileManager::addFiles(QList<Core::IFile *>()
         << m_controlFile << m_changeLogFile);
     connect(m_filesWatcher, SIGNAL(directoryChanged(QString)), this,
         SLOT(handleDebianDirContentsChanged()));
@@ -1067,7 +1067,7 @@ void AbstractRpmBasedQt4MaemoTarget::handleTargetAddedSpecial()
 {
     m_specFile = new WatchableFile(specFilePath(), this);
     connect(m_specFile, SIGNAL(modified()), SIGNAL(specFileChanged()));
-    Core::FileManager::instance()->addFile(m_specFile);
+    Core::FileManager::addFile(m_specFile);
     emit specFileChanged();
 }
 
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index 98eac3ee23c..48305082f58 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -651,7 +651,7 @@ bool MercurialPlugin::submitEditorAboutToClose(VcsBaseSubmitEditor *submitEditor
     const QStringList files = commitEditor->checkedFiles();
     if (!files.empty()) {
         //save the commit message
-        if (!core->fileManager()->saveFile(editorFile))
+        if (!Core::FileManager::saveFile(editorFile))
             return false;
 
         QStringList extraOptions;
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 3414d8ef2f1..f526d4eb4e0 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -1371,7 +1371,7 @@ bool PerforcePlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *subm
         m_settings.setPromptToSubmit(wantsPrompt);
         m_settings.toSettings(Core::ICore::settings());
     }
-    if (!Core::ICore::fileManager()->saveFile(fileIFace))
+    if (!Core::FileManager::saveFile(fileIFace))
         return false;
     if (answer == VcsBase::VcsBaseSubmitEditor::SubmitDiscarded) {
         cleanCommitMessageFile();
diff --git a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
index caf3f128e13..cbf5903c44a 100644
--- a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
+++ b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
@@ -129,9 +129,8 @@ void BaseProjectWizardDialog::slotAccepted()
 {
     if (d->introPage->useAsDefaultPath()) {
         // Store the path as default path for new projects if desired.
-        Core::FileManager *fm = Core::ICore::fileManager();
-        fm->setProjectsDirectory(path());
-        fm->setUseProjectsDirectory(true);
+        Core::FileManager::setProjectsDirectory(path());
+        Core::FileManager::setUseProjectsDirectory(true);
     }
 }
 
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index 0530d23901d..051e2c0b896 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -187,13 +187,12 @@ void FolderNavigationWidget::setAutoSynchronization(bool sync)
 
     m_autoSync = sync;
 
-    Core::FileManager *fileManager = Core::ICore::fileManager();
     if (m_autoSync) {
-        connect(fileManager, SIGNAL(currentFileChanged(QString)),
+        connect(Core::FileManager::instance(), SIGNAL(currentFileChanged(QString)),
                 this, SLOT(setCurrentFile(QString)));
-        setCurrentFile(fileManager->currentFile());
+        setCurrentFile(Core::FileManager::currentFile());
     } else {
-        disconnect(fileManager, SIGNAL(currentFileChanged(QString)),
+        disconnect(Core::FileManager::instance(), SIGNAL(currentFileChanged(QString)),
                 this, SLOT(setCurrentFile(QString)));
     }
 }
@@ -361,7 +360,7 @@ void FolderNavigationWidget::contextMenuEvent(QContextMenuEvent *ev)
             findOnFileSystem(info.absolutePath());
         return;
     }
-    Core::FileManager::instance()->executeOpenWithMenuAction(action);
+    Core::FileManager::executeOpenWithMenuAction(action);
 }
 
 QString FolderNavigationWidget::msgFindOnFileSystem()
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 8ea8ee1978c..ad7c9b16448 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -335,7 +335,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     connect(d->m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
     addObject(d->m_welcomePage);
 
-    connect(Core::ICore::fileManager(), SIGNAL(currentFileChanged(QString)),
+    connect(Core::FileManager::instance(), SIGNAL(currentFileChanged(QString)),
             this, SLOT(setCurrentFile(QString)));
 
     d->m_session = new SessionManager(this);
@@ -515,7 +515,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     d->m_openWithMenu->setTitle(tr("Open With"));
 
     connect(d->m_openWithMenu, SIGNAL(triggered(QAction *)),
-            Core::FileManager::instance(), SLOT(executeOpenWithMenuAction(QAction*)));
+            Core::FileManager::instance(), SLOT(slotExecuteOpenWithMenuAction(QAction*)));
 
     //
     // Separators
@@ -1084,9 +1084,9 @@ void ProjectExplorerPlugin::unloadProject()
 
     bool success = false;
     if (readonlycount > 0)
-        success = Core::ICore::fileManager()->saveModifiedFiles(filesToSave).isEmpty();
+        success = Core::FileManager::saveModifiedFiles(filesToSave).isEmpty();
     else
-        success = Core::ICore::fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
+        success = Core::FileManager::saveModifiedFilesSilently(filesToSave).isEmpty();
 
     if (!success)
         return;
@@ -1656,7 +1656,7 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node
         updateActions();
     }
 
-    Core::ICore::fileManager()->setCurrentFile(filePath);
+    Core::FileManager::setCurrentFile(filePath);
 }
 
 void ProjectExplorerPlugin::updateActions()
@@ -1754,19 +1754,17 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
     if (debug)
         qDebug() << "ProjectExplorerPlugin::saveModifiedFiles";
 
-    QList<Core::IFile *> filesToSave = Core::ICore::fileManager()->modifiedFiles();
+    QList<Core::IFile *> filesToSave = Core::FileManager::modifiedFiles();
     if (!filesToSave.isEmpty()) {
         if (d->m_projectExplorerSettings.saveBeforeBuild) {
             bool cancelled = false;
-            Core::ICore::fileManager()->saveModifiedFilesSilently(filesToSave, &cancelled);
+            Core::FileManager::saveModifiedFilesSilently(filesToSave, &cancelled);
             if (cancelled)
                 return false;
         } else {
             bool cancelled = false;
             bool alwaysSave = false;
-
-            Core::FileManager *fm = Core::ICore::fileManager();
-            fm->saveModifiedFiles(filesToSave, &cancelled, QString(),
+            Core::FileManager::saveModifiedFiles(filesToSave, &cancelled, QString(),
                                   tr("Always save files before build"), &alwaysSave);
 
             if (cancelled)
@@ -2727,7 +2725,7 @@ void ProjectExplorerPlugin::deleteFile()
 
     projectNode->deleteFiles(fileNode->fileType(), QStringList(filePath));
 
-    Core::ICore::fileManager()->expectFileChange(filePath);
+    Core::FileManager::expectFileChange(filePath);
     if (Core::IVersionControl *vc =
             Core::ICore::vcsManager()->findVersionControlForDirectory(QFileInfo(filePath).absolutePath())) {
         vc->vcsDelete(filePath);
@@ -2738,7 +2736,7 @@ void ProjectExplorerPlugin::deleteFile()
             QMessageBox::warning(Core::ICore::mainWindow(), tr("Deleting File Failed"),
                                  tr("Could not delete file %1.").arg(filePath));
     }
-    Core::ICore::fileManager()->unexpectFileChange(filePath);
+    Core::FileManager::unexpectFileChange(filePath);
 }
 
 void ProjectExplorerPlugin::renameFile()
@@ -2783,7 +2781,7 @@ void ProjectExplorerPlugin::renameFile(Node *node, const QString &to)
     }
     if (result) {
         // yeah we moved, tell the filemanager about it
-        Core::ICore::fileManager()->renamedFile(orgFilePath, newFilePath);
+        Core::FileManager::renamedFile(orgFilePath, newFilePath);
         // Tell the project plugin about it
         ProjectNode *projectNode = fileNode->projectNode();
         projectNode->renameFile(fileNode->fileType(), orgFilePath, newFilePath);
@@ -2850,9 +2848,8 @@ QStringList ProjectExplorerPlugin::projectFilePatterns()
 
 void ProjectExplorerPlugin::openOpenProjectDialog()
 {
-    Core::FileManager *fileMananger = Core::ICore::fileManager();
-    const QString path = fileMananger->useProjectsDirectory() ? fileMananger->projectsDirectory() : QString();
-    const QStringList files = fileMananger->getOpenFileNames(d->m_projectFilterString, path);
+    const QString path = Core::FileManager::useProjectsDirectory() ? Core::FileManager::projectsDirectory() : QString();
+    const QStringList files = Core::FileManager::getOpenFileNames(d->m_projectFilterString, path);
     if (!files.isEmpty())
         Core::ICore::openFiles(files, Core::ICore::SwitchMode);
 }
diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.cpp b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
index e1e55797bfb..9eca29e9452 100644
--- a/src/plugins/projectexplorer/projectexplorersettingspage.cpp
+++ b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
@@ -185,9 +185,8 @@ QWidget *ProjectExplorerSettingsPage::createPage(QWidget *parent)
 {
     m_widget = new ProjectExplorerSettingsWidget(parent);
     m_widget->setSettings(ProjectExplorerPlugin::instance()->projectExplorerSettings());
-    const Core::FileManager *fm = Core::ICore::fileManager();
-    m_widget->setProjectsDirectory(fm->projectsDirectory());
-    m_widget->setUseProjectsDirectory(fm->useProjectsDirectory());
+    m_widget->setProjectsDirectory(Core::FileManager::projectsDirectory());
+    m_widget->setUseProjectsDirectory(Core::FileManager::useProjectsDirectory());
     if (m_searchKeywords.isEmpty())
         m_searchKeywords = m_widget->searchKeywords();
     return m_widget;
@@ -197,9 +196,8 @@ void ProjectExplorerSettingsPage::apply()
 {
     if (m_widget) {
         ProjectExplorerPlugin::instance()->setProjectExplorerSettings(m_widget->settings());
-        Core::FileManager *fm = Core::ICore::fileManager();
-        fm->setProjectsDirectory(m_widget->projectsDirectory());
-        fm->setUseProjectsDirectory(m_widget->useProjectsDirectory());
+        Core::FileManager::setProjectsDirectory(m_widget->projectsDirectory());
+        Core::FileManager::setUseProjectsDirectory(m_widget->useProjectsDirectory());
     }
 }
 
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index c25a0bbeb87..6fa3934fb24 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -72,7 +72,7 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
     m_file = new Internal::QmlProjectFile(this, fileName);
     m_rootNode = new Internal::QmlProjectNode(this, m_file);
 
-    Core::FileManager::instance()->addFile(m_file, true);
+    Core::FileManager::addFile(m_file, true);
 
     m_manager->registerProject(this);
 }
@@ -81,7 +81,7 @@ QmlProject::~QmlProject()
 {
     m_manager->unregisterProject(this);
 
-    Core::FileManager::instance()->removeFile(m_file);
+    Core::FileManager::removeFile(m_file);
 
     delete m_projectItem.data();
     delete m_rootNode;
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 5275551c2c3..a0a8cf214fd 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -255,7 +255,7 @@ Qt4PriFileNode::Qt4PriFileNode(Qt4Project *project, Qt4ProFileNode* qt4ProFileNo
 {
     Q_ASSERT(project);
     m_qt4PriFile = new Qt4PriFile(this);
-    Core::ICore::fileManager()->addFile(m_qt4PriFile);
+    Core::FileManager::addFile(m_qt4PriFile);
 
     setDisplayName(QFileInfo(filePath).completeBaseName());
 
@@ -1039,7 +1039,7 @@ bool Qt4PriFileNode::saveModifiedEditors()
 
     if (!modifiedFileHandles.isEmpty()) {
         bool cancelled;
-        Core::ICore::fileManager()->saveModifiedFiles(modifiedFileHandles, &cancelled,
+        Core::FileManager::saveModifiedFiles(modifiedFileHandles, &cancelled,
                                          tr("There are unsaved changes for project file %1.").arg(m_projectFilePath));
         if (cancelled)
             return false;
@@ -1146,9 +1146,9 @@ void Qt4PriFileNode::changeFiles(const FileType fileType,
     }
 
     // save file
-    Core::ICore::fileManager()->expectFileChange(m_projectFilePath);
+    Core::FileManager::expectFileChange(m_projectFilePath);
     save(lines);
-    Core::ICore::fileManager()->unexpectFileChange(m_projectFilePath);
+    Core::FileManager::unexpectFileChange(m_projectFilePath);
 
     // This is a hack.
     // We are saving twice in a very short timeframe, once the editor and once the ProFile.
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index 429c921b593..ccb1b1b10fb 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -92,7 +92,7 @@ ResourceEditorW::ResourceEditorW(const Core::Context &context,
     // (That is because this editor instance is deleted in executeOpenWithMenuAction
     // in that case.)
     connect(m_openWithMenu, SIGNAL(triggered(QAction*)),
-            Core::FileManager::instance(), SLOT(executeOpenWithMenuAction(QAction*)),
+            Core::FileManager::instance(), SLOT(slotExecuteOpenWithMenuAction(QAction*)),
             Qt::QueuedConnection);
 
     connect(m_resourceEditor, SIGNAL(dirtyChanged(bool)), this, SLOT(dirtyChanged(bool)));
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 42eb5023144..37f7dbc81a1 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -512,7 +512,7 @@ bool SubversionPlugin::submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *su
     bool closeEditor = true;
     if (!fileList.empty()) {
         // get message & commit
-        closeEditor = Core::ICore::fileManager()->saveFile(fileIFace);
+        closeEditor = Core::FileManager::saveFile(fileIFace);
         if (closeEditor)
             closeEditor = commit(m_commitMessageFileName, fileList);
     }
diff --git a/src/plugins/tasklist/taskfilefactory.cpp b/src/plugins/tasklist/taskfilefactory.cpp
index a0cb3195a93..cfdfa5d8120 100644
--- a/src/plugins/tasklist/taskfilefactory.cpp
+++ b/src/plugins/tasklist/taskfilefactory.cpp
@@ -92,7 +92,7 @@ Core::IFile *TaskFileFactory::open(ProjectExplorer::Project *context, const QStr
     m_openFiles.append(file);
 
     // Register with filemanager:
-    Core::ICore::fileManager()->addFile(file);
+    Core::FileManager::addFile(file);
 
     return file;
 }
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index c91c5707fc3..228d4b1437a 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -180,7 +180,7 @@ void BaseFileFind::doReplace(const QString &text,
 {
     QStringList files = replaceAll(text, items);
     if (!files.isEmpty()) {
-        Core::ICore::fileManager()->notifyFilesChangedInternally(files);
+        Core::FileManager::notifyFilesChangedInternally(files);
         Find::SearchResultWindow::instance()->hide();
     }
 }
-- 
GitLab