@@ -64,7 +64,7 @@ func loadFile(filename string) schemaLoader {
64
64
return loadFileBase (filename ).Then (filterDeprecated )
65
65
}
66
66
67
- func filterMethods (pred func (schema.Method ) bool ) schemaUpdater {
67
+ func filterClassMethods (pred func (schema.Method ) bool ) schemaUpdater {
68
68
filter := func (in []schema.Method ) []schema.Method {
69
69
var out []schema.Method
70
70
for _ , m := range in {
@@ -75,13 +75,16 @@ func filterMethods(pred func(schema.Method) bool) schemaUpdater {
75
75
return out
76
76
}
77
77
return func (s * schema.Schema ) error {
78
+ if s .Class == nil {
79
+ return nil
80
+ }
78
81
s .Class .TypeMethods = filter (s .Class .TypeMethods )
79
82
s .Class .InstanceMethods = filter (s .Class .InstanceMethods )
80
83
return nil
81
84
}
82
85
}
83
86
84
- func filterProps (pred func (schema.Property ) bool ) schemaUpdater {
87
+ func filterClassProperties (pred func (schema.Property ) bool ) schemaUpdater {
85
88
filter := func (in []schema.Property ) []schema.Property {
86
89
var out []schema.Property
87
90
for _ , m := range in {
@@ -92,15 +95,19 @@ func filterProps(pred func(schema.Property) bool) schemaUpdater {
92
95
return out
93
96
}
94
97
return func (s * schema.Schema ) error {
98
+ if s .Class == nil {
99
+ return nil
100
+ }
95
101
s .Class .TypeProperties = filter (s .Class .TypeProperties )
96
102
s .Class .InstanceProperties = filter (s .Class .InstanceProperties )
97
103
return nil
98
104
}
99
105
}
100
106
101
- var filterDeprecated = filterMethods (func (m schema.Method ) bool {
107
+ // filterDeprecated removes deprecated methods and properties from a class.
108
+ var filterDeprecated = filterClassMethods (func (m schema.Method ) bool {
102
109
return ! m .Deprecated
103
- }).Then (filterProps (func (p schema.Property ) bool {
110
+ }).Then (filterClassProperties (func (p schema.Property ) bool {
104
111
return ! p .Deprecated
105
112
}))
106
113
@@ -119,7 +126,9 @@ func loadSchemas(contents []schemaLoader) ([]*schema.Schema, error) {
119
126
func definedClasses (schemas []* schema.Schema ) map [string ]bool {
120
127
r := map [string ]bool {}
121
128
for _ , input := range schemas {
122
- r [input .Class .Name ] = true
129
+ if input .Class != nil {
130
+ r [input .Class .Name ] = true
131
+ }
123
132
}
124
133
return r
125
134
}
@@ -129,7 +138,7 @@ func generate(basePackage string, packages []pkg) error {
129
138
for _ , p := range packages {
130
139
schemas , err := loadSchemas (p .Contents )
131
140
if err != nil {
132
- return err
141
+ return fmt . Errorf ( "loading schemas for package %q: %w" , p . Name , err )
133
142
}
134
143
if err := generatePackage (p .Name , schemas , imports ); err != nil {
135
144
return err
@@ -179,6 +188,9 @@ func generatePackage(name string, schemas []*schema.Schema, imports []gen.Packag
179
188
addFramework ("AppKit" )
180
189
}
181
190
for _ , input := range schemas {
191
+ if input .Class == nil {
192
+ continue
193
+ }
182
194
for _ , fw := range input .Class .Frameworks {
183
195
fw = strings .ReplaceAll (fw , " " , "" )
184
196
// FIXME is there a better way to determine which includes and frameworks
@@ -194,12 +206,12 @@ func generatePackage(name string, schemas []*schema.Schema, imports []gen.Packag
194
206
}
195
207
pkg , err := gen .Convert (desc , combinedImports , schemas ... )
196
208
if err != nil {
197
- return fmt .Errorf ("generating package %s: %w" , name , err )
209
+ return fmt .Errorf ("error converting package %s: %w" , name , err )
198
210
}
199
211
outPath := path .Join (name , desc .Name + "_objc.gen.go" )
200
212
var b bytes.Buffer
201
213
if err := pkg .Generate (& b ); err != nil {
202
- return fmt .Errorf ("generating package %s: %w" , name , err )
214
+ return fmt .Errorf ("error generating package %s: %w" , name , err )
203
215
}
204
216
code , err := format .Source (b .Bytes ())
205
217
if err != nil {
0 commit comments