aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/languageserverprotocol/jsonobject.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2021-02-26 08:29:15 +0100
committerDavid Schulz <[email protected]>2021-03-02 12:51:47 +0000
commitd17277b5466ced5c39e615efcc7820be47d770f4 (patch)
treefacc44eac9e00c61145a89c5b37fbb78b9053042 /src/libs/languageserverprotocol/jsonobject.cpp
parent687597152e67bd662805bf01ae1202db3ca2db2e (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.cpp67
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