summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp5
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp31
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h1
3 files changed, 35 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 6d55de5cdf..90e98b1afa 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -618,21 +618,22 @@ void CppModelManager::deleteEditorSupport(TextEditor::BaseTextEditor *textEditor
return;
CppEditorSupport *editorSupport;
+ int numberOfOpenEditors = 0;
{ // only lock the operations on m_editorSupport
QMutexLocker locker(&m_editorSupportMutex);
editorSupport = m_editorSupport.value(textEditor, 0);
m_editorSupport.remove(textEditor);
+ numberOfOpenEditors = m_editorSupport.size();
}
delete editorSupport;
++numberOfClosedEditors;
- if (numberOfClosedEditors == 5) {
+ if (numberOfOpenEditors == 0 || numberOfClosedEditors == 5) {
numberOfClosedEditors = 0;
GC();
}
-
}
bool CppModelManager::isCppEditor(Core::IEditor *editor) const
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index 305b16b2c2..7bd128d209 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -32,6 +32,7 @@
#include "cpppreprocessor.h"
#include "modelmanagertesthelper.h"
+#include <coreplugin/editormanager/editormanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h>
@@ -413,3 +414,33 @@ void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles()
sm->removeProject(project);
ModelManagerTestHelper::verifyClean();
}
+
+/// QTCREATORBUG-9828: Locator shows symbols of closed files
+/// Check: The garbage collector should be run if the last CppEditor is closed.
+void CppToolsPlugin::test_modelmanager_gc_if_last_cppeditor_closed()
+{
+ TestDataDirectory testDataDirectory(QLatin1String("testdata_guiproject1"));
+ const QString file = testDataDirectory.file(QLatin1String("main.cpp"));
+
+ Core::EditorManager *em = Core::EditorManager::instance();
+ CppModelManager *mm = CppModelManager::instance();
+
+ // Open a file in the editor
+ QCOMPARE(Core::EditorManager::documentModel()->openedDocuments().size(), 0);
+ Core::IEditor *editor = em->openEditor(file);
+ QVERIFY(editor);
+ QCOMPARE(Core::EditorManager::documentModel()->openedDocuments().size(), 1);
+ QVERIFY(mm->isCppEditor(editor));
+ QVERIFY(mm->workingCopy().contains(file));
+
+ // Check: File is in the snapshot
+ QVERIFY(mm->snapshot().contains(file));
+
+ // Close file/editor
+ const QList<Core::IEditor*> editorsToClose = QList<Core::IEditor*>() << editor;
+ em->closeEditors(editorsToClose, /*askAboutModifiedEditors=*/ false);
+
+ // Check: File is removed from the snapshpt
+ QVERIFY(!mm->workingCopy().contains(file));
+ QVERIFY(!mm->snapshot().contains(file));
+}
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index 9ebea97461..62204fac96 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -187,6 +187,7 @@ private slots:
void test_modelmanager_refresh_2();
void test_modelmanager_snapshot_after_two_projects();
void test_modelmanager_extraeditorsupport_uiFiles();
+ void test_modelmanager_gc_if_last_cppeditor_closed();
private:
void test_completion();