diff --git a/src/main/resources/templates/kotlin-lang/operations.ftl b/src/main/resources/templates/kotlin-lang/operations.ftl index b84121916..859744daa 100755 --- a/src/main/resources/templates/kotlin-lang/operations.ftl +++ b/src/main/resources/templates/kotlin-lang/operations.ftl @@ -38,7 +38,7 @@ interface ${className}<#if implements?has_content> : <#list implements as interf <#if operation.throwsException> @Throws(Exception::class) - fun ${operation.name}(<#list operation.parameters as param>${param.name}: ${param.type}<#if param_has_next>, ): ${operation.type} + fun ${operation.name}(<#list operation.parameters as param><#list param.annotations as paramAnnotation>@${paramAnnotation}<#if param.annotations?has_content> ${param.name}: ${param.type}<#if param_has_next>, ): ${operation.type} } diff --git a/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenGitHubTest.java b/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenGitHubTest.java index 3d3040c50..c3d92c1ab 100644 --- a/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenGitHubTest.java +++ b/src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenGitHubTest.java @@ -12,10 +12,13 @@ import java.io.File; import java.io.IOException; import java.util.Collections; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; import static com.kobylynskyi.graphql.codegen.TestUtils.assertSameTrimmedContent; import static com.kobylynskyi.graphql.codegen.TestUtils.getFileByName; +import static java.util.Collections.singleton; import static java.util.Collections.singletonList; import static org.hamcrest.MatcherAssert.assertThat; @@ -188,6 +191,51 @@ void generate_CustomFieldsResolvers() throws Exception { getFileByName(files, "AcceptTopicSuggestionPayloadResolver.kt")); } + @Test + void generate_CustomFieldsResolversWithAnnotation() throws Exception { + mappingConfig.setModelNamePrefix("Github"); + mappingConfig.setModelNameSuffix("TO"); + mappingConfig.setApiNameSuffix("WithAnnotation"); + mappingConfig.setResolverArgumentAnnotations(singleton("some.Annotation")); + mappingConfig.setGenerateDataFetchingEnvironmentArgumentInApis(true); + mappingConfig.setFieldsWithResolvers(Collections.singleton("AcceptTopicSuggestionPayload.topic")); + + new KotlinGraphQLCodegen(singletonList("src/test/resources/schemas/github.graphqls"), + outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate(); + + File[] files = Objects.requireNonNull(outputktClassesDir.listFiles()); + + assertSameTrimmedContent(new File( + "src/test/resources/expected-classes/kt/field-resolver/" + + "AcceptTopicSuggestionMutationWithAnnotation.kt.txt"), + getFileByName(files, "AcceptTopicSuggestionMutationWithAnnotation.kt")); + } + + @Test + void generate_CustomFieldsResolversWithMultipleAnnotations() throws Exception { + + Set annotations = new HashSet<>(); + annotations.add("some.Annotation"); + annotations.add("another.Annotation"); + + mappingConfig.setModelNamePrefix("Github"); + mappingConfig.setModelNameSuffix("TO"); + mappingConfig.setApiNameSuffix("WithAnnotations"); + mappingConfig.setResolverArgumentAnnotations(annotations); + mappingConfig.setGenerateDataFetchingEnvironmentArgumentInApis(true); + mappingConfig.setFieldsWithResolvers(Collections.singleton("AcceptTopicSuggestionPayload.topic")); + + new KotlinGraphQLCodegen(singletonList("src/test/resources/schemas/github.graphqls"), + outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate(); + + File[] files = Objects.requireNonNull(outputktClassesDir.listFiles()); + + assertSameTrimmedContent(new File( + "src/test/resources/expected-classes/kt/field-resolver/" + + "AcceptTopicSuggestionMutationWithAnnotations.kt.txt"), + getFileByName(files, "AcceptTopicSuggestionMutationWithAnnotations.kt")); + } + @Test void generate_RequestWithDefaultValue() throws Exception { mappingConfig.setGenerateBuilder(true); @@ -200,4 +248,4 @@ void generate_RequestWithDefaultValue() throws Exception { getFileByName(files, "FriendsQueryRequest.kt")); } -} \ No newline at end of file +} diff --git a/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotation.kt.txt b/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotation.kt.txt new file mode 100644 index 000000000..f80fa2253 --- /dev/null +++ b/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotation.kt.txt @@ -0,0 +1,13 @@ +package com.github.graphql + + +@javax.annotation.Generated( + value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"], + date = "2020-12-31T23:59:59-0500" +) +interface AcceptTopicSuggestionMutationWithAnnotation { + + @Throws(Exception::class) + fun acceptTopicSuggestion(@some.Annotation input: GithubAcceptTopicSuggestionInputTO, env: graphql.schema.DataFetchingEnvironment): GithubAcceptTopicSuggestionPayloadTO? + +} diff --git a/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotations.kt.txt b/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotations.kt.txt new file mode 100644 index 000000000..36d4f51b4 --- /dev/null +++ b/src/test/resources/expected-classes/kt/field-resolver/AcceptTopicSuggestionMutationWithAnnotations.kt.txt @@ -0,0 +1,13 @@ +package com.github.graphql + + +@javax.annotation.Generated( + value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"], + date = "2020-12-31T23:59:59-0500" +) +interface AcceptTopicSuggestionMutationWithAnnotations { + + @Throws(Exception::class) + fun acceptTopicSuggestion(@another.Annotation @some.Annotation input: GithubAcceptTopicSuggestionInputTO, env: graphql.schema.DataFetchingEnvironment): GithubAcceptTopicSuggestionPayloadTO? + +}