Commit 91c497b1 authored by Nikolai Kosjar's avatar Nikolai Kosjar
Browse files

CppTools: Make updateProjectPart() const

...and rename to "determineProjectPart".

This is in preparation for a follow-up change. determineProjectPart()
should not set any state.

Change-Id: Iad7be8638fd97a79a4227a944896ac9af0a36862
Reviewed-by: default avatarErik Verbruggen <>
parent a32a9b3d
......@@ -94,7 +94,7 @@ void ClangEditorDocumentParser::update(CppTools::WorkingCopy workingCopy)
QMutexLocker lock(m_marker->mutex());
QMutexLocker lock2(&m_mutex);
m_projectPart = determineProjectPart();
const QStringList options = createOptions(filePath(), projectPart(), true);
qCDebug(log, "Reparse options (cmd line equivalent): %s",
......@@ -45,7 +45,7 @@ namespace CppTools {
the "best" project part for a file.
Derived classes are expected to implement update() by using the protected
mutex, updateProjectPart() and by respecting the options set by the client.
mutex, determineProjectPart() and by respecting the options set by the client.
BaseEditorDocumentParser::BaseEditorDocumentParser(const QString &filePath)
......@@ -115,33 +115,35 @@ BaseEditorDocumentParser *BaseEditorDocumentParser::get(const QString &filePath)
return 0;
void BaseEditorDocumentParser::updateProjectPart()
ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart() const
if (m_manuallySetProjectPart) {
m_projectPart = m_manuallySetProjectPart;
if (m_manuallySetProjectPart)
return m_manuallySetProjectPart;
ProjectPart::Ptr projectPart = m_projectPart;
CppModelManager *cmm = CppModelManager::instance();
QList<ProjectPart::Ptr> projectParts = cmm->projectPart(m_filePath);
if (projectParts.isEmpty()) {
if (m_projectPart)
if (projectPart)
// 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;
// Fall-back step 1: Get some parts through the dependency table:
projectParts = cmm->projectPartFromDependencies(Utils::FileName::fromString(m_filePath));
if (projectParts.isEmpty())
// Fall-back step 2: Use fall-back part from the model manager:
m_projectPart = cmm->fallbackProjectPart();
projectPart = cmm->fallbackProjectPart();
m_projectPart = projectParts.first();
projectPart = projectParts.first();
} else {
if (!projectParts.contains(m_projectPart))
if (!projectParts.contains(projectPart))
// Apparently the project file changed, so update our project part.
m_projectPart = projectParts.first();
projectPart = projectParts.first();
return projectPart;
bool BaseEditorDocumentParser::editorDefinesChanged() const
......@@ -63,18 +63,18 @@ public:
static BaseEditorDocumentParser *get(const QString &filePath);
void updateProjectPart();
ProjectPart::Ptr determineProjectPart() const;
bool editorDefinesChanged() const;
void resetEditorDefinesChanged();
mutable QMutex m_mutex;
ProjectPart::Ptr m_projectPart;
const QString m_filePath;
ProjectPart::Ptr m_projectPart;
ProjectPart::Ptr m_manuallySetProjectPart;
bool m_usePrecompiledHeaders;
......@@ -62,7 +62,7 @@ void BuiltinEditorDocumentParser::update(WorkingCopy workingCopy)
QString projectConfigFile;
LanguageFeatures features = LanguageFeatures::defaultFeatures();
m_projectPart = determineProjectPart();
if (m_forceSnapshotInvalidation) {
invalidateSnapshot = true;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment