Skip to content

Commit 6b451dc

Browse files
msl-at-fcbkobylynskyi
authored andcommitted
Added support for annotations in generated kotlin operations #1002 (#1003)
1 parent 4161d86 commit 6b451dc

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

src/main/resources/templates/kotlin-lang/operations.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ interface ${className}<#if implements?has_content> : <#list implements as interf
3838
<#if operation.throwsException>
3939
@Throws(Exception::class)
4040
</#if>
41-
fun ${operation.name}(<#list operation.parameters as param>${param.name}: ${param.type}<#if param_has_next>, </#if></#list>): ${operation.type}
41+
fun ${operation.name}(<#list operation.parameters as param><#list param.annotations as paramAnnotation>@${paramAnnotation}<#if param.annotations?has_content> </#if></#list>${param.name}: ${param.type}<#if param_has_next>, </#if></#list>): ${operation.type}
4242

4343
</#list>
4444
}

src/test/java/com/kobylynskyi/graphql/codegen/kotlin/GraphQLCodegenGitHubTest.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
import java.io.File;
1313
import java.io.IOException;
1414
import java.util.Collections;
15+
import java.util.HashSet;
1516
import java.util.Objects;
17+
import java.util.Set;
1618

1719
import static com.kobylynskyi.graphql.codegen.TestUtils.assertSameTrimmedContent;
1820
import static com.kobylynskyi.graphql.codegen.TestUtils.getFileByName;
21+
import static java.util.Collections.singleton;
1922
import static java.util.Collections.singletonList;
2023
import static org.hamcrest.MatcherAssert.assertThat;
2124

@@ -188,6 +191,51 @@ void generate_CustomFieldsResolvers() throws Exception {
188191
getFileByName(files, "AcceptTopicSuggestionPayloadResolver.kt"));
189192
}
190193

194+
@Test
195+
void generate_CustomFieldsResolversWithAnnotation() throws Exception {
196+
mappingConfig.setModelNamePrefix("Github");
197+
mappingConfig.setModelNameSuffix("TO");
198+
mappingConfig.setApiNameSuffix("WithAnnotation");
199+
mappingConfig.setResolverArgumentAnnotations(singleton("some.Annotation"));
200+
mappingConfig.setGenerateDataFetchingEnvironmentArgumentInApis(true);
201+
mappingConfig.setFieldsWithResolvers(Collections.singleton("AcceptTopicSuggestionPayload.topic"));
202+
203+
new KotlinGraphQLCodegen(singletonList("src/test/resources/schemas/github.graphqls"),
204+
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();
205+
206+
File[] files = Objects.requireNonNull(outputktClassesDir.listFiles());
207+
208+
assertSameTrimmedContent(new File(
209+
"src/test/resources/expected-classes/kt/field-resolver/" +
210+
"AcceptTopicSuggestionMutationWithAnnotation.kt.txt"),
211+
getFileByName(files, "AcceptTopicSuggestionMutationWithAnnotation.kt"));
212+
}
213+
214+
@Test
215+
void generate_CustomFieldsResolversWithMultipleAnnotations() throws Exception {
216+
217+
Set<String> annotations = new HashSet<>();
218+
annotations.add("some.Annotation");
219+
annotations.add("another.Annotation");
220+
221+
mappingConfig.setModelNamePrefix("Github");
222+
mappingConfig.setModelNameSuffix("TO");
223+
mappingConfig.setApiNameSuffix("WithAnnotations");
224+
mappingConfig.setResolverArgumentAnnotations(annotations);
225+
mappingConfig.setGenerateDataFetchingEnvironmentArgumentInApis(true);
226+
mappingConfig.setFieldsWithResolvers(Collections.singleton("AcceptTopicSuggestionPayload.topic"));
227+
228+
new KotlinGraphQLCodegen(singletonList("src/test/resources/schemas/github.graphqls"),
229+
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();
230+
231+
File[] files = Objects.requireNonNull(outputktClassesDir.listFiles());
232+
233+
assertSameTrimmedContent(new File(
234+
"src/test/resources/expected-classes/kt/field-resolver/" +
235+
"AcceptTopicSuggestionMutationWithAnnotations.kt.txt"),
236+
getFileByName(files, "AcceptTopicSuggestionMutationWithAnnotations.kt"));
237+
}
238+
191239
@Test
192240
void generate_RequestWithDefaultValue() throws Exception {
193241
mappingConfig.setGenerateBuilder(true);
@@ -200,4 +248,4 @@ void generate_RequestWithDefaultValue() throws Exception {
200248
getFileByName(files, "FriendsQueryRequest.kt"));
201249
}
202250

203-
}
251+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.github.graphql
2+
3+
4+
@javax.annotation.Generated(
5+
value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"],
6+
date = "2020-12-31T23:59:59-0500"
7+
)
8+
interface AcceptTopicSuggestionMutationWithAnnotation {
9+
10+
@Throws(Exception::class)
11+
fun acceptTopicSuggestion(@some.Annotation input: GithubAcceptTopicSuggestionInputTO, env: graphql.schema.DataFetchingEnvironment): GithubAcceptTopicSuggestionPayloadTO?
12+
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.github.graphql
2+
3+
4+
@javax.annotation.Generated(
5+
value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"],
6+
date = "2020-12-31T23:59:59-0500"
7+
)
8+
interface AcceptTopicSuggestionMutationWithAnnotations {
9+
10+
@Throws(Exception::class)
11+
fun acceptTopicSuggestion(@another.Annotation @some.Annotation input: GithubAcceptTopicSuggestionInputTO, env: graphql.schema.DataFetchingEnvironment): GithubAcceptTopicSuggestionPayloadTO?
12+
13+
}

0 commit comments

Comments
 (0)