@@ -60,25 +60,25 @@ func (*Object) isResolvable() {}
60
60
func (* List ) isResolvable () {}
61
61
func (* Scalar ) isResolvable () {}
62
62
63
- func ApplyResolver (s * schema.Schema , resolver interface {}) (* Schema , error ) {
63
+ func ApplyResolver (s * schema.Schema , resolver interface {}, prefixRootFuncs bool ) (* Schema , error ) {
64
64
b := newBuilder (s )
65
65
66
66
var query , mutation , subscription Resolvable
67
67
68
68
if t , ok := s .EntryPoints ["query" ]; ok {
69
- if err := b .assignExec (& query , t , reflect .TypeOf (resolver )); err != nil {
69
+ if err := b .assignExec (& query , t , reflect .TypeOf (resolver ), prefixRootFuncs ); err != nil {
70
70
return nil , err
71
71
}
72
72
}
73
73
74
74
if t , ok := s .EntryPoints ["mutation" ]; ok {
75
- if err := b .assignExec (& mutation , t , reflect .TypeOf (resolver )); err != nil {
75
+ if err := b .assignExec (& mutation , t , reflect .TypeOf (resolver ), prefixRootFuncs ); err != nil {
76
76
return nil , err
77
77
}
78
78
}
79
79
80
80
if t , ok := s .EntryPoints ["subscription" ]; ok {
81
- if err := b .assignExec (& subscription , t , reflect .TypeOf (resolver )); err != nil {
81
+ if err := b .assignExec (& subscription , t , reflect .TypeOf (resolver ), prefixRootFuncs ); err != nil {
82
82
return nil , err
83
83
}
84
84
}
@@ -130,14 +130,14 @@ func (b *execBuilder) finish() error {
130
130
return b .packerBuilder .Finish ()
131
131
}
132
132
133
- func (b * execBuilder ) assignExec (target * Resolvable , t common.Type , resolverType reflect.Type ) error {
133
+ func (b * execBuilder ) assignExec (target * Resolvable , t common.Type , resolverType reflect.Type , prefixFuncs bool ) error {
134
134
k := typePair {t , resolverType }
135
135
ref , ok := b .resMap [k ]
136
136
if ! ok {
137
137
ref = & resMapEntry {}
138
138
b .resMap [k ] = ref
139
139
var err error
140
- ref .exec , err = b .makeExec (t , resolverType )
140
+ ref .exec , err = b .makeExec (t , resolverType , prefixFuncs )
141
141
if err != nil {
142
142
return err
143
143
}
@@ -146,13 +146,13 @@ func (b *execBuilder) assignExec(target *Resolvable, t common.Type, resolverType
146
146
return nil
147
147
}
148
148
149
- func (b * execBuilder ) makeExec (t common.Type , resolverType reflect.Type ) (Resolvable , error ) {
149
+ func (b * execBuilder ) makeExec (t common.Type , resolverType reflect.Type , prefixFuncs bool ) (Resolvable , error ) {
150
150
var nonNull bool
151
151
t , nonNull = unwrapNonNull (t )
152
152
153
153
switch t := t .(type ) {
154
154
case * schema.Object :
155
- return b .makeObjectExec (t .Name , t .Fields , nil , nonNull , resolverType )
155
+ return b .makeObjectExecWithPrefix (t .Name , t .Fields , nil , nonNull , resolverType , prefixFuncs )
156
156
157
157
case * schema.Interface :
158
158
return b .makeObjectExec (t .Name , t .Fields , t .PossibleTypes , nonNull , resolverType )
@@ -180,7 +180,7 @@ func (b *execBuilder) makeExec(t common.Type, resolverType reflect.Type) (Resolv
180
180
return nil , fmt .Errorf ("%s is not a slice" , resolverType )
181
181
}
182
182
e := & List {}
183
- if err := b .assignExec (& e .Elem , t .OfType , resolverType .Elem ()); err != nil {
183
+ if err := b .assignExec (& e .Elem , t .OfType , resolverType .Elem (), false ); err != nil {
184
184
return nil , err
185
185
}
186
186
return e , nil
@@ -212,6 +212,9 @@ func makeScalarExec(t *schema.Scalar, resolverType reflect.Type) (Resolvable, er
212
212
213
213
func (b * execBuilder ) makeObjectExec (typeName string , fields schema.FieldList , possibleTypes []* schema.Object ,
214
214
nonNull bool , resolverType reflect.Type ) (* Object , error ) {
215
+ return b .makeObjectExecWithPrefix (typeName , fields , possibleTypes , nonNull , resolverType , false )
216
+ }
217
+ func (b * execBuilder ) makeObjectExecWithPrefix (typeName string , fields schema.FieldList , possibleTypes []* schema.Object , nonNull bool , resolverType reflect.Type , prefixFuncs bool ) (* Object , error ) {
215
218
if ! nonNull {
216
219
if resolverType .Kind () != reflect .Ptr && resolverType .Kind () != reflect .Interface {
217
220
return nil , fmt .Errorf ("%s is not a pointer or interface" , resolverType )
@@ -223,17 +226,23 @@ func (b *execBuilder) makeObjectExec(typeName string, fields schema.FieldList, p
223
226
Fields := make (map [string ]* Field )
224
227
rt := unwrapPtr (resolverType )
225
228
for _ , f := range fields {
229
+
230
+ methodName := f .Name
231
+ if prefixFuncs {
232
+ methodName = typeName + f .Name
233
+ }
234
+
226
235
fieldIndex := - 1
227
- methodIndex := findMethod (resolverType , f . Name )
236
+ methodIndex := findMethod (resolverType , methodName )
228
237
if b .schema .UseFieldResolvers && methodIndex == - 1 {
229
238
fieldIndex = findField (rt , f .Name )
230
239
}
231
240
if methodIndex == - 1 && fieldIndex == - 1 {
232
241
hint := ""
233
- if findMethod (reflect .PtrTo (resolverType ), f . Name ) != - 1 {
242
+ if findMethod (reflect .PtrTo (resolverType ), methodName ) != - 1 {
234
243
hint = " (hint: the method exists on the pointer type)"
235
244
}
236
- return nil , fmt .Errorf ("%s does not resolve %q: missing method for field %q%s" , resolverType , typeName , f . Name , hint )
245
+ return nil , fmt .Errorf ("%s does not resolve %q: missing method for field %q%s" , resolverType , typeName , methodName , hint )
237
246
}
238
247
239
248
var m reflect.Method
@@ -266,7 +275,7 @@ func (b *execBuilder) makeObjectExec(typeName string, fields schema.FieldList, p
266
275
a := & TypeAssertion {
267
276
MethodIndex : methodIndex ,
268
277
}
269
- if err := b .assignExec (& a .TypeExec , impl , resolverType .Method (methodIndex ).Type .Out (0 )); err != nil {
278
+ if err := b .assignExec (& a .TypeExec , impl , resolverType .Method (methodIndex ).Type .Out (0 ), false ); err != nil {
270
279
return nil , err
271
280
}
272
281
typeAssertions [impl .Name ] = a
@@ -358,7 +367,7 @@ func (b *execBuilder) makeFieldExec(typeName string, f *schema.Field, m reflect.
358
367
} else {
359
368
out = sf .Type
360
369
}
361
- if err := b .assignExec (& fe .ValueExec , f .Type , out ); err != nil {
370
+ if err := b .assignExec (& fe .ValueExec , f .Type , out , false ); err != nil {
362
371
return nil , err
363
372
}
364
373
@@ -375,6 +384,7 @@ func findMethod(t reflect.Type, name string) int {
375
384
}
376
385
377
386
func findField (t reflect.Type , name string ) int {
387
+ fmt .Println ("MAMA" , name , t )
378
388
for i := 0 ; i < t .NumField (); i ++ {
379
389
if strings .EqualFold (stripUnderscore (name ), stripUnderscore (t .Field (i ).Name )) {
380
390
return i
0 commit comments