Skip to content

Commit 252f0fc

Browse files
authored
Fix preference bridge ownership and align preference internals (#966)
1 parent 36bb281 commit 252f0fc

10 files changed

Lines changed: 26 additions & 21 deletions

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceBridge.swift‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// PreferenceBridge.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for 6.0.87
5+
// Audited for 6.5.4
66
// Status: Complete
77
// ID: A9FAE381E99529D5274BA37A9BC9B074 (SwiftUI)
88
// ID: DF57A19C61B44C613EB77C1D47FC679A (SwiftUICore)
@@ -32,9 +32,9 @@ package final class PreferenceBridge {
3232
requestedPreferences = PreferenceKeys()
3333
bridgedViewInputs = PropertyList()
3434
for child in children {
35-
let viewGraph = child.takeRetainedValue()
36-
viewGraph.invalidatePreferenceBridge()
37-
child.release()
35+
child._withUnsafeGuaranteedRef { viewGraph in
36+
viewGraph.invalidatePreferenceBridge()
37+
}
3838
}
3939
viewGraph = nil
4040
isValid = false
@@ -105,9 +105,9 @@ package final class PreferenceBridge {
105105

106106
package func removedStateDidChange() {
107107
for child in children {
108-
let viewGraph = child.takeUnretainedValue()
109-
viewGraph.updateRemovedState()
110-
child.release()
108+
child._withUnsafeGuaranteedRef { viewGraph in
109+
viewGraph.updateRemovedState()
110+
}
111111
}
112112
}
113113

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceCombiner.swift‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
// PreferenceCombiner.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for 6.0.87
5+
// Audited for 6.5.4
66
// Status: Complete
77
// ID: 59D15989E597719355BF0EAE6CB41FF9 (SwiftUI)
8-
// ID: EAF68AEE5E08E2f44FEB886FE6A27001 (SwiftUICore)
8+
// ID: EAF68AEE5E08E2F44FEB886FE6A27001 (SwiftUICore)
99

1010
package import OpenAttributeGraphShims
1111

@@ -108,9 +108,9 @@ private struct PairPreferenceCombiner<K>: Rule, AsyncAttribute where K: Preferen
108108
}
109109
}
110110

111-
// MARK: - PreferencesAggregator
111+
// MARK: - PreferenceAggregator
112112

113-
package struct PreferencesAggregator<K>: Rule, AsyncAttribute where K: PreferenceKey {
113+
package struct PreferenceAggregator<K>: Rule, AsyncAttribute where K: PreferenceKey {
114114
package var attributes: [WeakAttribute<K.Value>]
115115

116116
package init(attributes: [Attribute<K.Value>]) {

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceKey.swift‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// PreferenceKey.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for 6.0.87
5+
// Audited for 6.5.4
66
// Status: Complete
77
// ID: 3D8838A231BB2CC7FC00E7880D8B2FC4 (SwiftUICore)
88

@@ -71,6 +71,9 @@ extension PreferenceKey {
7171
if name.isEmpty {
7272
let fullname = _typeName(Self.self, qualified: true)
7373
let results = fullname.split(maxSplits: 1) { $0 == "." }
74+
guard results.count >= 2 else {
75+
return fullname
76+
}
7477
return String(results[1])
7578
} else {
7679
return name
@@ -88,7 +91,7 @@ package protocol PreferenceKeyVisitor {
8891
mutating func visit<K>(key: K.Type) where K: PreferenceKey
8992
}
9093

91-
// MARK: - PreferenceKeys [6.5.4]
94+
// MARK: - PreferenceKeys
9295

9396
package struct PreferenceKeys: Equatable, RandomAccessCollection, MutableCollection {
9497
var keys: [any PreferenceKey.Type] = []

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceList.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// OpenSwiftUICore
44
//
55
// Audited for 6.5.4
6-
// Status: Copmlete
6+
// Status: Complete
77
// ID: C1C63C2F6F2B9F3EB30DD747F0605FBD (SwiftUI)
88
// ID: 7B694C05291EA7AF22785AB458D1BC2F (SwiftUICore)
99

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceTransformModifier.swift‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ package import OpenAttributeGraphShims
1414
/// preference key.
1515
@available(OpenSwiftUI_v1_0, *)
1616
@frozen
17-
@MainActor
18-
@preconcurrency
1917
public struct _PreferenceTransformModifier<Key>: ViewModifier, MultiViewModifier, PrimitiveViewModifier where Key: PreferenceKey {
2018

2119
/// The transform function to apply to `Key`.

‎Sources/OpenSwiftUICore/Data/Preference/PreferenceWritingModifier.swift‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ extension View {
7373

7474
/// Sets a value for the given preference.
7575
@inlinable
76-
public func preference<K>(key: K.Type = K.self, value: K.Value) -> some View where K : PreferenceKey {
76+
nonisolated public func preference<K>(
77+
key: K.Type = K.self,
78+
value: K.Value
79+
) -> some View where K: PreferenceKey {
7780
modifier(_PreferenceWritingModifier<K>(value: value))
7881
}
7982
}

‎Sources/OpenSwiftUICore/Data/Preference/PreferencesInputs.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// PreferencesInputs.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for 6.0.87
5+
// Audited for 6.5.4
66
// Status: Complete
77

88
package import OpenAttributeGraphShims

‎Sources/OpenSwiftUICore/Data/Preference/PreferencesOutputs.swift‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
// PreferencesOutputs.swift
33
// OpenSwiftUICore
44
//
5+
// Audited for 6.5.4
56
// Status: Complete
67
// ID: 639FD567E11A491423DEEA5A95A52B4C (SwiftUICore)
78

89
package import OpenAttributeGraphShims
910

10-
// MARK: - PreferencesOutputs [6.5.4]
11+
// MARK: - PreferencesOutputs
1112

1213
package struct PreferencesOutputs {
1314
private var preferences: [KeyValue]

‎Sources/OpenSwiftUICore/Data/Preference/View_Indirect.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// View_Indirect.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for 6.0.87
5+
// Audited for 6.5.4
66
// Status: Complete
77

88
package import OpenAttributeGraphShims

‎Sources/OpenSwiftUICore/Render/PlatformViewFactory.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ package struct ViewDecoders {
177177
) where T: Decodable, T: AnyViewFactory {
178178
registerDecodableFactoryType(
179179
factoryType,
180-
forID: _typeName(type, qualified: true)
180+
forID: _typeName(type)
181181
)
182182
}
183183

0 commit comments

Comments
 (0)