diff options
| author | David Schulz <[email protected]> | 2021-02-26 08:29:15 +0100 |
|---|---|---|
| committer | David Schulz <[email protected]> | 2021-03-02 12:51:47 +0000 |
| commit | d17277b5466ced5c39e615efcc7820be47d770f4 (patch) | |
| tree | facc44eac9e00c61145a89c5b37fbb78b9053042 /src/libs/languageserverprotocol/jsonobject.cpp | |
| parent | 687597152e67bd662805bf01ae1202db3ca2db2e (diff) | |
LSP: reduce error handling complexity
Instead of checking recursively every possible object just check the
required keys for an object and validate it on construction or
assignment from json.
This will reduce the implementation effort for protocol extensions and
also reduce the false positives we might get if the protocol gets
updated.
Change-Id: I3df24e62430d2c7575d26c1581e6a9606e7da4c1
Reviewed-by: hjk <[email protected]>
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/libs/languageserverprotocol/jsonobject.cpp')
| -rw-r--r-- | src/libs/languageserverprotocol/jsonobject.cpp | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/src/libs/languageserverprotocol/jsonobject.cpp b/src/libs/languageserverprotocol/jsonobject.cpp index 7bdf3f86888..75edb76de3b 100644 --- a/src/libs/languageserverprotocol/jsonobject.cpp +++ b/src/libs/languageserverprotocol/jsonobject.cpp @@ -29,34 +29,6 @@ namespace LanguageServerProtocol { -template <> -bool JsonObject::checkVal<QString>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::String, errorHierarchy); } - -template <> -bool JsonObject::checkVal<int>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::Double, errorHierarchy); } - -template <> -bool JsonObject::checkVal<double>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::Double, errorHierarchy); } - -template <> -bool JsonObject::checkVal<bool>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::Bool, errorHierarchy); } - -template <> -bool JsonObject::checkVal<std::nullptr_t>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::Null, errorHierarchy); } - -template<> -bool JsonObject::checkVal<QJsonArray>(ErrorHierarchy *errorHierarchy, const QJsonValue &val) -{ return checkType(val.type(), QJsonValue::Array, errorHierarchy); } - -template<> -bool JsonObject::checkVal<QJsonValue>(ErrorHierarchy * /*errorHierarchy*/, const QJsonValue &/*val*/) -{ return true; } - JsonObject &JsonObject::operator=(const JsonObject &other) = default; JsonObject &JsonObject::operator=(JsonObject &&other) @@ -75,43 +47,4 @@ QJsonObject::iterator JsonObject::insert(const QString &key, const QJsonValue &v return m_jsonObject.insert(key, value); } -bool JsonObject::checkKey(ErrorHierarchy *errorHierarchy, const QString &key, - const std::function<bool (const QJsonValue &)> &predicate) const -{ - const bool valid = predicate(m_jsonObject.value(key)); - if (!valid && errorHierarchy) - errorHierarchy->prependMember(key); - return valid; -} - -QString JsonObject::valueTypeString(QJsonValue::Type type) -{ - switch (type) { - case QJsonValue::Null: return QString("Null"); - case QJsonValue::Bool: return QString("Bool"); - case QJsonValue::Double: return QString("Double"); - case QJsonValue::String: return QString("String"); - case QJsonValue::Array: return QString("Array"); - case QJsonValue::Object: return QString("Object"); - case QJsonValue::Undefined: return QString("Undefined"); - } - return QString(); -} - -QString JsonObject::errorString(QJsonValue::Type expected, QJsonValue::Type actual) -{ - return tr("Expected type %1 but value contained %2") - .arg(valueTypeString(expected), valueTypeString(actual)); -} - -bool JsonObject::checkType(QJsonValue::Type type, - QJsonValue::Type expectedType, - ErrorHierarchy *errorHierarchy) -{ - const bool ret = type == expectedType; - if (!ret && errorHierarchy) - errorHierarchy->setError(errorString(expectedType, type)); - return ret; -} - } // namespace LanguageServerProtocol |
