Skip to content

Commit ee5df1e

Browse files
committed
Add workaround for double-call to macro extension method call
1 parent c6caad4 commit ee5df1e

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

test/stdlib/Observation/Observable.swift

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,36 @@
1717
import StdlibUnittest
1818
import Observation
1919

20+
@available(SwiftStdlib 5.9, *)
21+
@attached(member, names: named(_$observationRegistrar), named(access), named(withMutation), arbitrary)
22+
@attached(memberAttribute)
23+
@attached(extension, conformances: Observable)
24+
public macro ObservableTest() =
25+
#externalMacro(module: "ObservationMacros", type: "ObservableMacro")
26+
2027
@usableFromInline
2128
@inline(never)
2229
func _blackHole<T>(_ value: T) { }
2330

24-
@Observable
25-
class ContainsNothing { }
31+
@ObservableTest
32+
public class ContainsNothing: Observable { }
2633

27-
@Observable
34+
@ObservableTest
2835
class ContainsWeak {
2936
weak var obj: AnyObject? = nil
3037
}
3138

32-
@Observable
33-
public class PublicContainsWeak {
34-
public weak var obj: AnyObject? = nil
39+
@ObservableTest
40+
class PublicContainsWeak {
41+
weak var obj: AnyObject? = nil
3542
}
3643

37-
@Observable
44+
@ObservableTest
3845
class ContainsUnowned {
3946
unowned var obj: AnyObject? = nil
4047
}
4148

42-
@Observable
49+
@ObservableTest
4350
class ContainsIUO {
4451
var obj: Int! = nil
4552
}
@@ -48,7 +55,7 @@ class NonObservable {
4855

4956
}
5057

51-
@Observable
58+
@ObservableTest
5259
class InheritsFromNonObservable: NonObservable {
5360

5461
}
@@ -57,29 +64,29 @@ protocol NonObservableProtocol {
5764

5865
}
5966

60-
@Observable
67+
@ObservableTest
6168
class ConformsToNonObservableProtocol: NonObservableProtocol {
6269

6370
}
6471

6572
struct NonObservableContainer {
66-
@Observable
73+
@ObservableTest
6774
class ObservableContents {
6875
var field: Int = 3
6976
}
7077
}
7178

72-
@Observable
79+
@ObservableTest
7380
final class SendableClass: Sendable {
7481
var field: Int = 3
7582
}
7683

77-
@Observable
84+
@ObservableTest
7885
class CodableClass: Codable {
7986
var field: Int = 3
8087
}
8188

82-
@Observable
89+
@ObservableTest
8390
final class HashableClass {
8491
var field: Int = 3
8592
}
@@ -94,7 +101,7 @@ extension HashableClass: Hashable {
94101
}
95102
}
96103

97-
@Observable
104+
@ObservableTest
98105
class ImplementsAccessAndMutation {
99106
var field = 3
100107
let accessCalled: (PartialKeyPath<ImplementsAccessAndMutation>) -> Void
@@ -121,18 +128,18 @@ class ImplementsAccessAndMutation {
121128
}
122129
}
123130

124-
@Observable
131+
@ObservableTest
125132
class HasIgnoredProperty {
126133
var field = 3
127134
@ObservationIgnored var ignored = 4
128135
}
129136

130-
@Observable
137+
@ObservableTest
131138
class Entity {
132139
var age: Int = 0
133140
}
134141

135-
@Observable
142+
@ObservableTest
136143
class Person : Entity {
137144
var firstName = ""
138145
var lastName = ""
@@ -142,30 +149,30 @@ class Person : Entity {
142149
var fullName: String { firstName + " " + lastName }
143150
}
144151

145-
@Observable
152+
@ObservableTest
146153
class MiddleNamePerson: Person {
147154
var middleName = ""
148155

149156
override var fullName: String { firstName + " " + middleName + " " + lastName }
150157
}
151158

152-
@Observable
159+
@ObservableTest
153160
class IsolatedClass {
154161
@MainActor var test = "hello"
155162
}
156163

157164
@MainActor
158-
@Observable
165+
@ObservableTest
159166
class IsolatedInstance {
160167
var test = "hello"
161168
}
162169

163-
@Observable
170+
@ObservableTest
164171
class ClassHasExistingConformance: Observable { }
165172

166173
protocol Intermediary: Observable { }
167174

168-
@Observable
175+
@ObservableTest
169176
class HasIntermediaryConformance: Intermediary { }
170177

171178
class CapturedState<State>: @unchecked Sendable {

0 commit comments

Comments
 (0)