mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
properties error handling
commit_hash:978f56b368a7a7703e6d2c83059dab292160b9cf
This commit is contained in:
@@ -9,10 +9,22 @@ public final class ExpressionResolver {
|
||||
private let functionsProvider: FunctionsProvider
|
||||
private let variableValueProvider: (String) -> Any?
|
||||
private let errorTracker: ExpressionErrorTracker
|
||||
private var resolutionStack: Set<String> = []
|
||||
|
||||
private lazy var context = ExpressionContext(
|
||||
evaluators: functionsProvider.evaluators,
|
||||
variableValueProvider: variableValueProvider,
|
||||
variableValueProvider: { [weak self] variableName in
|
||||
guard let self else { return nil }
|
||||
|
||||
if self.resolutionStack.contains(variableName) {
|
||||
return nil
|
||||
}
|
||||
|
||||
self.resolutionStack.insert(variableName)
|
||||
defer { self.resolutionStack.remove(variableName) }
|
||||
|
||||
return self.variableValueProvider(variableName)
|
||||
},
|
||||
customFunctionsStorageProvider: customFunctionsStorageProvider,
|
||||
dynamicVariablesEvaluator: functionsProvider.dynamicVariablesEvaluator,
|
||||
errorTracker: errorTracker
|
||||
|
||||
@@ -91,6 +91,13 @@ final class DivPropertiesStorage {
|
||||
DivKitLogger.error("Action Handler is not set in propertiesStorage")
|
||||
return false
|
||||
}
|
||||
guard !property.actions.isEmpty else {
|
||||
DivKitLogger
|
||||
.error(
|
||||
"Cannot set property. No setters provided. Name: '\(name.rawValue)'"
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
for action in property.actions {
|
||||
actionHandler.handle(
|
||||
@@ -108,14 +115,14 @@ final class DivPropertiesStorage {
|
||||
extension DivVariableValue {
|
||||
fileprivate var hashableValue: AnyHashable {
|
||||
switch self {
|
||||
case let .string(value): return value
|
||||
case let .number(value): return value
|
||||
case let .integer(value): return value
|
||||
case let .bool(value): return value
|
||||
case let .color(value): return value
|
||||
case let .url(value): return value
|
||||
case let .dict(value): return value
|
||||
case let .array(value): return value
|
||||
case let .string(value): value
|
||||
case let .number(value): value
|
||||
case let .integer(value): value
|
||||
case let .bool(value): value
|
||||
case let .color(value): value
|
||||
case let .url(value): value
|
||||
case let .dict(value): value
|
||||
case let .array(value): value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,9 @@
|
||||
"value": "Variable 'second' is missing. Expression: @{second}"
|
||||
}
|
||||
],
|
||||
"platforms": []
|
||||
"platforms": [
|
||||
"ios"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -45,7 +45,9 @@
|
||||
"value": "Variable 'title' is missing. Expression: @{title}"
|
||||
}
|
||||
],
|
||||
"platforms": []
|
||||
"platforms": [
|
||||
"ios"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -38,10 +38,12 @@
|
||||
"expected": [
|
||||
{
|
||||
"type": "error",
|
||||
"value": "Cannot set property. No setters provided. (name=prop, path=0/container/0/text)"
|
||||
"value": "Cannot set property. No setters provided. Name: 'prop'"
|
||||
}
|
||||
],
|
||||
"platforms": []
|
||||
"platforms": [
|
||||
"ios"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user