summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentparser.cpp13
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp5
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp2
-rw-r--r--src/plugins/cppeditor/cppcodemodelinspectordialog.cpp2
-rw-r--r--src/plugins/cppeditor/cppeditordocument.cpp3
-rw-r--r--src/plugins/cpptools/baseeditordocumentparser.cpp29
-rw-r--r--src/plugins/cpptools/baseeditordocumentparser.h22
-rw-r--r--src/plugins/cpptools/baseeditordocumentprocessor.cpp2
-rw-r--r--src/plugins/cpptools/baseeditordocumentprocessor.h3
-rw-r--r--src/plugins/cpptools/builtineditordocumentparser.cpp15
-rw-r--r--src/plugins/cpptools/builtineditordocumentprocessor.cpp2
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp2
-rw-r--r--src/plugins/cpptools/cppprojectpartchooser.cpp152
-rw-r--r--src/plugins/cpptools/cppprojectpartchooser.h17
-rw-r--r--src/plugins/cpptools/cpptools.pro2
-rw-r--r--src/plugins/cpptools/cpptools.qbs2
-rw-r--r--src/plugins/cpptools/cpptools_utils.h (renamed from src/plugins/cpptools/cpplanguage.h)15
-rw-r--r--src/plugins/cpptools/cpptoolsbridgeqtcreatorimplementation.cpp2
18 files changed, 194 insertions, 96 deletions
diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp
index 33ec351b4c..860b41b04d 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp
@@ -39,12 +39,13 @@ void ClangEditorDocumentParser::updateImpl(const QFutureInterface<void> &,
const UpdateParams &updateParams)
{
State state_ = state();
- state_.projectPart = determineProjectPart(filePath(),
- configuration(),
- state_,
- updateParams.activeProject,
- updateParams.languagePreference,
- updateParams.hasActiveProjectChanged);
+ state_.projectPartInfo = determineProjectPart(filePath(),
+ configuration(),
+ state_,
+ updateParams.activeProject,
+ updateParams.languagePreference,
+ updateParams.hasActiveProjectChanged);
+ emit projectPartInfoUpdated(state_.projectPartInfo);
setState(state_);
}
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 9104d5d116..05874085c0 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -80,6 +80,9 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor(
connect(&m_updateTranslationUnitTimer, &QTimer::timeout,
this, &ClangEditorDocumentProcessor::updateTranslationUnitIfProjectPartExists);
+ connect(m_parser.data(), &ClangEditorDocumentParser::projectPartInfoUpdated,
+ this, &BaseEditorDocumentProcessor::projectPartInfoUpdated);
+
// Forwarding the semantic info from the builtin processor enables us to provide all
// editor (widget) related features that are not yet implemented by the clang plugin.
connect(&m_builtinProcessor, &CppTools::BuiltinEditorDocumentProcessor::cppDocumentUpdated,
@@ -302,7 +305,7 @@ static bool isProjectPartLoadedOrIsFallback(CppTools::ProjectPart::Ptr projectPa
void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor()
{
- const CppTools::ProjectPart::Ptr projectPart = m_parser->projectPart();
+ const CppTools::ProjectPart::Ptr projectPart = m_parser->projectPartInfo().projectPart;
if (isProjectPartLoadedOrIsFallback(projectPart)) {
registerTranslationUnitForEditor(projectPart.data());
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index b99f7a8fc2..4e26ef3b19 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -131,7 +131,7 @@ QStringList createClangOptions(const ProjectPart::Ptr &pPart, ProjectFile::Kind
ProjectPart::Ptr projectPartForFile(const QString &filePath)
{
if (const auto parser = CppTools::BaseEditorDocumentParser::get(filePath))
- return parser->projectPart();
+ return parser->projectPartInfo().projectPart;
return ProjectPart::Ptr();
}
diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp
index 0dafea42d3..04d1560297 100644
--- a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp
+++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp
@@ -1580,7 +1580,7 @@ void CppCodeModelInspectorDialog::refresh()
// Project Parts
const ProjectPart::Ptr editorsProjectPart = cppEditorDocument
- ? cppEditorDocument->processor()->parser()->projectPart()
+ ? cppEditorDocument->processor()->parser()->projectPartInfo().projectPart
: ProjectPart::Ptr();
const QList<ProjectInfo> projectInfos = cmmi->projectInfos();
diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp
index 91918f9d3b..6a28974ae2 100644
--- a/src/plugins/cppeditor/cppeditordocument.cpp
+++ b/src/plugins/cppeditor/cppeditordocument.cpp
@@ -274,7 +274,8 @@ void CppEditorDocument::setPreprocessorSettings(const CppTools::ProjectPart::Ptr
{
const auto parser = processor()->parser();
QTC_ASSERT(parser, return);
- if (parser->projectPart() != projectPart || parser->configuration().editorDefines != defines) {
+ if (parser->projectPartInfo().projectPart != projectPart
+ || parser->configuration().editorDefines != defines) {
CppTools::BaseEditorDocumentParser::Configuration config = parser->configuration();
config.manuallySetProjectPart = projectPart;
config.editorDefines = defines;
diff --git a/src/plugins/cpptools/baseeditordocumentparser.cpp b/src/plugins/cpptools/baseeditordocumentparser.cpp
index ca4d16e564..617c61de0a 100644
--- a/src/plugins/cpptools/baseeditordocumentparser.cpp
+++ b/src/plugins/cpptools/baseeditordocumentparser.cpp
@@ -54,6 +54,8 @@ namespace CppTools {
BaseEditorDocumentParser::BaseEditorDocumentParser(const QString &filePath)
: m_filePath(filePath)
{
+ static int meta = qRegisterMetaType<ProjectPartInfo>("CppTools::ProjectPartInfo");
+ Q_UNUSED(meta);
}
BaseEditorDocumentParser::~BaseEditorDocumentParser()
@@ -102,9 +104,9 @@ void BaseEditorDocumentParser::setState(const State &state)
m_state = state;
}
-ProjectPart::Ptr BaseEditorDocumentParser::projectPart() const
+ProjectPartInfo BaseEditorDocumentParser::projectPartInfo() const
{
- return state().projectPart;
+ return state().projectPartInfo;
}
BaseEditorDocumentParser::Ptr BaseEditorDocumentParser::get(const QString &filePath)
@@ -117,7 +119,7 @@ BaseEditorDocumentParser::Ptr BaseEditorDocumentParser::get(const QString &fileP
return BaseEditorDocumentParser::Ptr();
}
-ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(
+ProjectPartInfo BaseEditorDocumentParser::determineProjectPart(
const QString &filePath,
const Configuration &config,
const State &state,
@@ -125,7 +127,9 @@ ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(
Language languagePreference,
bool hasActiveProjectChanged)
{
- Internal::ProjectPartChooser chooser;
+ using Internal::ProjectPartChooser;
+
+ ProjectPartChooser chooser;
chooser.setFallbackProjectPart([](){
return CppModelManager::instance()->fallbackProjectPart();
});
@@ -137,13 +141,16 @@ ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(
return CppModelManager::instance()->projectPartFromDependencies(fileName);
});
- return chooser.choose(filePath,
- state.projectPart,
- config.manuallySetProjectPart,
- config.stickToPreviousProjectPart,
- activeProject,
- languagePreference,
- hasActiveProjectChanged);
+ const ProjectPartInfo chooserResult
+ = chooser.choose(filePath,
+ state.projectPartInfo.projectPart,
+ config.manuallySetProjectPart,
+ config.stickToPreviousProjectPart,
+ activeProject,
+ languagePreference,
+ hasActiveProjectChanged);
+
+ return chooserResult;
}
} // namespace CppTools
diff --git a/src/plugins/cpptools/baseeditordocumentparser.h b/src/plugins/cpptools/baseeditordocumentparser.h
index 92f919e96d..1cf71fefc6 100644
--- a/src/plugins/cpptools/baseeditordocumentparser.h
+++ b/src/plugins/cpptools/baseeditordocumentparser.h
@@ -25,8 +25,8 @@
#pragma once
-#include "cpplanguage.h"
#include "cpptools_global.h"
+#include "cpptools_utils.h"
#include "cppworkingcopy.h"
#include "projectpart.h"
@@ -82,22 +82,26 @@ public:
void update(const UpdateParams &updateParams);
void update(const QFutureInterface<void> &future, const UpdateParams &updateParams);
- ProjectPart::Ptr projectPart() const;
+ ProjectPartInfo projectPartInfo() const;
+
+signals:
+ void projectPartInfoUpdated(const CppTools::ProjectPartInfo &projectPartInfo);
protected:
struct State {
QByteArray editorDefines;
- ProjectPart::Ptr projectPart;
+ ProjectPartInfo projectPartInfo;
};
State state() const;
void setState(const State &state);
- static ProjectPart::Ptr determineProjectPart(const QString &filePath,
- const Configuration &config,
- const State &state,
- const ProjectExplorer::Project *activeProject,
- Language languagePreference,
- bool hasActiveProjectChanged);
+ static ProjectPartInfo determineProjectPart(
+ const QString &filePath,
+ const Configuration &config,
+ const State &state,
+ const ProjectExplorer::Project *activeProject,
+ Language languagePreference,
+ bool hasActiveProjectChanged);
mutable QMutex m_stateAndConfigurationMutex;
diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.cpp b/src/plugins/cpptools/baseeditordocumentprocessor.cpp
index b656c5798a..950d052793 100644
--- a/src/plugins/cpptools/baseeditordocumentprocessor.cpp
+++ b/src/plugins/cpptools/baseeditordocumentprocessor.cpp
@@ -26,10 +26,10 @@
#include "baseeditordocumentprocessor.h"
#include "cppcodemodelsettings.h"
-#include "cpplanguage.h"
#include "cppmodelmanager.h"
#include "cpptoolsbridge.h"
#include "cpptoolsreuse.h"
+#include "cpptools_utils.h"
#include "editordocumenthandle.h"
#include <projectexplorer/session.h>
diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.h b/src/plugins/cpptools/baseeditordocumentprocessor.h
index f6fbba5011..ec9df57cee 100644
--- a/src/plugins/cpptools/baseeditordocumentprocessor.h
+++ b/src/plugins/cpptools/baseeditordocumentprocessor.h
@@ -74,8 +74,9 @@ public:
using HeaderErrorDiagnosticWidgetCreator = std::function<QWidget*()>;
signals:
-
// Signal interface to implement
+ void projectPartInfoUpdated(const CppTools::ProjectPartInfo &projectPartInfo);
+
void codeWarningsUpdated(unsigned revision,
const QList<QTextEdit::ExtraSelection> selections,
const HeaderErrorDiagnosticWidgetCreator &creator,
diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp
index 5243e2a76b..236a95f326 100644
--- a/src/plugins/cpptools/builtineditordocumentparser.cpp
+++ b/src/plugins/cpptools/builtineditordocumentparser.cpp
@@ -77,19 +77,20 @@ void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface<void> &futur
QString projectConfigFile;
LanguageFeatures features = LanguageFeatures::defaultFeatures();
- baseState.projectPart = determineProjectPart(filePath(),
- baseConfig,
- baseState,
- updateParams.activeProject,
- updateParams.languagePreference,
- updateParams.hasActiveProjectChanged);
+ baseState.projectPartInfo = determineProjectPart(filePath(),
+ baseConfig,
+ baseState,
+ updateParams.activeProject,
+ updateParams.languagePreference,
+ updateParams.hasActiveProjectChanged);
+ emit projectPartInfoUpdated(baseState.projectPartInfo);
if (state.forceSnapshotInvalidation) {
invalidateSnapshot = true;
state.forceSnapshotInvalidation = false;
}
- if (const ProjectPart::Ptr part = baseState.projectPart) {
+ if (const ProjectPart::Ptr part = baseState.projectPartInfo.projectPart) {
configFile += part->toolchainDefines;
configFile += overwrittenToolchainDefines(*part.data());
configFile += part->projectDefines;
diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.cpp b/src/plugins/cpptools/builtineditordocumentprocessor.cpp
index 2a6dd066d1..9dbbb45383 100644
--- a/src/plugins/cpptools/builtineditordocumentprocessor.cpp
+++ b/src/plugins/cpptools/builtineditordocumentprocessor.cpp
@@ -190,6 +190,8 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
});
}
+ connect(m_parser.data(), &BuiltinEditorDocumentParser::projectPartInfoUpdated,
+ this, &BaseEditorDocumentProcessor::projectPartInfoUpdated);
connect(m_parser.data(), &BuiltinEditorDocumentParser::finished,
this, &BuiltinEditorDocumentProcessor::onParserFinished);
connect(&m_semanticInfoUpdater, &SemanticInfoUpdater::updated,
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index fb65fe93f0..0248e3ac8e 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -167,7 +167,7 @@ ProjectPart::Ptr projectPartOfEditorDocument(const QString &filePath)
{
auto *editorDocument = CppModelManager::instance()->cppEditorDocument(filePath);
QTC_ASSERT(editorDocument, return ProjectPart::Ptr());
- return editorDocument->processor()->parser()->projectPart();
+ return editorDocument->processor()->parser()->projectPartInfo().projectPart;
}
} // anonymous namespace
diff --git a/src/plugins/cpptools/cppprojectpartchooser.cpp b/src/plugins/cpptools/cppprojectpartchooser.cpp
index 5f7d3de137..816bddb592 100644
--- a/src/plugins/cpptools/cppprojectpartchooser.cpp
+++ b/src/plugins/cpptools/cppprojectpartchooser.cpp
@@ -31,82 +31,144 @@
namespace CppTools {
namespace Internal {
-static bool isPreferredLanguage(const ProjectPart &projectPart, Language preference)
+class ProjectPartPrioritizer
{
- const bool isCProjectPart = projectPart.languageVersion <= ProjectPart::LatestCVersion;
- return (preference == Language::C && isCProjectPart)
- || (preference == Language::Cxx && !isCProjectPart);
-}
+public:
+ struct PrioritizedProjectPart
+ {
+ PrioritizedProjectPart(const ProjectPart::Ptr &projectPart, int priority)
+ : projectPart(projectPart) , priority(priority) {}
+
+ ProjectPart::Ptr projectPart;
+ int priority = 0;
+ };
-static int priority(const ProjectPart &projectPart,
- const ProjectExplorer::Project *activeProject,
- Language languagePreference)
-{
- int thePriority = 0;
+ ProjectPartPrioritizer(const QList<ProjectPart::Ptr> &projectParts,
+ const ProjectExplorer::Project *activeProject,
+ Language languagePreference)
+ : m_projectParts(projectParts)
+ , m_activeProject(activeProject)
+ , m_languagePreference(languagePreference)
+ {
+ // Determine best project part
+ const QList<PrioritizedProjectPart> prioritized = prioritize();
+ m_projectPart = prioritized.first().projectPart;
+
+ // Determine ambiguity
+ m_isAmbiguous = prioritized.size() > 1
+ ? prioritized[0].priority == prioritized[1].priority
+ : false;
+ }
- if (projectPart.project == activeProject)
- thePriority += 100;
+ ProjectPart::Ptr projectPart()
+ {
+ return m_projectPart;
+ }
- if (projectPart.selectedForBuilding)
- thePriority += 10;
+ bool isAmbiguous() const
+ {
+ return m_isAmbiguous;
+ }
- if (isPreferredLanguage(projectPart, languagePreference))
- thePriority += 1;
+private:
+ QList<PrioritizedProjectPart> prioritize()
+ {
+ // Prioritize
+ QList<PrioritizedProjectPart> prioritized = Utils::transform(m_projectParts,
+ [&](const ProjectPart::Ptr &projectPart) {
+ return PrioritizedProjectPart{projectPart, priority(*projectPart)};
+ });
+
+ // Sort according to priority
+ const auto lessThan = [&] (const PrioritizedProjectPart &p1,
+ const PrioritizedProjectPart &p2) {
+ return p1.priority > p2.priority;
+ };
+ std::stable_sort(prioritized.begin(), prioritized.end(), lessThan);
+
+ return prioritized;
+ }
- return thePriority;
-}
+ int priority(const ProjectPart &projectPart) const
+ {
+ int thePriority = 0;
-static ProjectPart::Ptr chooseFromMultiple(const QList<ProjectPart::Ptr> &projectParts,
- const ProjectExplorer::Project *activeProject,
- Language languagePreference)
-{
- QList<ProjectPart::Ptr> projectPartsPrioritized = projectParts;
- const auto lessThan = [&] (const ProjectPart::Ptr &p1, const ProjectPart::Ptr &p2) {
- return priority(*p1, activeProject, languagePreference)
- > priority(*p2, activeProject, languagePreference);
- };
- std::stable_sort(projectPartsPrioritized.begin(), projectPartsPrioritized.end(), lessThan);
+ if (projectPart.project == m_activeProject)
+ thePriority += 100;
- return projectPartsPrioritized.first();
-}
+ if (projectPart.selectedForBuilding)
+ thePriority += 10;
+
+ if (isPreferredLanguage(projectPart))
+ thePriority += 1;
+
+ return thePriority;
+ }
+
+ bool isPreferredLanguage(const ProjectPart &projectPart) const
+ {
+ const bool isCProjectPart = projectPart.languageVersion <= ProjectPart::LatestCVersion;
+ return (m_languagePreference == Language::C && isCProjectPart)
+ || (m_languagePreference == Language::Cxx && !isCProjectPart);
+ }
-ProjectPart::Ptr ProjectPartChooser::choose(const QString &filePath,
- const ProjectPart::Ptr &currentProjectPart,
- const ProjectPart::Ptr &manuallySetProjectPart,
- bool stickToPreviousProjectPart,
- const ProjectExplorer::Project *activeProject,
- Language languagePreference,
- bool projectHasChanged) const
+private:
+ const QList<ProjectPart::Ptr> m_projectParts;
+ const ProjectExplorer::Project *m_activeProject = nullptr;
+ Language m_languagePreference = Language::Cxx;
+
+ // Results
+ ProjectPart::Ptr m_projectPart;
+ bool m_isAmbiguous = false;
+};
+
+ProjectPartInfo ProjectPartChooser::choose(
+ const QString &filePath,
+ const ProjectPart::Ptr &currentProjectPart,
+ const ProjectPart::Ptr &manuallySetProjectPart,
+ bool stickToPreviousProjectPart,
+ const ProjectExplorer::Project *activeProject,
+ Language languagePreference,
+ bool projectHasChanged) const
{
QTC_CHECK(m_projectPartsForFile);
QTC_CHECK(m_projectPartsFromDependenciesForFile);
QTC_CHECK(m_fallbackProjectPart);
if (manuallySetProjectPart)
- return manuallySetProjectPart;
+ return {manuallySetProjectPart, ProjectPartInfo::NoHint};
ProjectPart::Ptr projectPart = currentProjectPart;
+ ProjectPartInfo::Hint hint = ProjectPartInfo::NoHint;
QList<ProjectPart::Ptr> projectParts = m_projectPartsForFile(filePath);
if (projectParts.isEmpty()) {
if (projectPart && stickToPreviousProjectPart)
// File is not directly part of any project, but we got one before. We will re-use it,
// because re-calculating this can be expensive when the dependency table is big.
- return projectPart;
+ return {projectPart, ProjectPartInfo::NoHint};
// Fall-back step 1: Get some parts through the dependency table:
projectParts = m_projectPartsFromDependenciesForFile(filePath);
- if (projectParts.isEmpty())
+ if (projectParts.isEmpty()) {
// Fall-back step 2: Use fall-back part from the model manager:
projectPart = m_fallbackProjectPart();
- else
- projectPart = chooseFromMultiple(projectParts, activeProject, languagePreference);
+ hint = ProjectPartInfo::IsFallbackMatch;
+ } else {
+ ProjectPartPrioritizer prioritizer(projectParts, activeProject, languagePreference);
+ projectPart = prioritizer.projectPart();
+ }
} else {
- if (projectHasChanged || !projectParts.contains(projectPart))
- projectPart = chooseFromMultiple(projectParts, activeProject, languagePreference);
+ if (projectHasChanged || !projectParts.contains(projectPart)) {
+ ProjectPartPrioritizer prioritizer(projectParts, activeProject, languagePreference);
+ projectPart = prioritizer.projectPart();
+ hint = prioritizer.isAmbiguous()
+ ? ProjectPartInfo::IsAmbiguousMatch
+ : ProjectPartInfo::NoHint;
+ }
}
- return projectPart;
+ return {projectPart, hint};
}
void ProjectPartChooser::setFallbackProjectPart(const FallBackProjectPart &getter)
diff --git a/src/plugins/cpptools/cppprojectpartchooser.h b/src/plugins/cpptools/cppprojectpartchooser.h
index e0a8581c34..940c2c092e 100644
--- a/src/plugins/cpptools/cppprojectpartchooser.h
+++ b/src/plugins/cpptools/cppprojectpartchooser.h
@@ -25,7 +25,7 @@
#pragma once
-#include "cpplanguage.h"
+#include "cpptools_utils.h"
#include "projectpart.h"
#include <functional>
@@ -48,13 +48,14 @@ public:
void setProjectPartsForFile(const ProjectPartsForFile &getter);
void setProjectPartsFromDependenciesForFile(const ProjectPartsFromDependenciesForFile &getter);
- ProjectPart::Ptr choose(const QString &filePath,
- const ProjectPart::Ptr &currentProjectPart,
- const ProjectPart::Ptr &manuallySetProjectPart,
- bool stickToPreviousProjectPart,
- const ProjectExplorer::Project *activeProject,
- Language languagePreference,
- bool projectHasChanged) const;
+ ProjectPartInfo choose(
+ const QString &filePath,
+ const ProjectPart::Ptr &currentProjectPart,
+ const ProjectPart::Ptr &manuallySetProjectPart,
+ bool stickToPreviousProjectPart,
+ const ProjectExplorer::Project *activeProject,
+ Language languagePreference,
+ bool projectHasChanged) const;
private:
FallBackProjectPart m_fallbackProjectPart;
diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro
index 9b3b064b77..f65ffdd764 100644
--- a/src/plugins/cpptools/cpptools.pro
+++ b/src/plugins/cpptools/cpptools.pro
@@ -34,7 +34,6 @@ HEADERS += \
cppfunctionsfilter.h \
cppincludesfilter.h \
cppindexingsupport.h \
- cpplanguage.h \
cpplocalsymbols.h \
cpplocatordata.h \
cpplocatorfilter.h \
@@ -50,6 +49,7 @@ HEADERS += \
cppsemanticinfoupdater.h \
cppsourceprocessor.h \
cpptools_global.h \
+ cpptools_utils.h \
cpptoolsconstants.h \
cpptoolsjsextension.h \
cpptoolsplugin.h \
diff --git a/src/plugins/cpptools/cpptools.qbs b/src/plugins/cpptools/cpptools.qbs
index f7047ed28d..c05db793a4 100644
--- a/src/plugins/cpptools/cpptools.qbs
+++ b/src/plugins/cpptools/cpptools.qbs
@@ -61,7 +61,6 @@ Project {
"cppfunctionsfilter.cpp", "cppfunctionsfilter.h",
"cppincludesfilter.cpp", "cppincludesfilter.h",
"cppindexingsupport.cpp", "cppindexingsupport.h",
- "cpplanguage.h",
"cpplocalsymbols.cpp", "cpplocalsymbols.h",
"cpplocatordata.cpp", "cpplocatordata.h",
"cpplocatorfilter.cpp", "cpplocatorfilter.h",
@@ -81,6 +80,7 @@ Project {
"cpptoolsbridgeqtcreatorimplementation.cpp", "cpptoolsbridgeqtcreatorimplementation.h",
"cpptools.qrc",
"cpptools_global.h",
+ "cpptools_utils.h",
"cpptoolsconstants.h",
"cpptoolsjsextension.cpp", "cpptoolsjsextension.h",
"cpptoolsplugin.cpp", "cpptoolsplugin.h",
diff --git a/src/plugins/cpptools/cpplanguage.h b/src/plugins/cpptools/cpptools_utils.h
index 2a84641d4d..a90805a7ab 100644
--- a/src/plugins/cpptools/cpplanguage.h
+++ b/src/plugins/cpptools/cpptools_utils.h
@@ -25,8 +25,23 @@
#pragma once
+#include "projectpart.h"
+
namespace CppTools {
enum class Language { C, Cxx };
+class ProjectPartInfo {
+public:
+ enum Hint {
+ NoHint,
+ IsFallbackMatch,
+ IsAmbiguousMatch
+ };
+
+public:
+ ProjectPart::Ptr projectPart;
+ Hint hint;
+};
+
} // namespace CppTools
diff --git a/src/plugins/cpptools/cpptoolsbridgeqtcreatorimplementation.cpp b/src/plugins/cpptools/cpptoolsbridgeqtcreatorimplementation.cpp
index 7b9eb69ca1..e0b6b9fdab 100644
--- a/src/plugins/cpptools/cpptoolsbridgeqtcreatorimplementation.cpp
+++ b/src/plugins/cpptools/cpptoolsbridgeqtcreatorimplementation.cpp
@@ -47,7 +47,7 @@ namespace {
CppTools::ProjectPart::Ptr projectPartForFile(const QString &filePath)
{
if (const auto parser = BaseEditorDocumentParser::get(filePath))
- return parser->projectPart();
+ return parser->projectPartInfo().projectPart;
return CppTools::ProjectPart::Ptr();
}