diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index 15b1271d30b..35b3333b4ce 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -395,58 +395,58 @@ std::optional EnvironmentProvider::provider(const QByteArra void EnvironmentChange::addSetValue(const QString &key, const QString &value) { - m_changeItems.append({Item::SetValue, QVariant::fromValue(QPair(key, value))}); + m_changeItems.append(Item{std::in_place_index_t(), QPair{key, value}}); } void EnvironmentChange::addUnsetValue(const QString &key) { - m_changeItems.append({Item::UnsetValue, key}); + m_changeItems.append(Item{std::in_place_index_t(), key}); } void EnvironmentChange::addPrependToPath(const FilePaths &values) { for (int i = values.size(); --i >= 0; ) { const FilePath value = values.at(i); - m_changeItems.append({Item::PrependToPath, value.toVariant()}); + m_changeItems.append(Item{std::in_place_index_t(), value}); } } void EnvironmentChange::addAppendToPath(const FilePaths &values) { for (const FilePath &value : values) - m_changeItems.append({Item::AppendToPath, value.toVariant()}); + m_changeItems.append(Item{std::in_place_index_t(), value}); } EnvironmentChange EnvironmentChange::fromFixedEnvironment(const Environment &fixedEnv) { EnvironmentChange change; - change.m_changeItems.append({Item::SetFixedEnvironment, QVariant::fromValue(fixedEnv)}); + change.m_changeItems.append(Item{std::in_place_index_t(), fixedEnv}); return change; } void EnvironmentChange::applyToEnvironment(Environment &env) const { for (const Item &item : m_changeItems) { - switch (item.type) { - case Item::SetSystemEnvironment: + switch (item.index()) { + case SetSystemEnvironment: env = Environment::systemEnvironment(); break; - case Item::SetFixedEnvironment: - env = item.data.value(); + case SetFixedEnvironment: + env = std::get(item); break; - case Item::SetValue: { - auto data = item.data.value>(); + case SetValue: { + const QPair data = std::get(item); env.set(data.first, data.second); break; } - case Item::UnsetValue: - env.unset(item.data.toString()); + case UnsetValue: + env.unset(std::get(item)); break; - case Item::PrependToPath: - env.prependOrSetPath(FilePath::fromVariant(item.data)); + case PrependToPath: + env.prependOrSetPath(std::get(item)); break; - case Item::AppendToPath: - env.appendOrSetPath(FilePath::fromVariant(item.data)); + case AppendToPath: + env.appendOrSetPath(std::get(item)); break; } } diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index 65ecc8dbbeb..f86a32691f2 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -109,22 +109,24 @@ class QTCREATOR_UTILS_EXPORT EnvironmentChange final public: EnvironmentChange() = default; - class Item final - { - public: - enum Type { - SetSystemEnvironment, - SetFixedEnvironment, - SetValue, - UnsetValue, - PrependToPath, - AppendToPath, - }; - - Type type; - QVariant data; + enum Type { + SetSystemEnvironment, + SetFixedEnvironment, + SetValue, + UnsetValue, + PrependToPath, + AppendToPath, }; + using Item = std::variant< + std::monostate, // SetSystemEnvironment dummy + Environment, // SetFixedEnvironment + QPair, // SetValue + QString, // UnsetValue + FilePath, // PrependToPath + FilePath // AppendToPath + >; + static EnvironmentChange fromFixedEnvironment(const Environment &fixedEnv); void applyToEnvironment(Environment &) const;