2381
// Returns error if any deferred pointer cannot be resolved, as deferred pointers
2382
// cannot be persisted after transaction close.
2383
>
func (n *Node) resolveDeferredPointers() error {
tree.go
2384
>
for _, node := range n.andAllChildren() {
2385
>
if node.value == nil || !node.isComponent() {
2386
continue
2387
}
2388
2389
>
for field := range node.valueFields() {
tree.go
2390
>
if field.err != nil {
2391
return field.err
2392
}
2393
2394
>
if field.kind != fieldKindSubField {
tree.go
2395
>
continue
2396
}
2397
2398
>
internalV := field.val.FieldByName(internalFieldName)
tree.go
2399
>
internal, _ := internalV.Interface().(fieldInternal) //nolint:revive
2400
>
2401
>
if internal.fieldType() == fieldTypeDeferredPointer && internal.value() != nil {
2402
>
// Must resolve the deferred pointer or fail the transaction.
2403
>
var resolvedPath []string
2404
>
var err error
2405
>
2406
>
switch value := internal.value().(type) {
2407
>
case Component:
2408
>
resolvedPath, err = n.componentNodePath(value)
2409
>
if err == nil {
2410
targetNode := n.valueToNode[value]
2411
if !targetNode.isAncestorOf(node) {