properties error handling

commit_hash:978f56b368a7a7703e6d2c83059dab292160b9cf
This commit is contained in:
ansestepanov
2025-08-27 17:59:00 +03:00
parent 8fd9533570
commit e3b7cf549f
5 changed files with 38 additions and 13 deletions
@@ -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"
]
}
]
}