forked from qt-creator/qt-creator
ToolChainManager: Filter duplicate toolchains more aggressively
Change-Id: I2a333cc54d3c77a1fd43001a94c212e36b2e5f39 Reviewed-by: BogDan Vatra <bogdan@kdab.com> Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
This commit is contained in:
committed by
Alessandro Portale
parent
1defeda8a3
commit
0d7f166b19
@@ -203,11 +203,21 @@ static QList<ToolChain *> intersectByEqual(const QList<ToolChain *> &a, const QL
|
||||
});
|
||||
}
|
||||
|
||||
static QList<ToolChain *> makeUnique(const QList<ToolChain *> &a)
|
||||
static QList<ToolChain *> makeUniqueByPointerEqual(const QList<ToolChain *> &a)
|
||||
{
|
||||
return QSet<ToolChain *>::fromList(a).toList();
|
||||
}
|
||||
|
||||
static QList<ToolChain *> makeUniqueByEqual(const QList<ToolChain *> &a)
|
||||
{
|
||||
QList<ToolChain *> result;
|
||||
foreach (ToolChain *tc, a) {
|
||||
if (!Utils::contains(result, [tc](ToolChain *rtc) { return *tc == *rtc; }))
|
||||
result.append(tc);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct ToolChainOperations
|
||||
@@ -223,12 +233,13 @@ static ToolChainOperations mergeToolChainLists(const QList<ToolChain *> &systemF
|
||||
const QList<ToolChain *> &userFileTcs,
|
||||
const QList<ToolChain *> &autodetectedTcs)
|
||||
{
|
||||
const QList<ToolChain *> uniqueUserFileTcs = makeUniqueByEqual(userFileTcs);
|
||||
const QList<ToolChain *> manualUserTcs
|
||||
= Utils::filtered(userFileTcs, [](ToolChain *t) { return !t->isAutoDetected(); });
|
||||
= Utils::filtered(uniqueUserFileTcs, [](ToolChain *t) { return !t->isAutoDetected(); });
|
||||
|
||||
// Remove systemFileTcs from autodetectedUserTcs based on id-matches:
|
||||
const QList<ToolChain *> autodetectedUserFileTcs
|
||||
= Utils::filtered(userFileTcs, &ToolChain::isAutoDetected);
|
||||
= Utils::filtered(uniqueUserFileTcs, &ToolChain::isAutoDetected);
|
||||
const QList<ToolChain *> autodetectedUserTcs = subtractById(autodetectedUserFileTcs, systemFileTcs);
|
||||
|
||||
// Calculate a set of Tcs that were detected before (and saved to userFile) and that
|
||||
@@ -255,7 +266,7 @@ static ToolChainOperations mergeToolChainLists(const QList<ToolChain *> &systemF
|
||||
result.toRegister = result.toDemote + systemFileTcs + redetectedUserTcs + newlyAutodetectedTcs
|
||||
+ validManualUserTcs;
|
||||
|
||||
result.toDelete = makeUnique(subtractByPointerEqual(systemFileTcs + userFileTcs + autodetectedTcs,
|
||||
result.toDelete = makeUniqueByPointerEqual(subtractByPointerEqual(systemFileTcs + userFileTcs + autodetectedTcs,
|
||||
result.toRegister));
|
||||
return result;
|
||||
}
|
||||
@@ -542,6 +553,9 @@ void ProjectExplorerPlugin::testToolChainManager_data()
|
||||
QTest::newRow("Auto: auto-redetect, user")
|
||||
<< (TCList()) << (TCList() << auto1) << (TCList() << auto1_2)
|
||||
<< (TCList()) << (TCList() << auto1);
|
||||
QTest::newRow("Auto: auto-redetect, duplicate users")
|
||||
<< (TCList()) << (TCList() << auto1 << auto1c) << (TCList() << auto1_2)
|
||||
<< (TCList()) << (TCList() << auto1);
|
||||
QTest::newRow("Auto: (no) auto, invalid user")
|
||||
<< (TCList()) << (TCList() << auto3i) << (TCList())
|
||||
<< (TCList()) << (TCList());
|
||||
|
Reference in New Issue
Block a user