diff --git a/src/libs/languageserverprotocol/jsonobject.h b/src/libs/languageserverprotocol/jsonobject.h index ec0bf94dd71..ff2f420c87c 100644 --- a/src/libs/languageserverprotocol/jsonobject.h +++ b/src/libs/languageserverprotocol/jsonobject.h @@ -70,6 +70,11 @@ protected: iterator insert(const QString &key, const JsonObject &value); iterator insert(const QString &key, const QJsonValue &value); + template + iterator insertVariant(const QString &key, const V &variant); + template + iterator insertVariant(const QString &key, const V &variant); + // QJSonObject redirections QJsonValue value(const QString &key) const { return m_jsonObject.value(key); } bool contains(const QString &key) const { return m_jsonObject.contains(key); } @@ -129,6 +134,19 @@ private: QJsonObject m_jsonObject; }; +template +JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant) +{ + return Utils::holds_alternative(variant) ? insert(key, Utils::get(variant)) : end(); +} + +template +JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant) +{ + auto result = insertVariant(key, variant); + return result != end() ? result : insertVariant(key, variant); +} + template T JsonObject::typedValue(const QString &key) const { diff --git a/src/libs/languageserverprotocol/lsptypes.cpp b/src/libs/languageserverprotocol/lsptypes.cpp index c9e44e4c38d..ddf2cc2ee3c 100644 --- a/src/libs/languageserverprotocol/lsptypes.cpp +++ b/src/libs/languageserverprotocol/lsptypes.cpp @@ -62,10 +62,7 @@ Utils::optional Diagnostic::code() const void Diagnostic::setCode(const Diagnostic::Code &code) { - if (auto val = Utils::get_if(&code)) - insert(codeKey, *val); - else if (auto val = Utils::get_if(&code)) - insert(codeKey, *val); + insertVariant(codeKey, code); } bool Diagnostic::isValid(ErrorHierarchy *error) const diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp index 268d972d442..29a95958c36 100644 --- a/src/libs/languageserverprotocol/servercapabilities.cpp +++ b/src/libs/languageserverprotocol/servercapabilities.cpp @@ -38,10 +38,7 @@ Utils::optional ServerCapabilities::textDo void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocumentSync &textDocumentSync) { - if (auto val = Utils::get_if(&textDocumentSync)) - insert(textDocumentSyncKey, *val); - else if (auto val = Utils::get_if(&textDocumentSync)) - insert(textDocumentSyncKey, *val); + insertVariant(textDocumentSyncKey, textDocumentSync); } TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper() @@ -72,10 +69,8 @@ ServerCapabilities::typeDefinitionProvider() const void ServerCapabilities::setTypeDefinitionProvider( const Utils::variant &typeDefinitionProvider) { - if (auto activated = Utils::get_if(&typeDefinitionProvider)) - insert(typeDefinitionProviderKey, *activated); - else if (auto options = Utils::get_if(&typeDefinitionProvider)) - insert(typeDefinitionProviderKey, *options); + insertVariant(typeDefinitionProviderKey, + typeDefinitionProvider); } Utils::optional> @@ -92,10 +87,7 @@ ServerCapabilities::implementationProvider() const void ServerCapabilities::setImplementationProvider( const Utils::variant &implementationProvider) { - if (Utils::holds_alternative(implementationProvider)) - insert(implementationProviderKey, Utils::get(implementationProvider)); - else - insert(implementationProviderKey, Utils::get(implementationProvider)); + insertVariant(implementationProviderKey, implementationProvider); } Utils::optional> ServerCapabilities::codeActionProvider() const @@ -124,10 +116,7 @@ Utils::optional> ServerC void ServerCapabilities::setRenameProvider(Utils::variant renameProvider) { - if (Utils::holds_alternative(renameProvider)) - insert(renameProviderKey, Utils::get(renameProvider)); - else if (Utils::holds_alternative(renameProvider)) - insert(renameProviderKey, Utils::get(renameProvider)); + insertVariant(renameProviderKey, renameProvider); } Utils::optional> ServerCapabilities::colorProvider() const @@ -143,10 +132,7 @@ Utils::optional> ServerCapabilities::colorProvi void ServerCapabilities::setColorProvider(Utils::variant colorProvider) { - if (Utils::holds_alternative(colorProvider)) - insert(renameProviderKey, Utils::get(colorProvider)); - else if (Utils::holds_alternative(colorProvider)) - insert(renameProviderKey, Utils::get(colorProvider)); + insertVariant(renameProviderKey, colorProvider); } bool ServerCapabilities::isValid(ErrorHierarchy *error) const @@ -188,10 +174,7 @@ ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::c void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications( Utils::variant changeNotifications) { - if (auto val = Utils::get_if(&changeNotifications)) - insert(changeNotificationsKey, *val); - else if (auto val = Utils::get_if(&changeNotifications)) - insert(changeNotificationsKey, *val); + insertVariant(changeNotificationsKey, changeNotifications); } bool ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::isValid(ErrorHierarchy *error) const