From 787b386ecc51a48315cb2c23ea5329b0f7f9b372 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 5 Nov 2015 16:59:28 +0100 Subject: [PATCH] Clang: Use the fallback project part ...for project-less files. Change-Id: I02d7e26bdd40dfce3b0663a07b591ee6beb2f6b7 Reviewed-by: Erik Verbruggen --- .../clangbackendipcintegration.cpp | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index f1dd3c47e15..bd7d8028bc3 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -306,12 +306,44 @@ void IpcCommunicator::initializeBackend() initializeBackendWithCurrentData(); } +static QStringList projectPartOptions(const CppTools::ProjectPart::Ptr &projectPart) +{ + QStringList options = ClangCodeModel::Utils::createClangOptions(projectPart, + CppTools::ProjectFile::Unclassified); // No language option + if (PchInfo::Ptr pchInfo = PchManager::instance()->pchInfo(projectPart)) + options += ClangCodeModel::Utils::createPCHInclusionOptions(pchInfo->fileName()); + + return options; +} + +static ClangBackEnd::ProjectPartContainer toProjectPartContainer( + const CppTools::ProjectPart::Ptr &projectPart) +{ + const QStringList options = projectPartOptions(projectPart); + + return ClangBackEnd::ProjectPartContainer(projectPart->id(), Utf8StringVector(options)); +} + +static QVector toProjectPartContainers( + const QList projectParts) +{ + QVector projectPartContainers; + projectPartContainers.reserve(projectParts.size()); + + foreach (const CppTools::ProjectPart::Ptr &projectPart, projectParts) + projectPartContainers << toProjectPartContainer(projectPart); + + return projectPartContainers; +} + void IpcCommunicator::registerEmptyProjectForProjectLessFiles() { QTC_CHECK(m_connection.isConnected()); - registerProjectPartsForEditor({ClangBackEnd::ProjectPartContainer( - Utf8String(), - Utf8StringVector())}); + + const auto projectPart = CppTools::CppModelManager::instance()->fallbackProjectPart(); + const auto projectPartContainer = toProjectPartContainer(projectPart); + + registerProjectPartsForEditor({projectPartContainer}); } void IpcCommunicator::registerCurrentProjectParts() @@ -343,33 +375,6 @@ void IpcCommunicator::registerCurrentCodeModelUiHeaders() updateUnsavedFile(es->fileName(), es->contents(), es->revision()); } -static QStringList projectPartOptions(const CppTools::ProjectPart::Ptr &projectPart) -{ - QStringList options = ClangCodeModel::Utils::createClangOptions(projectPart, - CppTools::ProjectFile::Unclassified); // No language option - if (PchInfo::Ptr pchInfo = PchManager::instance()->pchInfo(projectPart)) - options += ClangCodeModel::Utils::createPCHInclusionOptions(pchInfo->fileName()); - - return options; -} - -static ClangBackEnd::ProjectPartContainer toProjectPartContainer( - const CppTools::ProjectPart::Ptr &projectPart) -{ - const QStringList options = projectPartOptions(projectPart); - return ClangBackEnd::ProjectPartContainer(projectPart->id(), Utf8StringVector(options)); -} - -static QVector toProjectPartContainers( - const QList projectParts) -{ - QVector projectPartContainers; - projectPartContainers.reserve(projectParts.size()); - foreach (const CppTools::ProjectPart::Ptr &projectPart, projectParts) - projectPartContainers << toProjectPartContainer(projectPart); - return projectPartContainers; -} - void IpcCommunicator::registerProjectsParts(const QList projectParts) { const auto projectPartContainers = toProjectPartContainers(projectParts);