forked from qt-creator/qt-creator
ProjectExplorer: Change language and language cateegory display storage
Effectively from container of pairs to pairs of containers. Saves a few transformations and temporary lists at the price of effectively storing the keys twice. This is all small stuff, so it should not matter performance or memory-wise at all, but helps me to reason about potential complexity on higher levels. Change-Id: Idf9e235b64d97b1168278ea3dcda34a476c20c08 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -27,12 +27,6 @@ namespace Internal {
|
|||||||
// ToolchainManagerPrivate
|
// ToolchainManagerPrivate
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
struct LanguageDisplayPair
|
|
||||||
{
|
|
||||||
Utils::Id id;
|
|
||||||
QString displayName;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ToolchainManagerPrivate
|
class ToolchainManagerPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -42,8 +36,13 @@ public:
|
|||||||
|
|
||||||
Toolchains m_toolChains; // prioritized List
|
Toolchains m_toolChains; // prioritized List
|
||||||
BadToolchains m_badToolchains; // to be skipped when auto-detecting
|
BadToolchains m_badToolchains; // to be skipped when auto-detecting
|
||||||
QVector<LanguageDisplayPair> m_languages;
|
|
||||||
QList<std::pair<LanguageCategory, QString>> m_languageCategories;
|
QList<Id> m_languages;
|
||||||
|
QHash<Id, QString> m_displayNameForLanguage;
|
||||||
|
|
||||||
|
QList<LanguageCategory> m_languageCategories;
|
||||||
|
QHash<LanguageCategory, QString> m_displayNameForCategory;
|
||||||
|
|
||||||
ToolchainDetectionSettings m_detectionSettings;
|
ToolchainDetectionSettings m_detectionSettings;
|
||||||
bool m_loaded = false;
|
bool m_loaded = false;
|
||||||
};
|
};
|
||||||
@@ -244,7 +243,7 @@ void ToolchainManager::deregisterToolchains(const Toolchains &toolchains)
|
|||||||
|
|
||||||
QList<Id> ToolchainManager::allLanguages()
|
QList<Id> ToolchainManager::allLanguages()
|
||||||
{
|
{
|
||||||
return Utils::transform<QList>(d->m_languages, &LanguageDisplayPair::id);
|
return d->m_languages;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolchainManager::registerLanguage(const Utils::Id &language, const QString &displayName)
|
bool ToolchainManager::registerLanguage(const Utils::Id &language, const QString &displayName)
|
||||||
@@ -252,40 +251,37 @@ bool ToolchainManager::registerLanguage(const Utils::Id &language, const QString
|
|||||||
QTC_ASSERT(language.isValid(), return false);
|
QTC_ASSERT(language.isValid(), return false);
|
||||||
QTC_ASSERT(!isLanguageSupported(language), return false);
|
QTC_ASSERT(!isLanguageSupported(language), return false);
|
||||||
QTC_ASSERT(!displayName.isEmpty(), return false);
|
QTC_ASSERT(!displayName.isEmpty(), return false);
|
||||||
d->m_languages.push_back({language, displayName});
|
d->m_languages.push_back(language);
|
||||||
|
d->m_displayNameForLanguage.insert(language, displayName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolchainManager::registerLanguageCategory(const LanguageCategory &languages, const QString &displayName)
|
void ToolchainManager::registerLanguageCategory(const LanguageCategory &languages, const QString &displayName)
|
||||||
{
|
{
|
||||||
d->m_languageCategories.push_back(std::make_pair(languages, displayName));
|
d->m_languageCategories.push_back(languages);
|
||||||
|
d->m_displayNameForCategory.insert(languages, displayName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ToolchainManager::displayNameOfLanguageId(const Utils::Id &id)
|
QString ToolchainManager::displayNameOfLanguageId(const Utils::Id &id)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(id.isValid(), return Tr::tr("None"));
|
QTC_ASSERT(id.isValid(), return Tr::tr("None"));
|
||||||
auto entry = Utils::findOrDefault(d->m_languages, Utils::equal(&LanguageDisplayPair::id, id));
|
QString display = d->m_displayNameForLanguage.value(id);
|
||||||
QTC_ASSERT(entry.id.isValid(), return Tr::tr("None"));
|
QTC_ASSERT(!display.isEmpty(), return Tr::tr("None"));
|
||||||
return entry.displayName;
|
return display;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ToolchainManager::displayNameOfLanguageCategory(const LanguageCategory &category)
|
QString ToolchainManager::displayNameOfLanguageCategory(const LanguageCategory &category)
|
||||||
{
|
{
|
||||||
if (int(category.size()) == 1)
|
if (int(category.size()) == 1)
|
||||||
return displayNameOfLanguageId(*category.begin());
|
return displayNameOfLanguageId(*category.begin());
|
||||||
QString name = Utils::findOrDefault(d->m_languageCategories, [&category](const auto &e) {
|
QString name = d->m_displayNameForCategory.value(category);
|
||||||
return e.first == category;
|
|
||||||
}).second;
|
|
||||||
QTC_ASSERT(!name.isEmpty(), return Tr::tr("None"));
|
QTC_ASSERT(!name.isEmpty(), return Tr::tr("None"));
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QList<LanguageCategory> ToolchainManager::languageCategories()
|
const QList<LanguageCategory> ToolchainManager::languageCategories()
|
||||||
{
|
{
|
||||||
QList<LanguageCategory> categories
|
QList<LanguageCategory> categories = d->m_languageCategories;
|
||||||
= Utils::transform<QList<LanguageCategory>>(d->m_languageCategories, [](const auto &e) {
|
|
||||||
return e.first;
|
|
||||||
});
|
|
||||||
const QList<Utils::Id> languages = allLanguages();
|
const QList<Utils::Id> languages = allLanguages();
|
||||||
for (const Utils::Id &l : languages) {
|
for (const Utils::Id &l : languages) {
|
||||||
if (Utils::contains(categories, [l](const LanguageCategory &lc) {
|
if (Utils::contains(categories, [l](const LanguageCategory &lc) {
|
||||||
@@ -301,7 +297,7 @@ const QList<LanguageCategory> ToolchainManager::languageCategories()
|
|||||||
|
|
||||||
bool ToolchainManager::isLanguageSupported(const Utils::Id &id)
|
bool ToolchainManager::isLanguageSupported(const Utils::Id &id)
|
||||||
{
|
{
|
||||||
return Utils::contains(d->m_languages, Utils::equal(&LanguageDisplayPair::id, id));
|
return d->m_languages.contains(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolchainManager::aboutToShutdown()
|
void ToolchainManager::aboutToShutdown()
|
||||||
|
|||||||
Reference in New Issue
Block a user