forked from qt-creator/qt-creator
ProjectExplorer: Make KitManager::kits(...) return an empty list during load
Make KitManager::kits(...) return an empty list during the time a kit is loaded. Simplify initialization of loading function. It is only triggered in ProjectExplorerPlugin::delayedInitialize, so that is safe. Change-Id: I2ed67d881b019b70cdcc23fcc4b0d48d04fa1df6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -114,17 +114,12 @@ KitManager::KitManager(QObject *parent)
|
|||||||
void KitManager::restoreKits()
|
void KitManager::restoreKits()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!d->m_initialized, return );
|
QTC_ASSERT(!d->m_initialized, return );
|
||||||
static bool initializing = false;
|
|
||||||
|
|
||||||
if (initializing) // kits will call kits() to check their display names, which will trigger another
|
|
||||||
// call to restoreKits, which ...
|
|
||||||
return;
|
|
||||||
|
|
||||||
initializing = true;
|
|
||||||
|
|
||||||
QList<Kit *> kitsToValidate;
|
QList<Kit *> kitsToValidate;
|
||||||
QList<Kit *> kitsToCheck;
|
QList<Kit *> kitsToCheck;
|
||||||
|
|
||||||
|
QList<Kit *> resultList;
|
||||||
|
|
||||||
// read all kits from SDK
|
// read all kits from SDK
|
||||||
KitList system
|
KitList system
|
||||||
= restoreKits(FileName::fromString(ICore::installerResourcePath() + KIT_FILENAME));
|
= restoreKits(FileName::fromString(ICore::installerResourcePath() + KIT_FILENAME));
|
||||||
@@ -142,10 +137,12 @@ void KitManager::restoreKits()
|
|||||||
// read all kits from user file
|
// read all kits from user file
|
||||||
KitList userKits = restoreKits(settingsFileName());
|
KitList userKits = restoreKits(settingsFileName());
|
||||||
foreach (Kit *k, userKits.kits) {
|
foreach (Kit *k, userKits.kits) {
|
||||||
if (k->isSdkProvided())
|
if (k->isSdkProvided()) {
|
||||||
kitsToCheck.append(k);
|
kitsToCheck.append(k);
|
||||||
else
|
} else {
|
||||||
addKit(k); // Store manual kits
|
completeKit(k); // Store manual kits
|
||||||
|
resultList.append(k);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Kit *toStore = nullptr;
|
Kit *toStore = nullptr;
|
||||||
@@ -174,7 +171,8 @@ void KitManager::restoreKits()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addKit(toStore);
|
completeKit(toStore); // Store manual kits
|
||||||
|
resultList.append(toStore);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete all loaded autodetected kits that were not rediscovered:
|
// Delete all loaded autodetected kits that were not rediscovered:
|
||||||
@@ -190,12 +188,14 @@ void KitManager::restoreKits()
|
|||||||
|
|
||||||
defaultKit->setup();
|
defaultKit->setup();
|
||||||
|
|
||||||
addKit(defaultKit);
|
completeKit(defaultKit); // Store manual kits
|
||||||
|
resultList.append(defaultKit);
|
||||||
}
|
}
|
||||||
|
|
||||||
Kit *k = kit(userKits.defaultKit);
|
Kit *k = Utils::findOrDefault(resultList, Utils::equal(&Kit::id, userKits.defaultKit));
|
||||||
if (!k)
|
if (!k)
|
||||||
k = Utils::findOrDefault(d->m_kitList, &Kit::isValid);
|
k = Utils::findOrDefault(resultList, &Kit::isValid);
|
||||||
|
std::swap(resultList, d->m_kitList);
|
||||||
setDefaultKit(k);
|
setDefaultKit(k);
|
||||||
|
|
||||||
d->m_writer = new PersistentSettingsWriter(settingsFileName(), "QtCreatorProfiles");
|
d->m_writer = new PersistentSettingsWriter(settingsFileName(), "QtCreatorProfiles");
|
||||||
@@ -240,7 +240,6 @@ bool KitManager::isLoaded()
|
|||||||
|
|
||||||
void KitManager::registerKitInformation(std::unique_ptr<KitInformation> &&ki)
|
void KitManager::registerKitInformation(std::unique_ptr<KitInformation> &&ki)
|
||||||
{
|
{
|
||||||
QTC_CHECK(!isLoaded());
|
|
||||||
QTC_ASSERT(ki->id().isValid(), return );
|
QTC_ASSERT(ki->id().isValid(), return );
|
||||||
QTC_ASSERT(!Utils::contains(d->m_informationList, ki.get()), return );
|
QTC_ASSERT(!Utils::contains(d->m_informationList, ki.get()), return );
|
||||||
|
|
||||||
@@ -253,9 +252,6 @@ void KitManager::registerKitInformation(std::unique_ptr<KitInformation> &&ki)
|
|||||||
});
|
});
|
||||||
d->m_informationList.insert(it, std::move(ki));
|
d->m_informationList.insert(it, std::move(ki));
|
||||||
|
|
||||||
if (!isLoaded())
|
|
||||||
return;
|
|
||||||
|
|
||||||
foreach (Kit *k, kits()) {
|
foreach (Kit *k, kits()) {
|
||||||
if (!k->hasValue(ki->id()))
|
if (!k->hasValue(ki->id()))
|
||||||
k->setValue(ki->id(), ki->defaultValue(k));
|
k->setValue(ki->id(), ki->defaultValue(k));
|
||||||
@@ -429,7 +425,8 @@ bool KitManager::registerKit(Kit *k)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// make sure we have all the information in our kits:
|
// make sure we have all the information in our kits:
|
||||||
m_instance->addKit(k);
|
completeKit(k);
|
||||||
|
d->m_kitList.append(k);
|
||||||
|
|
||||||
if (!d->m_defaultKit || (!d->m_defaultKit->isValid() && k->isValid()))
|
if (!d->m_defaultKit || (!d->m_defaultKit->isValid() && k->isValid()))
|
||||||
setDefaultKit(k);
|
setDefaultKit(k);
|
||||||
@@ -461,23 +458,17 @@ void KitManager::setDefaultKit(Kit *k)
|
|||||||
emit m_instance->defaultkitChanged();
|
emit m_instance->defaultkitChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KitManager::addKit(Kit *k)
|
void KitManager::completeKit(Kit *k)
|
||||||
{
|
{
|
||||||
if (!k)
|
QTC_ASSERT(k, return);
|
||||||
return;
|
KitGuard g(k);
|
||||||
|
for (const std::unique_ptr<KitInformation> &ki : d->m_informationList) {
|
||||||
{
|
ki->upgrade(k);
|
||||||
KitGuard g(k);
|
if (!k->hasValue(ki->id()))
|
||||||
for (const std::unique_ptr<KitInformation> &ki : d->m_informationList) {
|
k->setValue(ki->id(), ki->defaultValue(k));
|
||||||
ki->upgrade(k);
|
else
|
||||||
if (!k->hasValue(ki->id()))
|
ki->fix(k);
|
||||||
k->setValue(ki->id(), ki->defaultValue(k));
|
|
||||||
else
|
|
||||||
ki->fix(k);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d->m_kitList.append(k);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
@@ -176,7 +176,7 @@ private:
|
|||||||
KitList restoreKits(const Utils::FileName &fileName);
|
KitList restoreKits(const Utils::FileName &fileName);
|
||||||
|
|
||||||
static void notifyAboutUpdate(Kit *k);
|
static void notifyAboutUpdate(Kit *k);
|
||||||
void addKit(Kit *k);
|
static void completeKit(Kit *k);
|
||||||
|
|
||||||
friend class ProjectExplorerPlugin; // for constructor
|
friend class ProjectExplorerPlugin; // for constructor
|
||||||
friend class Kit;
|
friend class Kit;
|
||||||
|
Reference in New Issue
Block a user