Commit 33359a79 authored by Nikolai Kosjar's avatar Nikolai Kosjar Committed by Fawzi Mohamed

CppTools: Add API to set/query compiler call data

...and make some comparison functions public.

Change-Id: If4c9a95031dece32073ce111484a890230190688
Reviewed-by: default avatarFawzi Mohamed <fawzi.mohamed@theqtcompany.com>
parent bb4a5830
......@@ -629,21 +629,9 @@ public:
, m_newSourceFiles(newProjectInfo.sourceFiles())
{}
bool definesChanged() const
{
return m_new.defines() != m_old.defines();
}
bool configurationChanged() const
{
return definesChanged()
|| m_new.headerPaths() != m_old.headerPaths();
}
bool nothingChanged() const
{
return !configurationChanged() && m_new.sourceFiles() == m_old.sourceFiles();
}
bool definesChanged() const { return m_new.definesChanged(m_old); }
bool configurationChanged() const { return m_new.configurationChanged(m_old); }
bool configurationOrFilesChanged() const { return m_new.configurationOrFilesChanged(m_old); }
QSet<QString> addedFiles() const
{
......@@ -735,8 +723,12 @@ QFuture<void> CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn
ProjectInfo oldProjectInfo = d->m_projectToProjectsInfo.value(project);
if (oldProjectInfo.isValid()) {
ProjectInfoComparer comparer(oldProjectInfo, newProjectInfo);
if (comparer.nothingChanged())
if (!comparer.configurationOrFilesChanged()) {
// Some other attached data might have changed
d->m_projectToProjectsInfo.insert(project, newProjectInfo);
return QFuture<void>();
}
// If the project configuration changed, do a full reindexing
if (comparer.configurationChanged()) {
......
......@@ -137,6 +137,36 @@ ProjectInfo::ProjectInfo(QPointer<ProjectExplorer::Project> project)
: m_project(project)
{}
bool ProjectInfo::operator ==(const ProjectInfo &other) const
{
return m_project == other.m_project
&& m_projectParts == other.m_projectParts
&& m_compilerCallData == other.m_compilerCallData
&& m_headerPaths == other.m_headerPaths
&& m_sourceFiles == other.m_sourceFiles
&& m_defines == other.m_defines;
}
bool ProjectInfo::operator !=(const ProjectInfo &other) const
{
return !operator ==(other);
}
bool ProjectInfo::definesChanged(const ProjectInfo &other) const
{
return m_defines != other.m_defines;
}
bool ProjectInfo::configurationChanged(const ProjectInfo &other) const
{
return definesChanged(other) || m_headerPaths != other.m_headerPaths;
}
bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const
{
return configurationChanged(other) || m_sourceFiles != other.m_sourceFiles;
}
bool ProjectInfo::isValid() const
{
return !m_project.isNull();
......@@ -193,6 +223,7 @@ void ProjectInfo::clearProjectParts()
m_headerPaths.clear();
m_sourceFiles.clear();
m_defines.clear();
m_compilerCallData.clear();
}
const ProjectPart::HeaderPaths ProjectInfo::headerPaths() const
......@@ -210,6 +241,16 @@ const QByteArray ProjectInfo::defines() const
return m_defines;
}
void ProjectInfo::setCompilerCallData(const CompilerCallData &data)
{
m_compilerCallData = data;
}
ProjectInfo::CompilerCallData ProjectInfo::compilerCallData() const
{
return m_compilerCallData;
}
namespace {
class ProjectFileCategorizer
{
......
......@@ -142,6 +142,12 @@ public:
bool isValid() const;
bool operator ==(const ProjectInfo &other) const;
bool operator !=(const ProjectInfo &other) const;
bool definesChanged(const ProjectInfo &other) const;
bool configurationChanged(const ProjectInfo &other) const;
bool configurationOrFilesChanged(const ProjectInfo &other) const;
QPointer<ProjectExplorer::Project> project() const;
const QList<ProjectPart::Ptr> projectParts() const;
......@@ -153,10 +159,16 @@ public:
const QSet<QString> sourceFiles() const;
const QByteArray defines() const;
// Source file --> List of compiler calls
typedef QHash<QString, QList<QStringList>> CompilerCallData;
void setCompilerCallData(const CompilerCallData &data);
CompilerCallData compilerCallData() const;
private:
QPointer<ProjectExplorer::Project> m_project;
QList<ProjectPart::Ptr> m_projectParts;
// The members below are (re)calculated from the project parts once a part is appended.
CompilerCallData m_compilerCallData;
// The members below are (re)calculated from the project parts with finish()
ProjectPart::HeaderPaths m_headerPaths;
QSet<QString> m_sourceFiles;
QByteArray m_defines;
......
Markdown is supported
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