Skip to content

Commit 0e6c908

Browse files
samuelAndalonSamuel Vazquez
and
Samuel Vazquez
authored
fix(6.x.x): return result of getter resolved at runtime (#2104)
Co-authored-by: Samuel Vazquez <samvazquez@expediagroup.com>
1 parent fdd1388 commit 0e6c908

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

generator/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/execution/SingletonPropertyDataFetcher.kt

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* Copyright 2025 Expedia, Inc
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
package com.expediagroup.graphql.generator.execution
218

319
import graphql.schema.DataFetcher
@@ -31,27 +47,23 @@ internal object SingletonPropertyDataFetcher : LightDataFetcher<Any?> {
3147
fieldDefinition: GraphQLFieldDefinition,
3248
sourceObject: Any?,
3349
environmentSupplier: Supplier<DataFetchingEnvironment>
34-
): Any? =
35-
sourceObject?.let {
36-
val getter = getters["${sourceObject.javaClass.name}.${fieldDefinition.name}"]
37-
when {
38-
getter != null -> getter.call(sourceObject)
39-
else -> {
40-
sourceObject::class.memberProperties
41-
.find { it.name == fieldDefinition.name }
42-
?.let { kProperty ->
43-
kProperty.getter.call(sourceObject).also {
44-
register(sourceObject::class, kProperty)
45-
}
46-
}
47-
}
50+
): Any? {
51+
if (sourceObject == null) return null
52+
53+
val getter = getters["${sourceObject.javaClass.name}.${fieldDefinition.name}"]
54+
if (getter != null) return getter.call(sourceObject)
55+
56+
return sourceObject::class.memberProperties
57+
.find { it.name == fieldDefinition.name }
58+
?.let { kProperty ->
59+
register(sourceObject::class, kProperty)
60+
return kProperty.getter.call(sourceObject)
4861
} ?: run {
49-
logger.error("getter method not found: ${sourceObject.javaClass.name}.${fieldDefinition.name}")
50-
}
62+
logger.error("getter method not found: ${sourceObject.javaClass.name}.${fieldDefinition.name}")
63+
return null
5164
}
65+
}
5266

5367
override fun get(environment: DataFetchingEnvironment): Any? =
54-
environment.getSource<Any?>()?.let { sourceObject ->
55-
getters["${sourceObject.javaClass.name}.${environment.fieldDefinition.name}"]?.call(sourceObject)
56-
}
68+
get(environment.fieldDefinition, environment.getSource()) { environment }
5769
}

0 commit comments

Comments
 (0)