diff --git a/generator/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/execution/SingletonPropertyDataFetcher.kt b/generator/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/execution/SingletonPropertyDataFetcher.kt index 8498142178..4f2acd263a 100644 --- a/generator/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/execution/SingletonPropertyDataFetcher.kt +++ b/generator/graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/execution/SingletonPropertyDataFetcher.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2025 Expedia, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.expediagroup.graphql.generator.execution import graphql.schema.DataFetcher @@ -31,27 +47,23 @@ internal object SingletonPropertyDataFetcher : LightDataFetcher { fieldDefinition: GraphQLFieldDefinition, sourceObject: Any?, environmentSupplier: Supplier - ): Any? = - sourceObject?.let { - val getter = getters["${sourceObject.javaClass.name}.${fieldDefinition.name}"] - when { - getter != null -> getter.call(sourceObject) - else -> { - sourceObject::class.memberProperties - .find { it.name == fieldDefinition.name } - ?.let { kProperty -> - kProperty.getter.call(sourceObject).also { - register(sourceObject::class, kProperty) - } - } - } + ): Any? { + if (sourceObject == null) return null + + val getter = getters["${sourceObject.javaClass.name}.${fieldDefinition.name}"] + if (getter != null) return getter.call(sourceObject) + + return sourceObject::class.memberProperties + .find { it.name == fieldDefinition.name } + ?.let { kProperty -> + register(sourceObject::class, kProperty) + return kProperty.getter.call(sourceObject) } ?: run { - logger.error("getter method not found: ${sourceObject.javaClass.name}.${fieldDefinition.name}") - } + logger.error("getter method not found: ${sourceObject.javaClass.name}.${fieldDefinition.name}") + return null } + } override fun get(environment: DataFetchingEnvironment): Any? = - environment.getSource()?.let { sourceObject -> - getters["${sourceObject.javaClass.name}.${environment.fieldDefinition.name}"]?.call(sourceObject) - } + get(environment.fieldDefinition, environment.getSource()) { environment } }