From 26e8106ee844bb1dd5d950e8a4ffc90064c83593 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Sat, 30 Mar 2019 09:21:56 +0100 Subject: [PATCH] Use string formatted descriptions if available (fix #169, fix #253) --- .../graphql/tools/SchemaClassScanner.kt | 3 ++- .../coxautodev/graphql/tools/SchemaParser.kt | 20 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt index 8e08cca8..76870b51 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaClassScanner.kt @@ -154,7 +154,8 @@ internal class SchemaClassScanner(initialDictionary: BiMap>, al }.map { definition -> val provided = scalars[definition.name] ?: throw SchemaClassScannerError("Expected a user-defined GraphQL scalar type with name '${definition.name}' but found none!") - GraphQLScalarType(provided.name, SchemaParser.getDocumentation(definition) + GraphQLScalarType(provided.name, + if (definition.description != null) definition.description.content else SchemaParser.getDocumentation(definition) ?: provided.description, provided.coercing, listOf(), definition) }.associateBy { it.name!! } diff --git a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParser.kt b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParser.kt index 87ff4b8e..1d217ce9 100644 --- a/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParser.kt +++ b/src/main/kotlin/com/coxautodev/graphql/tools/SchemaParser.kt @@ -139,7 +139,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val builder = GraphQLObjectType.newObject() .name(name) .definition(definition) - .description(getDocumentation(definition)) + .description(if (definition.description != null) definition.description.content else getDocumentation(definition)) builder.withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.OBJECT)) @@ -185,7 +185,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val builder = GraphQLInputObjectType.newInputObject() .name(definition.name) .definition(definition) - .description(getDocumentation(definition)) + .description(if (definition.description != null) definition.description.content else getDocumentation(definition)) builder.withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.INPUT_OBJECT)) @@ -193,7 +193,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val fieldBuilder = GraphQLInputObjectField.newInputObjectField() .name(inputDefinition.name) .definition(inputDefinition) - .description(getDocumentation(inputDefinition)) + .description(if (inputDefinition.description != null) inputDefinition.description.content else getDocumentation(inputDefinition)) .defaultValue(inputDefinition.defaultValue) .type(determineInputType(inputDefinition.type)) .withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.INPUT_FIELD_DEFINITION)) @@ -211,7 +211,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val builder = GraphQLEnumType.newEnum() .name(name) .definition(definition) - .description(getDocumentation(definition)) + .description(if (definition.description != null) definition.description.content else getDocumentation(definition)) builder.withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.ENUM)) @@ -221,7 +221,9 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat ?: throw SchemaError("Expected value for name '$enumName' in enum '${type.unwrap().simpleName}' but found none!") val enumValueDirectives = buildDirectives(enumDefinition.directives, setOf(), Introspection.DirectiveLocation.ENUM_VALUE).toMutableList() getDeprecated(enumDefinition.directives).let { - val enumValueDefinition = GraphQLEnumValueDefinition(enumName, getDocumentation(enumDefinition), enumValue, it, enumValueDirectives) + val enumValueDefinition = GraphQLEnumValueDefinition(enumName, + if (enumDefinition.description != null) enumDefinition.description.content else getDocumentation(enumDefinition), + enumValue, it, enumValueDirectives) builder.value(directiveGenerator.onEnumValue(enumValueDefinition, DirectiveBehavior.Params(runtimeWiring))) } } @@ -234,7 +236,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val builder = GraphQLInterfaceType.newInterface() .name(name) .definition(definition) - .description(getDocumentation(definition)) + .description(if (definition.description != null) definition.description.content else getDocumentation(definition)) .typeResolver(TypeResolverProxy()) builder.withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.INTERFACE)) @@ -251,7 +253,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val builder = GraphQLUnionType.newUnionType() .name(name) .definition(definition) - .description(getDocumentation(definition)) + .description(if (definition.description != null) definition.description.content else getDocumentation(definition)) .typeResolver(TypeResolverProxy()) builder.withDirectives(*buildDirectives(definition.directives, setOf(), Introspection.DirectiveLocation.UNION)) @@ -282,7 +284,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat private fun createField(field: GraphQLFieldDefinition.Builder, fieldDefinition: FieldDefinition): GraphQLFieldDefinition.Builder { field.name(fieldDefinition.name) - field.description(getDocumentation(fieldDefinition)) + field.description(if (fieldDefinition.description != null) fieldDefinition.description.content else getDocumentation(fieldDefinition)) field.definition(fieldDefinition) getDeprecated(fieldDefinition.directives)?.let { field.deprecate(it) } field.type(determineOutputType(fieldDefinition.type)) @@ -290,7 +292,7 @@ class SchemaParser internal constructor(scanResult: ScannedSchemaObjects, privat val argumentBuilder = GraphQLArgument.newArgument() .name(argumentDefinition.name) .definition(argumentDefinition) - .description(getDocumentation(argumentDefinition)) + .description(if (argumentDefinition.description != null) argumentDefinition.description.content else getDocumentation(argumentDefinition)) .defaultValue(buildDefaultValue(argumentDefinition.defaultValue)) .type(determineInputType(argumentDefinition.type)) .withDirectives(*buildDirectives(argumentDefinition.directives, setOf(), Introspection.DirectiveLocation.ARGUMENT_DEFINITION))