forked from qt-creator/qt-creator
CppTools: Add API to set/query compiler call data
...and make some comparison functions public. Change-Id: If4c9a95031dece32073ce111484a890230190688 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@theqtcompany.com>
This commit is contained in:
committed by
Fawzi Mohamed
parent
bb4a58304d
commit
33359a7922
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user