diff --git a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h index 52e31ba691c..45fc90594a2 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildinfo.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildinfo.h @@ -55,6 +55,16 @@ public: configuration = bc->cmakeConfiguration(); } + bool operator==(const BuildInfo &o) const final + { + if (!ProjectExplorer::BuildInfo::operator==(o)) + return false; + + auto other = static_cast(&o); + return sourceDirectory == other->sourceDirectory + && configuration == other->configuration; + } + QString sourceDirectory; CMakeConfig configuration; }; diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp index 761244d42ee..cd4bea5c093 100644 --- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp @@ -177,4 +177,10 @@ QString CMakeConfigItem::toString() const return QString::fromUtf8(key) + QLatin1Char(':') + typeStr + QLatin1Char('=') + QString::fromUtf8(value); } +bool CMakeConfigItem::operator==(const CMakeConfigItem &o) const +{ + // type, isAdvanced and documentation do not matter for a match! + return o.key == key && o.value == value; +} + } // namespace CMakeProjectManager diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h index f275465e4c2..70bacbb5cb1 100644 --- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h +++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h @@ -53,6 +53,8 @@ public: static CMakeConfigItem fromString(const QString &s); QString toString() const; + bool operator==(const CMakeConfigItem &o) const; + QByteArray key; Type type = STRING; bool isAdvanced = false; diff --git a/src/plugins/projectexplorer/buildinfo.h b/src/plugins/projectexplorer/buildinfo.h index ddda9363a4a..e2163097e6d 100644 --- a/src/plugins/projectexplorer/buildinfo.h +++ b/src/plugins/projectexplorer/buildinfo.h @@ -51,9 +51,10 @@ public: Core::Id kitId; BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown; - bool operator==(const BuildInfo &o) + virtual bool operator==(const BuildInfo &o) const { - return displayName == o.displayName && typeName == o.typeName + return m_factory == o.m_factory + && displayName == o.displayName && typeName == o.typeName && buildDirectory == o.buildDirectory && kitId == o.kitId && buildType == o.buildType; } diff --git a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h index 41e3eeb507c..97a8681852c 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildinfo.h +++ b/src/plugins/qmakeprojectmanager/qmakebuildinfo.h @@ -44,11 +44,15 @@ public: QString makefile; QMakeStepConfig config; - bool operator==(const QmakeBuildInfo &o) + bool operator==(const BuildInfo &o) const final { - return ProjectExplorer::BuildInfo::operator==(o) - && additionalArguments == o.additionalArguments - && config == o.config; + if (!ProjectExplorer::BuildInfo::operator==(o)) + return false; + + auto other = static_cast(&o); + return additionalArguments == other->additionalArguments + && makefile == other->makefile + && config == other->config; } QList reportIssues(const QString &projectPath,