未验证 提交 4917c4bd 编写于 作者: B Bogdan Kobylynskyi 提交者: GitHub

Support interfaces to extend other interfaces #468 (#469)

上级 c12f765f
......@@ -38,15 +38,15 @@ class FreeMarkerTemplatesRegistry {
try {
EnumMap<FreeMarkerTemplateType, Template> javaTemplates = new EnumMap<>(FreeMarkerTemplateType.class);
javaTemplates.put(TYPE, configuration.getTemplate("templates/javaClassGraphqlType.ftl"));
javaTemplates.put(ENUM, configuration.getTemplate("templates/javaClassGraphqlEnum.ftl"));
javaTemplates.put(UNION, configuration.getTemplate("templates/javaClassGraphqlUnion.ftl"));
javaTemplates.put(REQUEST, configuration.getTemplate("templates/javaClassGraphqlRequest.ftl"));
javaTemplates.put(RESPONSE, configuration.getTemplate("templates/javaClassGraphqlResponse.ftl"));
javaTemplates.put(INTERFACE, configuration.getTemplate("templates/javaClassGraphqlInterface.ftl"));
javaTemplates.put(OPERATIONS, configuration.getTemplate("templates/javaClassGraphqlOperations.ftl"));
javaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl"));
javaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl"));
javaTemplates.put(TYPE, configuration.getTemplate("templates/java-lang/javaClassGraphqlType.ftl"));
javaTemplates.put(ENUM, configuration.getTemplate("templates/java-lang/javaClassGraphqlEnum.ftl"));
javaTemplates.put(UNION, configuration.getTemplate("templates/java-lang/javaClassGraphqlUnion.ftl"));
javaTemplates.put(REQUEST, configuration.getTemplate("templates/java-lang/javaClassGraphqlRequest.ftl"));
javaTemplates.put(RESPONSE, configuration.getTemplate("templates/java-lang/javaClassGraphqlResponse.ftl"));
javaTemplates.put(INTERFACE, configuration.getTemplate("templates/java-lang/javaClassGraphqlInterface.ftl"));
javaTemplates.put(OPERATIONS, configuration.getTemplate("templates/java-lang/javaClassGraphqlOperations.ftl"));
javaTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/java-lang/javaClassGraphqlParametrizedInput.ftl"));
javaTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/java-lang/javaClassGraphqlResponseProjection.ftl"));
templateMap.put(GeneratedLanguage.JAVA, javaTemplates);
EnumMap<FreeMarkerTemplateType, Template> scalaTemplates = new EnumMap<>(FreeMarkerTemplateType.class);
......@@ -72,8 +72,6 @@ class FreeMarkerTemplatesRegistry {
kotlinTemplates.put(PARAMETRIZED_INPUT, configuration.getTemplate("templates/kotlin-lang/kotlinClassGraphqlParametrizedInput.ftl"));
kotlinTemplates.put(RESPONSE_PROJECTION, configuration.getTemplate("templates/kotlin-lang/kotlinClassGraphqlResponseProjection.ftl"));
templateMap.put(GeneratedLanguage.KOTLIN, kotlinTemplates);
} catch (IOException e) {
throw new UnableToLoadFreeMarkerTemplateException(e);
}
......
......@@ -5,6 +5,8 @@ import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedInterfaceTypeDe
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.*;
......@@ -40,6 +42,7 @@ public class InterfaceDefinitionToDataModelMapper {
dataModel.put(PACKAGE, DataModelMapper.getModelPackageName(mappingContext));
dataModel.put(CLASS_NAME, dataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, definition));
dataModel.put(JAVA_DOC, definition.getJavaDoc());
dataModel.put(IMPLEMENTS, getInterfaces(mappingContext, definition));
dataModel.put(ANNOTATIONS, graphQLTypeMapper.getAnnotations(mappingContext, definition));
dataModel.put(FIELDS, fieldDefinitionToParameterMapper.mapFields(mappingContext, definition.getFieldDefinitions(), definition));
dataModel.put(GENERATED_INFO, mappingContext.getGeneratedInformation());
......@@ -48,4 +51,12 @@ public class InterfaceDefinitionToDataModelMapper {
return dataModel;
}
private Set<String> getInterfaces(MappingContext mappingContext,
ExtendedInterfaceTypeDefinition definition) {
return definition.getImplements()
.stream()
.map(anImplement -> graphQLTypeMapper.getLanguageType(mappingContext, anImplement))
.collect(Collectors.toSet());
}
}
......@@ -43,7 +43,7 @@ class GraphQLCodegenInterfacesTest {
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList());
assertEquals(Arrays.asList("Bar.java", "Bar1.java", "Foo.java", "Foo1.java"), generatedFileNames);
assertEquals(Arrays.asList("Bar.java", "Bar1.java", "BarBar.java", "Foo.java", "Foo1.java"), generatedFileNames);
for (File file : files) {
assertSameTrimmedContent(new File(String.format("src/test/resources/expected-classes/interfaces/%s.txt",
......@@ -51,4 +51,5 @@ class GraphQLCodegenInterfacesTest {
file);
}
}
}
......@@ -46,7 +46,7 @@ class GraphQLCodegenInterfacesTest {
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList());
assertEquals(Arrays.asList("Bar.kt", "Bar1.kt", "Foo.kt", "Foo1.kt"), generatedFileNames);
assertEquals(Arrays.asList("Bar.kt", "Bar1.kt", "BarBar.kt", "Foo.kt", "Foo1.kt"), generatedFileNames);
for (File file : files) {
assertSameTrimmedContent(new File(String.format("src/test/resources/expected-classes/kt/interfaces/%s.txt",
......
package com.kobylynskyi.graphql.interfaces;
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public interface BarBar extends Bar{
@javax.validation.constraints.NotNull
String getId();
}
\ No newline at end of file
package com.kobylynskyi.graphql.interfaces
@javax.annotation.Generated(
value = ["com.kobylynskyi.graphql.codegen.GraphQLCodegen"],
date = "2020-12-31T23:59:59-0500"
)
interface BarBar : Bar{
val id: String
}
\ No newline at end of file
......@@ -7,11 +7,15 @@ interface Bar {
id: ID!
}
type Foo1 implements Foo{
type Foo1 implements Foo {
id: ID!
bars: [Bar1]
}
type Bar1 implements Bar{
type Bar1 implements Bar {
id: ID!
}
interface BarBar implements Bar {
id: ID!
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册