@@ -45,9 +45,10 @@ class SchemaParser internal constructor(
4545 private val unusedDefinitions = scanResult.unusedDefinitions
4646
4747 private val extensionDefinitions = definitions.filterIsInstance<ObjectTypeExtensionDefinition >()
48+ private val inputExtensionDefinitions = definitions.filterIsInstance<InputObjectTypeExtensionDefinition >()
4849
4950 private val objectDefinitions = (definitions.filterIsInstance<ObjectTypeDefinition >() - extensionDefinitions)
50- private val inputObjectDefinitions = definitions.filterIsInstance<InputObjectTypeDefinition >()
51+ private val inputObjectDefinitions = ( definitions.filterIsInstance<InputObjectTypeDefinition >() - inputExtensionDefinitions )
5152 private val enumDefinitions = definitions.filterIsInstance<EnumTypeDefinition >()
5253 private val interfaceDefinitions = definitions.filterIsInstance<InterfaceTypeDefinition >()
5354
@@ -173,22 +174,27 @@ class SchemaParser internal constructor(
173174 }
174175
175176 private fun createInputObject (definition : InputObjectTypeDefinition , inputObjects : List <GraphQLInputObjectType >): GraphQLInputObjectType {
177+ val extensionDefinitions = inputExtensionDefinitions.filter { it.name == definition.name }
178+
176179 val builder = GraphQLInputObjectType .newInputObject()
177180 .name(definition.name)
178181 .definition(definition)
182+ .extensionDefinitions(extensionDefinitions)
179183 .description(if (definition.description != null ) definition.description.content else getDocumentation(definition))
180184
181185 builder.withDirectives(* buildDirectives(definition.directives, setOf (), Introspection .DirectiveLocation .INPUT_OBJECT ))
182186
183- definition.inputValueDefinitions.forEach { inputDefinition ->
184- val fieldBuilder = GraphQLInputObjectField .newInputObjectField()
185- .name(inputDefinition.name)
186- .definition(inputDefinition)
187- .description(if (inputDefinition.description != null ) inputDefinition.description.content else getDocumentation(inputDefinition))
188- .defaultValue(buildDefaultValue(inputDefinition.defaultValue))
189- .type(determineInputType(inputDefinition.type, inputObjects))
190- .withDirectives(* buildDirectives(inputDefinition.directives, setOf (), Introspection .DirectiveLocation .INPUT_FIELD_DEFINITION ))
191- builder.field(fieldBuilder.build())
187+ extensionDefinitions.plus(definition).forEach {
188+ it.inputValueDefinitions.forEach { inputDefinition ->
189+ val fieldBuilder = GraphQLInputObjectField .newInputObjectField()
190+ .name(inputDefinition.name)
191+ .definition(inputDefinition)
192+ .description(if (inputDefinition.description != null ) inputDefinition.description.content else getDocumentation(inputDefinition))
193+ .defaultValue(buildDefaultValue(inputDefinition.defaultValue))
194+ .type(determineInputType(inputDefinition.type, inputObjects))
195+ .withDirectives(* buildDirectives(inputDefinition.directives, setOf (), Introspection .DirectiveLocation .INPUT_FIELD_DEFINITION ))
196+ builder.field(fieldBuilder.build())
197+ }
192198 }
193199
194200 return schemaGeneratorDirectiveHelper.onInputObjectType(builder.build(), schemaDirectiveParameters)
0 commit comments