summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-11 10:47:27 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-16 14:08:25 +0000
commit48952084a67cf9f1a04b56f91400d9b3a74b7500 (patch)
tree2d61a217551644b5f4d7d021f6bf49baf1420fce /src/plugins/cpptools/cppmodelmanager.cpp
parent140b39487bc185f299ea92a81570fcd46a876557 (diff)
downloadqt-creator-48952084a67cf9f1a04b56f91400d9b3a74b7500.tar.gz
Clang: Remove per-mimetype settings
Related to commit c47079f97f7d42db0c581525a2ce6fddbc0995f2 Clang: Activate the code model with a check box Change-Id: Ief11768ba0dd27788032e2dd3ad9b7ae39a8f52b Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp136
1 files changed, 40 insertions, 96 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index f82f414aee..079de7cfdd 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -151,11 +151,10 @@ public:
QMap<QString, CppEditorDocumentHandle *> m_cppEditorDocuments;
QSet<AbstractEditorSupport *> m_extraEditorSupports;
- // Completion & highlighting
- ModelManagerSupportProviderInternal m_modelManagerSupportInternalProvider;
- ModelManagerSupport::Ptr m_modelManagerSupportInternal;
- QHash<QString, ModelManagerSupportProvider *> m_availableModelManagerSupports;
- QHash<QString, ModelManagerSupport::Ptr> m_activeModelManagerSupports;
+ // Model Manager Supports for e.g. completion and highlighting
+ ModelManagerSupportProvider *m_clangModelManagerSupportProvider;
+ ModelManagerSupport::Ptr m_builtinModelManagerSupport;
+ ModelManagerSupport::Ptr m_activeModelManagerSupport;
// Indexing
CppIndexingSupport *m_indexingSupporter;
@@ -293,6 +292,14 @@ CppModelManager *CppModelManager::instance()
return m_instance;
}
+void CppModelManager::initializeModelManagerSupports()
+{
+ d->m_clangModelManagerSupportProvider = nullptr;
+ d->m_builtinModelManagerSupport
+ = ModelManagerSupportProviderInternal().createModelManagerSupport();
+ d->m_activeModelManagerSupport = d->m_builtinModelManagerSupport;
+}
+
CppModelManager::CppModelManager(QObject *parent)
: CppModelManagerBase(parent), d(new CppModelManagerPrivate)
{
@@ -337,15 +344,10 @@ CppModelManager::CppModelManager(QObject *parent)
QSharedPointer<CppCodeModelSettings> codeModelSettings
= CppToolsPlugin::instance()->codeModelSettings();
- codeModelSettings->setDefaultId(d->m_modelManagerSupportInternalProvider.id());
connect(codeModelSettings.data(), &CppCodeModelSettings::changed,
this, &CppModelManager::onCodeModelSettingsChanged);
- d->m_modelManagerSupportInternal
- = d->m_modelManagerSupportInternalProvider.createModelManagerSupport();
- d->m_activeModelManagerSupports.insert(d->m_modelManagerSupportInternalProvider.id(),
- d->m_modelManagerSupportInternal);
- addModelManagerSupportProvider(&d->m_modelManagerSupportInternalProvider);
+ initializeModelManagerSupports();
d->m_internalIndexingSupport = new BuiltinIndexingSupport;
}
@@ -665,31 +667,6 @@ void CppModelManager::removeProjectInfoFilesAndIncludesFromSnapshot(const Projec
}
}
-void CppModelManager::handleAddedModelManagerSupports(const QSet<QString> &supportIds)
-{
- foreach (const QString &id, supportIds) {
- ModelManagerSupportProvider * const provider = d->m_availableModelManagerSupports.value(id);
- if (provider) {
- QTC_CHECK(!d->m_activeModelManagerSupports.contains(id));
- d->m_activeModelManagerSupports.insert(id, provider->createModelManagerSupport());
- }
- }
-}
-
-QList<ModelManagerSupport::Ptr> CppModelManager::handleRemovedModelManagerSupports(
- const QSet<QString> &supportIds)
-{
- QList<ModelManagerSupport::Ptr> removed;
-
- foreach (const QString &id, supportIds) {
- const ModelManagerSupport::Ptr support = d->m_activeModelManagerSupports.value(id);
- d->m_activeModelManagerSupports.remove(id);
- removed << support;
- }
-
- return removed;
-}
-
void CppModelManager::closeCppEditorDocuments()
{
QList<Core::IDocument *> cppDocumentsToClose;
@@ -964,12 +941,15 @@ bool CppModelManager::isCppEditor(Core::IEditor *editor) const
return editor->context().contains(ProjectExplorer::Constants::LANG_CXX);
}
-bool CppModelManager::isManagedByModelManagerSupport(Core::IDocument *document, const QString &id) const
+bool CppModelManager::isClangCodeModelAvailable() const
{
- auto documentMimeTupe = document->mimeType();
- auto codeModelSettings = CppToolsPlugin::instance()->codeModelSettings();
+ return d->m_clangModelManagerSupportProvider != nullptr;
+}
- return codeModelSettings->hasModelManagerSupportIdForMimeType(documentMimeTupe, id);
+bool CppModelManager::isClangCodeModelActive() const
+{
+ return isClangCodeModelAvailable()
+ && d->m_activeModelManagerSupport != d->m_builtinModelManagerSupport;
}
void CppModelManager::emitDocumentUpdated(Document::Ptr doc)
@@ -1053,43 +1033,25 @@ void CppModelManager::onCurrentEditorChanged(Core::IEditor *editor)
}
}
-static const QSet<QString> activeModelManagerSupportsFromSettings()
-{
- QSet<QString> result;
- QSharedPointer<CppCodeModelSettings> codeModelSettings
- = CppToolsPlugin::instance()->codeModelSettings();
-
- const QStringList mimeTypes = codeModelSettings->supportedMimeTypes();
- foreach (const QString &mimeType, mimeTypes) {
- const QString id = codeModelSettings->modelManagerSupportIdForMimeType(mimeType);
- if (!id.isEmpty())
- result << id;
- }
-
- return result;
-}
-
void CppModelManager::onCodeModelSettingsChanged()
{
- const QSet<QString> currentCodeModelSupporters = d->m_activeModelManagerSupports.keys().toSet();
- const QSet<QString> newCodeModelSupporters = activeModelManagerSupportsFromSettings();
+ const bool isClangActive = isClangCodeModelActive();
+ const QSharedPointer<CppCodeModelSettings> settings
+ = CppToolsPlugin::instance()->codeModelSettings();
- QSet<QString> added = newCodeModelSupporters;
- added.subtract(currentCodeModelSupporters);
- added.remove(d->m_modelManagerSupportInternalProvider.id());
- handleAddedModelManagerSupports(added);
+ ModelManagerSupport::Ptr newCodeModelSupport;
- QSet<QString> removed = currentCodeModelSupporters;
- removed.subtract(newCodeModelSupporters);
- removed.remove(d->m_modelManagerSupportInternalProvider.id());
- const QList<ModelManagerSupport::Ptr> supportsToDelete
- = handleRemovedModelManagerSupports(removed);
- QTC_CHECK(removed.size() == supportsToDelete.size());
+ if (isClangCodeModelAvailable()) {
+ if (!isClangActive && settings->useClangCodeModel())
+ newCodeModelSupport = d->m_clangModelManagerSupportProvider->createModelManagerSupport();
+ else if (isClangActive && !settings->useClangCodeModel())
+ newCodeModelSupport = d->m_builtinModelManagerSupport;
+ }
- if (!added.isEmpty() || !removed.isEmpty())
+ if (newCodeModelSupport) {
closeCppEditorDocuments();
-
- // supportsToDelete goes out of scope and deletes the supports
+ d->m_activeModelManagerSupport = newCodeModelSupport;
+ }
}
void CppModelManager::onAboutToLoadSession()
@@ -1201,44 +1163,26 @@ void CppModelManager::finishedRefreshingSourceFiles(const QSet<QString> &files)
emit sourceFilesRefreshed(files);
}
-void CppModelManager::addModelManagerSupportProvider(
+void CppModelManager::setClangModelManagerSupportProvider(
ModelManagerSupportProvider *modelManagerSupportProvider)
{
QTC_ASSERT(modelManagerSupportProvider, return);
- d->m_availableModelManagerSupports[modelManagerSupportProvider->id()]
- = modelManagerSupportProvider;
- QSharedPointer<CppCodeModelSettings> cms = CppToolsPlugin::instance()->codeModelSettings();
- cms->setModelManagerSupportProviders(d->m_availableModelManagerSupports.values());
+ QTC_CHECK(d->m_clangModelManagerSupportProvider == nullptr);
- onCodeModelSettingsChanged();
-}
+ d->m_clangModelManagerSupportProvider = modelManagerSupportProvider;
-ModelManagerSupport::Ptr CppModelManager::modelManagerSupportForMimeType(
- const QString &mimeType) const
-{
- QSharedPointer<CppCodeModelSettings> cms = CppToolsPlugin::instance()->codeModelSettings();
- const QString &id = cms->modelManagerSupportIdForMimeType(mimeType);
- return d->m_activeModelManagerSupports.value(id, d->m_modelManagerSupportInternal);
+ onCodeModelSettingsChanged();
}
-CppCompletionAssistProvider *CppModelManager::completionAssistProvider(
- const QString &mimeType) const
+CppCompletionAssistProvider *CppModelManager::completionAssistProvider() const
{
- if (mimeType.isEmpty())
- return 0;
-
- ModelManagerSupport::Ptr cms = modelManagerSupportForMimeType(mimeType);
- QTC_ASSERT(cms, return 0);
- return cms->completionAssistProvider();
+ return d->m_activeModelManagerSupport->completionAssistProvider();
}
BaseEditorDocumentProcessor *CppModelManager::editorDocumentProcessor(
TextEditor::TextDocument *baseTextDocument) const
{
- QTC_ASSERT(baseTextDocument, return 0);
- ModelManagerSupport::Ptr cms = modelManagerSupportForMimeType(baseTextDocument->mimeType());
- QTC_ASSERT(cms, return 0);
- return cms->editorDocumentProcessor(baseTextDocument);
+ return d->m_activeModelManagerSupport->editorDocumentProcessor(baseTextDocument);
}
void CppModelManager::setIndexingSupport(CppIndexingSupport *indexingSupport)