Environment: Avoid calling throwing functions

We do not declare any `throws` and this way we can also use QTC_GUARD

Coverity-Id: 1586292
Change-Id: I75efd625e096bf02c1f7a85b9573bd134a9fb020
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Eike Ziller
2024-05-06 17:12:32 +02:00
parent 23b7ac84a9
commit ec8d86e954

View File

@@ -433,60 +433,82 @@ const NameValueDictionary &Environment::resolved() const
m_dict = Environment::systemEnvironment().toDictionary(); m_dict = Environment::systemEnvironment().toDictionary();
m_fullDict = true; m_fullDict = true;
break; break;
case SetFixedDictionary: case SetFixedDictionary: {
m_dict = std::get<SetFixedDictionary>(item); const auto dict = std::get_if<SetFixedDictionary>(&item);
m_fullDict = true; if (QTC_GUARD(dict)) {
break; m_dict = *dict;
case SetValue: { m_fullDict = true;
auto [key, value, enabled] = std::get<SetValue>(item);
m_dict.set(key, value, enabled);
break;
}
case SetFallbackValue: {
auto [key, value] = std::get<SetFallbackValue>(item);
if (m_fullDict) {
if (m_dict.value(key).isEmpty())
m_dict.set(key, value, true);
} else {
QTC_ASSERT(false, qDebug() << "operating on partial dictionary");
m_dict.set(key, value, true);
} }
break; break;
} }
case UnsetValue: case SetValue: {
m_dict.unset(std::get<UnsetValue>(item)); const auto setvalue = std::get_if<SetValue>(&item);
if (QTC_GUARD(setvalue)) {
auto [key, value, enabled] = *setvalue;
m_dict.set(key, value, enabled);
}
break; break;
}
case SetFallbackValue: {
const auto fallbackvalue = std::get_if<SetFallbackValue>(&item);
if (QTC_GUARD(fallbackvalue)) {
auto [key, value] = *fallbackvalue;
if (m_fullDict) {
if (m_dict.value(key).isEmpty())
m_dict.set(key, value, true);
} else {
QTC_ASSERT(false, qDebug() << "operating on partial dictionary");
m_dict.set(key, value, true);
}
}
break;
}
case UnsetValue: {
const auto unsetvalue = std::get_if<UnsetValue>(&item);
if (QTC_GUARD(unsetvalue))
m_dict.unset(*unsetvalue);
break;
}
case PrependOrSet: { case PrependOrSet: {
auto [key, value, sep] = std::get<PrependOrSet>(item); const auto prependorset = std::get_if<PrependOrSet>(&item);
QTC_ASSERT(!key.contains('='), return m_dict); if (QTC_GUARD(prependorset)) {
const auto it = m_dict.findKey(key); auto [key, value, sep] = *prependorset;
if (it == m_dict.m_values.end()) { QTC_ASSERT(!key.contains('='), return m_dict);
m_dict.m_values.insert(DictKey(key, m_dict.nameCaseSensitivity()), {value, true}); const auto it = m_dict.findKey(key);
} else { if (it == m_dict.m_values.end()) {
// Prepend unless it is already there m_dict.m_values.insert(DictKey(key, m_dict.nameCaseSensitivity()), {value, true});
const QString toPrepend = value + pathListSeparator(sep); } else {
if (!it.value().first.startsWith(toPrepend)) // Prepend unless it is already there
it.value().first.prepend(toPrepend); const QString toPrepend = value + pathListSeparator(sep);
if (!it.value().first.startsWith(toPrepend))
it.value().first.prepend(toPrepend);
}
} }
break; break;
} }
case AppendOrSet: { case AppendOrSet: {
auto [key, value, sep] = std::get<AppendOrSet>(item); const auto appendorset = std::get_if<AppendOrSet>(&item);
QTC_ASSERT(!key.contains('='), return m_dict); if (QTC_GUARD(appendorset)) {
const auto it = m_dict.findKey(key); auto [key, value, sep] = *appendorset;
if (it == m_dict.m_values.end()) { QTC_ASSERT(!key.contains('='), return m_dict);
m_dict.m_values.insert(DictKey(key, m_dict.nameCaseSensitivity()), {value, true}); const auto it = m_dict.findKey(key);
} else { if (it == m_dict.m_values.end()) {
// Prepend unless it is already there m_dict.m_values.insert(DictKey(key, m_dict.nameCaseSensitivity()), {value, true});
const QString toAppend = pathListSeparator(sep) + value; } else {
if (!it.value().first.endsWith(toAppend)) // Prepend unless it is already there
it.value().first.append(toAppend); const QString toAppend = pathListSeparator(sep) + value;
if (!it.value().first.endsWith(toAppend))
it.value().first.append(toAppend);
}
} }
break; break;
} }
case Modify: { case Modify: {
EnvironmentItems items = std::get<Modify>(item); const auto modify = std::get_if<Modify>(&item);
m_dict.modify(items); if (QTC_GUARD(modify)) {
EnvironmentItems items = *modify;
m_dict.modify(items);
}
break; break;
} }
case SetupEnglishOutput: case SetupEnglishOutput: