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();
|
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 {
|
namespace {
|
||||||
|
|
||||||
struct ToolChainOperations
|
struct ToolChainOperations
|
||||||
@@ -223,12 +233,13 @@ static ToolChainOperations mergeToolChainLists(const QList<ToolChain *> &systemF
|
|||||||
const QList<ToolChain *> &userFileTcs,
|
const QList<ToolChain *> &userFileTcs,
|
||||||
const QList<ToolChain *> &autodetectedTcs)
|
const QList<ToolChain *> &autodetectedTcs)
|
||||||
{
|
{
|
||||||
|
const QList<ToolChain *> uniqueUserFileTcs = makeUniqueByEqual(userFileTcs);
|
||||||
const QList<ToolChain *> manualUserTcs
|
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:
|
// Remove systemFileTcs from autodetectedUserTcs based on id-matches:
|
||||||
const QList<ToolChain *> autodetectedUserFileTcs
|
const QList<ToolChain *> autodetectedUserFileTcs
|
||||||
= Utils::filtered(userFileTcs, &ToolChain::isAutoDetected);
|
= Utils::filtered(uniqueUserFileTcs, &ToolChain::isAutoDetected);
|
||||||
const QList<ToolChain *> autodetectedUserTcs = subtractById(autodetectedUserFileTcs, systemFileTcs);
|
const QList<ToolChain *> autodetectedUserTcs = subtractById(autodetectedUserFileTcs, systemFileTcs);
|
||||||
|
|
||||||
// Calculate a set of Tcs that were detected before (and saved to userFile) and that
|
// Calculate a set of Tcs that were detected before (and saved to userFile) and that
|
||||||
@@ -255,8 +266,8 @@ static ToolChainOperations mergeToolChainLists(const QList<ToolChain *> &systemF
|
|||||||
result.toRegister = result.toDemote + systemFileTcs + redetectedUserTcs + newlyAutodetectedTcs
|
result.toRegister = result.toDemote + systemFileTcs + redetectedUserTcs + newlyAutodetectedTcs
|
||||||
+ validManualUserTcs;
|
+ validManualUserTcs;
|
||||||
|
|
||||||
result.toDelete = makeUnique(subtractByPointerEqual(systemFileTcs + userFileTcs + autodetectedTcs,
|
result.toDelete = makeUniqueByPointerEqual(subtractByPointerEqual(systemFileTcs + userFileTcs + autodetectedTcs,
|
||||||
result.toRegister));
|
result.toRegister));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -542,6 +553,9 @@ void ProjectExplorerPlugin::testToolChainManager_data()
|
|||||||
QTest::newRow("Auto: auto-redetect, user")
|
QTest::newRow("Auto: auto-redetect, user")
|
||||||
<< (TCList()) << (TCList() << auto1) << (TCList() << auto1_2)
|
<< (TCList()) << (TCList() << auto1) << (TCList() << auto1_2)
|
||||||
<< (TCList()) << (TCList() << auto1);
|
<< (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")
|
QTest::newRow("Auto: (no) auto, invalid user")
|
||||||
<< (TCList()) << (TCList() << auto3i) << (TCList())
|
<< (TCList()) << (TCList() << auto3i) << (TCList())
|
||||||
<< (TCList()) << (TCList());
|
<< (TCList()) << (TCList());
|
||||||
|
Reference in New Issue
Block a user