forked from qt-creator/qt-creator
ProjectExplorer: Let toolchains be (de)registered in bulk
When some code adds or removes a bunch of toolchains at once, that should be made explicit and also be reflected by the respective signal emissions. Fix some leaks and typos along the way. Change-Id: I4a1f12a2378316c5faf70e85a88adc467f076caf Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -441,52 +441,56 @@ static Toolchain *mingwToolchain(const FilePath &path, Id language)
|
||||
return toolChain;
|
||||
}
|
||||
|
||||
// FIXME: Do not register languages separately.
|
||||
static Toolchain *armGccToolchain(const FilePath &path, Id language)
|
||||
{
|
||||
Toolchain *toolChain = ToolchainManager::toolchain([&path, language](const Toolchain *t) {
|
||||
Toolchain *toolchain = ToolchainManager::toolchain([&path, language](const Toolchain *t) {
|
||||
return t->compilerCommand() == path && t->language() == language;
|
||||
});
|
||||
if (!toolChain) {
|
||||
if (!toolchain) {
|
||||
if (ToolchainFactory * const gccFactory = ToolchainFactory::factoryForType(
|
||||
ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID)) {
|
||||
const QList<Toolchain *> detected = gccFactory->detectForImport({path, language});
|
||||
QList<Toolchain *> detected = gccFactory->detectForImport({path, language});
|
||||
if (!detected.isEmpty()) {
|
||||
toolChain = detected.first();
|
||||
toolChain->setDetection(Toolchain::ManualDetection);
|
||||
toolChain->setDisplayName("Arm GCC");
|
||||
ToolchainManager::registerToolchain(toolChain);
|
||||
toolchain = detected.takeFirst();
|
||||
ToolchainManager::registerToolchains({toolchain});
|
||||
toolchain->setDetection(Toolchain::ManualDetection);
|
||||
toolchain->setDisplayName("Arm GCC");
|
||||
qDeleteAll(detected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return toolChain;
|
||||
return toolchain;
|
||||
}
|
||||
|
||||
static Toolchain *iarToolchain(const FilePath &path, Id language)
|
||||
{
|
||||
Toolchain *toolChain = ToolchainManager::toolchain([language](const Toolchain *t) {
|
||||
Toolchain *toolchain = ToolchainManager::toolchain([language](const Toolchain *t) {
|
||||
return t->typeId() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID
|
||||
&& t->language() == language;
|
||||
});
|
||||
if (!toolChain) {
|
||||
if (!toolchain) {
|
||||
if (ToolchainFactory * const iarFactory = ToolchainFactory::factoryForType(
|
||||
BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID)) {
|
||||
Toolchains detected = iarFactory->autoDetect(
|
||||
{{}, DeviceManager::defaultDesktopDevice(), {}});
|
||||
if (detected.isEmpty())
|
||||
detected = iarFactory->detectForImport({path, language});
|
||||
for (auto tc : detected) {
|
||||
if (tc->language() == language) {
|
||||
toolChain = tc;
|
||||
toolChain->setDetection(Toolchain::ManualDetection);
|
||||
toolChain->setDisplayName("IAREW");
|
||||
ToolchainManager::registerToolchain(toolChain);
|
||||
}
|
||||
Toolchains toRegister;
|
||||
Toolchains toDelete;
|
||||
std::tie(toRegister, toDelete)
|
||||
= Utils::partition(detected, Utils::equal(&Toolchain::language, language));
|
||||
for (Toolchain * const tc : toRegister) {
|
||||
tc->setDetection(Toolchain::ManualDetection);
|
||||
tc->setDisplayName("IAREW");
|
||||
}
|
||||
ToolchainManager::registerToolchains(toRegister);
|
||||
qDeleteAll(toDelete);
|
||||
}
|
||||
}
|
||||
|
||||
return toolChain;
|
||||
return toolchain;
|
||||
}
|
||||
|
||||
Toolchain *McuToolchainPackage::toolChain(Id language) const
|
||||
|
||||
Reference in New Issue
Block a user