getDirectives(NamedNode> def) {
/**
* Wraps type into apiReturnType or subscriptionReturnType (defined in the mapping configuration).
- * Examples:
- *
- * - Given GraphQL schema: {@code type Query { events: [Event!]! }}
- * - Given config: {@code useOptionalForNullableReturnTypes = true}
- * - Return: {@code java.util.Optional}
- *
- * - Given GraphQL schema: {@code type Subscription { eventsCreated: [Event!]! }}
- * - Given subscriptionReturnType in config: {@code org.reactivestreams.Publisher}
- * - Return: {@code org.reactivestreams.Publisher}
- *
- * - Given GraphQL schema: {@code type Mutation { createEvent(inp: Inp): Event }}
- * - Given apiReturnType in config: {@code reactor.core.publisher.Mono}
- * - Return: {@code reactor.core.publisher.Mono}
- *
- * - Given GraphQL schema: {@code type Query { events: [Event!]! }}
- * - Given apiReturnListType in config: {@code reactor.core.publisher.Flux}
- * - Return: {@code reactor.core.publisher.Flux}
+ *
+ * Example 1:
+ * * Given GraphQL schema: {@code type Query { events: [Event!]! }}
+ * * Given config: {@code useOptionalForNullableReturnTypes = true}
+ * * Return: {@code java.util.Optional}
+ *
+ * Example 2:
+ * * Given GraphQL schema: {@code type Subscription { eventsCreated: [Event!]! }}
+ * * Given subscriptionReturnType in config: {@code org.reactivestreams.Publisher}
+ * * Return: {@code org.reactivestreams.Publisher}
+ *
+ * Example 3:
+ * * Given GraphQL schema: {@code type Mutation { createEvent(inp: Inp): Event }}
+ * * Given apiReturnType in config: {@code reactor.core.publisher.Mono}
+ * * Return: {@code reactor.core.publisher.Mono}
+ *
+ * Example 4:
+ * * Given GraphQL schema: {@code type Query { events: [Event!]! }}
+ * * Given apiReturnListType in config: {@code reactor.core.publisher.Flux}
+ * * Return: {@code reactor.core.publisher.Flux}
*
* @param mappingContext Global mapping context
* @param namedDefinition Named definition
@@ -119,6 +122,14 @@ String wrapApiReturnTypeIfRequired(MappingContext mappingContext,
*/
boolean isPrimitive(String possiblyPrimitiveType);
+ /**
+ * Whether to add model validation annotation to a type
+ *
+ * @param type GraphQL type name
+ * @return true if model validation annotation should be added to a type
+ */
+ boolean addModelValidationAnnotationForType(String type);
+
/**
* Wrap string into generics type
*
@@ -155,7 +166,8 @@ default String getLanguageType(MappingContext mappingContext, Type> type) {
* @param parentTypeName Name of the parent type
* @return Corresponding language-specific type (java/scala/kotlin/etc)
*/
- default NamedDefinition getLanguageType(MappingContext mappingContext, Type> graphqlType, String name, String parentTypeName) {
+ default NamedDefinition getLanguageType(MappingContext mappingContext, Type> graphqlType, String name,
+ String parentTypeName) {
return getLanguageType(mappingContext, graphqlType, name, parentTypeName, false, false);
}
@@ -174,17 +186,22 @@ default NamedDefinition getLanguageType(MappingContext mappingContext, Type> g
String name, String parentTypeName,
boolean mandatory, boolean collection) {
if (graphqlType instanceof TypeName) {
- return getLanguageType(mappingContext, ((TypeName) graphqlType).getName(), name, parentTypeName, mandatory, collection);
+ return getLanguageType(mappingContext, ((TypeName) graphqlType).getName(), name, parentTypeName, mandatory,
+ collection);
} else if (graphqlType instanceof ListType) {
- NamedDefinition mappedCollectionType = getLanguageType(mappingContext, ((ListType) graphqlType).getType(), name, parentTypeName, false, true);
+ NamedDefinition mappedCollectionType = getLanguageType(mappingContext, ((ListType) graphqlType).getType(),
+ name, parentTypeName, false, true);
if (mappedCollectionType.isInterface() && mappingContext.getInterfacesName().contains(parentTypeName)) {
- mappedCollectionType.setJavaName(wrapSuperTypeIntoList(mappingContext, mappedCollectionType.getJavaName(), mandatory));
+ mappedCollectionType.setJavaName(
+ wrapSuperTypeIntoList(mappingContext, mappedCollectionType.getJavaName(), mandatory));
} else {
- mappedCollectionType.setJavaName(wrapIntoList(mappingContext, mappedCollectionType.getJavaName(), mandatory));
+ mappedCollectionType.setJavaName(
+ wrapIntoList(mappingContext, mappedCollectionType.getJavaName(), mandatory));
}
return mappedCollectionType;
} else if (graphqlType instanceof NonNullType) {
- return getLanguageType(mappingContext, ((NonNullType) graphqlType).getType(), name, parentTypeName, true, collection);
+ return getLanguageType(mappingContext, ((NonNullType) graphqlType).getType(), name, parentTypeName, true,
+ collection);
}
throw new IllegalArgumentException("Unknown type: " + graphqlType);
}
@@ -244,32 +261,48 @@ default List getAnnotations(MappingContext mappingContext, Type> type,
} else if (type instanceof NonNullType) {
return getAnnotations(mappingContext, ((NonNullType) type).getType(), def, parentTypeName, true);
} else if (type instanceof TypeName) {
- return getAnnotations(mappingContext, ((TypeName) type).getName(), def.getName(), parentTypeName, getDirectives(def), mandatory);
+ return getAnnotations(mappingContext, ((TypeName) type).getName(), def.getName(), parentTypeName,
+ getDirectives(def), mandatory);
}
return Collections.emptyList();
}
default List getAnnotations(MappingContext mappingContext, ExtendedDefinition, ?> extendedDefinition) {
- return getAnnotations(mappingContext, extendedDefinition.getName(), extendedDefinition.getName(), null, Collections.emptyList(), false);
+ return getAnnotations(mappingContext, extendedDefinition.getName(), extendedDefinition.getName(), null,
+ Collections.emptyList(), false);
}
default List getAnnotations(MappingContext mappingContext, String name) {
return getAnnotations(mappingContext, name, name, null, Collections.emptyList(), false);
}
+ /**
+ * Get annotations for a given GraphQL type
+ *
+ * @param mappingContext Global mapping context
+ * @param graphQLTypeName GraphQL type
+ * @param name Name of the GraphQL type
+ * @param parentTypeName Name of the parent type
+ * @param directives List of GraphQL directive
+ * @param mandatory Type is mandatory
+ * @return list of Java annotations for a given GraphQL type
+ */
default List getAnnotations(MappingContext mappingContext, String graphQLTypeName, String name,
String parentTypeName, List directives, boolean mandatory) {
List annotations = new ArrayList<>();
if (mandatory) {
- String possiblyPrimitiveType = mappingContext.getCustomTypesMapping().get(getMandatoryType(graphQLTypeName));
+ String possiblyPrimitiveType = mappingContext.getCustomTypesMapping()
+ .get(getMandatoryType(graphQLTypeName));
String modelValidationAnnotation = mappingContext.getModelValidationAnnotation();
- if (Utils.isNotBlank(modelValidationAnnotation) && addModelValidationAnnotationForType(possiblyPrimitiveType)) {
+ if (Utils.isNotBlank(modelValidationAnnotation) && addModelValidationAnnotationForType(
+ possiblyPrimitiveType)) {
annotations.add(modelValidationAnnotation);
}
}
Map> customAnnotationsMapping = mappingContext.getCustomAnnotationsMapping();
- if (name != null && parentTypeName != null && customAnnotationsMapping.containsKey(parentTypeName + "." + name)) {
+ if (name != null && parentTypeName != null && customAnnotationsMapping
+ .containsKey(parentTypeName + "." + name)) {
List annotationsToAdd = customAnnotationsMapping.get(parentTypeName + "." + name);
if (!Utils.isEmpty(annotationsToAdd)) {
annotations.addAll(annotationsToAdd);
@@ -284,17 +317,24 @@ default List getAnnotations(MappingContext mappingContext, String graphQ
Map> directiveAnnotationsMapping = mappingContext.getDirectiveAnnotationsMapping();
for (Directive directive : directives) {
if (directiveAnnotationsMapping.containsKey(directive.getName())) {
- annotations.addAll(getAnnotationForDirective(mappingContext, directiveAnnotationsMapping.get(directive.getName()), directive));
+ annotations.addAll(getAnnotationsForDirective(
+ mappingContext, directiveAnnotationsMapping.get(directive.getName()), directive));
}
}
return annotations;
}
- boolean addModelValidationAnnotationForType(String possiblyPrimitiveType);
-
- default List getAnnotationForDirective(MappingContext mappingContext,
- List directiveAnnotations,
- Directive directive) {
+ /**
+ * Get a list of annotations for a given directive based on mapping config
+ *
+ * @param mappingContext Global mapping context
+ * @param directiveAnnotations List of directive annotations
+ * @param directive GraphQL Directive
+ * @return a list of annotations to be added for all types that have given directive
+ */
+ default List getAnnotationsForDirective(MappingContext mappingContext,
+ List directiveAnnotations,
+ Directive directive) {
List directiveAnnotationsMapped = new ArrayList<>();
for (String annotation : directiveAnnotations) {
String directiveAnnotationMapped = annotation;
@@ -317,7 +357,8 @@ default String getTypeConsideringPrimitive(MappingContext mappingContext,
String computedTypeName) {
String graphqlTypeName = namedDefinition.getGraphqlTypeName();
if (namedDefinition.isMandatory() && namedDefinition.isPrimitiveCanBeUsed()) {
- String possiblyPrimitiveType = mappingContext.getCustomTypesMapping().get(getMandatoryType(graphqlTypeName));
+ String possiblyPrimitiveType = mappingContext.getCustomTypesMapping()
+ .get(getMandatoryType(graphqlTypeName));
if (isPrimitive(possiblyPrimitiveType)) {
return possiblyPrimitiveType;
}
@@ -331,12 +372,14 @@ default String getResponseReturnType(MappingContext mappingContext,
return computedTypeName;
}
- default DeprecatedDefinition getDeprecated(MappingContext mappingContext, DirectivesContainer> directivesContainer) {
+ default DeprecatedDefinition getDeprecated(MappingContext mappingContext,
+ DirectivesContainer> directivesContainer) {
return directivesContainer.getDirectives()
.stream()
.filter(d -> d.getName().equalsIgnoreCase(Deprecated.class.getSimpleName()))
.findFirst()
- .map(directive -> MultiLanguageDeprecated.getLanguageDeprecated(mappingContext.getGeneratedLanguage(), directive))
+ .map(directive -> MultiLanguageDeprecated
+ .getLanguageDeprecated(mappingContext.getGeneratedLanguage(), directive))
.orElse(null);
}
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java
index c7ad68671..ae11edaac 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java
@@ -6,7 +6,21 @@
import java.util.HashMap;
import java.util.Map;
-import static com.kobylynskyi.graphql.codegen.model.DataModelFields.*;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.ANNOTATIONS;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.BUILDER;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.CLASS_NAME;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.ENUM_IMPORT_IT_SELF_IN_SCALA;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.EQUALS_AND_HASH_CODE;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.FIELDS;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_ANNOTATION;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_INFO;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATE_MODEL_OPEN_CLASSES;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.IMMUTABLE_MODELS;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.JAVA_DOC;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.NAME;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.PACKAGE;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.TO_STRING;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.TO_STRING_FOR_REQUEST;
/**
* Map input type definition to a Freemarker data model
@@ -21,10 +35,10 @@ public class InputDefinitionToDataModelMapper {
public InputDefinitionToDataModelMapper(GraphQLTypeMapper graphQLTypeMapper,
DataModelMapper dataModelMapper,
- InputValueDefinitionToParameterMapper inputValueDefinitionToParameterMapper) {
+ InputValueDefinitionToParameterMapper inputValueDefToParamMapper) {
this.graphQLTypeMapper = graphQLTypeMapper;
this.dataModelMapper = dataModelMapper;
- this.inputValueDefinitionToParameterMapper = inputValueDefinitionToParameterMapper;
+ this.inputValueDefinitionToParameterMapper = inputValueDefToParamMapper;
}
/**
@@ -41,7 +55,8 @@ public Map map(MappingContext mappingContext, ExtendedInputObjec
dataModel.put(CLASS_NAME, dataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, definition));
dataModel.put(JAVA_DOC, definition.getJavaDoc());
dataModel.put(NAME, definition.getName());
- dataModel.put(FIELDS, inputValueDefinitionToParameterMapper.map(mappingContext, definition.getValueDefinitions(), definition.getName()));
+ dataModel.put(FIELDS, inputValueDefinitionToParameterMapper
+ .map(mappingContext, definition.getValueDefinitions(), definition.getName()));
dataModel.put(ANNOTATIONS, graphQLTypeMapper.getAnnotations(mappingContext, definition));
dataModel.put(BUILDER, mappingContext.getGenerateBuilder());
dataModel.put(EQUALS_AND_HASH_CODE, mappingContext.getGenerateEqualsAndHashCode());
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java
index 62450e14d..83ed0faa4 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java
@@ -36,7 +36,8 @@ public InputValueDefinitionToParameterMapper(ValueMapper valueMapper,
* @param parentTypeName Name of the parent GraphQL type
* @return Freemarker data model of the GraphQL input value definition
*/
- public List map(MappingContext mappingContext, List valueDefinitions, String parentTypeName) {
+ public List map(MappingContext mappingContext, List valueDefinitions,
+ String parentTypeName) {
return valueDefinitions.stream()
.map(inputValueDef -> map(mappingContext, inputValueDef, parentTypeName))
.collect(toList());
@@ -50,15 +51,21 @@ public List map(MappingContext mappingContext, List map(MappingContext mappingContext, ExtendedInterfaceT
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(FIELDS, fieldDefinitionToParameterMapper
+ .mapFields(mappingContext, definition.getFieldDefinitions(), definition));
dataModel.put(GENERATED_ANNOTATION, mappingContext.getAddGeneratedAnnotation());
dataModel.put(GENERATED_INFO, mappingContext.getGeneratedInformation());
dataModel.put(ENUM_IMPORT_IT_SELF_IN_SCALA, mappingContext.getEnumImportItSelfInScala());
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java
index d601d35c3..5e07babab 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/RequestResponseDefinitionToDataModelMapper.java
@@ -25,8 +25,8 @@
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.ENUM_IMPORT_IT_SELF_IN_SCALA;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.EQUALS_AND_HASH_CODE;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.FIELDS;
-import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_INFO;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_ANNOTATION;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_INFO;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.JAVA_DOC;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.METHOD_NAME;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.OPERATION_NAME;
@@ -52,11 +52,11 @@ public class RequestResponseDefinitionToDataModelMapper {
public RequestResponseDefinitionToDataModelMapper(GraphQLTypeMapper graphQLTypeMapper,
DataModelMapper dataModelMapper,
FieldDefinitionToParameterMapper fieldDefinitionToParameterMapper,
- InputValueDefinitionToParameterMapper inputValueDefinitionToParameterMapper) {
+ InputValueDefinitionToParameterMapper inputValDefToParamMapper) {
this.graphQLTypeMapper = graphQLTypeMapper;
this.dataModelMapper = dataModelMapper;
this.fieldDefinitionToParameterMapper = fieldDefinitionToParameterMapper;
- this.inputValueDefinitionToParameterMapper = inputValueDefinitionToParameterMapper;
+ this.inputValueDefinitionToParameterMapper = inputValDefToParamMapper;
}
/**
@@ -81,26 +81,6 @@ private static String getClassName(ExtendedFieldDefinition operationDef,
return classNameBuilder.toString();
}
- /**
- * Get merged attributes from the type and attributes from the interface.
- *
- * @param mappingContext Global mapping context
- * @param unionDefinition GraphQL union definition
- * @return Freemarker data model for response projection of the GraphQL union
- */
- private static Collection getProjectionFields(
- MappingContext mappingContext, ExtendedUnionTypeDefinition unionDefinition) {
- // using the map to exclude duplicate fields from the type and interfaces
- Map allParameters = new LinkedHashMap<>();
- for (String memberTypeName : unionDefinition.getMemberTypeNames()) {
- ProjectionParameterDefinition memberDef = getChildDefinition(mappingContext, memberTypeName);
- allParameters.put(memberDef.getMethodName(), memberDef);
- }
- ProjectionParameterDefinition typeNameProjParamDef = getTypeNameProjectionParameterDefinition();
- allParameters.put(typeNameProjParamDef.getMethodName(), typeNameProjParamDef);
- return allParameters.values();
- }
-
private static ProjectionParameterDefinition getChildDefinition(MappingContext mappingContext,
String childName) {
ProjectionParameterDefinition parameter = new ProjectionParameterDefinition();
@@ -154,14 +134,16 @@ public Map mapResponseProjection(MappingContext mappingContext,
public Map mapParametrizedInput(MappingContext mappingContext,
ExtendedFieldDefinition fieldDefinition,
ExtendedDefinition, ?> parentTypeDefinition) {
- String className = DataModelMapper.getParametrizedInputClassName(mappingContext, fieldDefinition, parentTypeDefinition);
+ String className = DataModelMapper
+ .getParametrizedInputClassName(mappingContext, fieldDefinition, parentTypeDefinition);
Map dataModel = new HashMap<>();
// ParametrizedInput classes are sharing the package with the model classes, so no imports are needed
dataModel.put(PACKAGE, DataModelMapper.getModelPackageName(mappingContext));
dataModel.put(CLASS_NAME, className);
dataModel.put(ANNOTATIONS, graphQLTypeMapper.getAnnotations(mappingContext, className));
dataModel.put(JAVA_DOC, Collections.singletonList(String.format("Parametrized input for field %s in type %s",
- fieldDefinition.getName(), parentTypeDefinition.getName())));
+ fieldDefinition.getName(),
+ parentTypeDefinition.getName())));
dataModel.put(FIELDS, inputValueDefinitionToParameterMapper.map(
mappingContext, fieldDefinition.getInputValueDefinitions(), parentTypeDefinition.getName()));
dataModel.put(BUILDER, mappingContext.getGenerateBuilder());
@@ -189,7 +171,8 @@ public Map mapResponse(MappingContext mappingContext,
String className = getClassName(operationDef, fieldNames, objectTypeName, mappingContext.getResponseSuffix());
NamedDefinition namedDefinition = graphQLTypeMapper.getLanguageType(
mappingContext, operationDef.getType(), operationDef.getName(), objectTypeName);
- String returnType = graphQLTypeMapper.getResponseReturnType(mappingContext, namedDefinition, namedDefinition.getJavaName());
+ String returnType = graphQLTypeMapper
+ .getResponseReturnType(mappingContext, namedDefinition, namedDefinition.getJavaName());
Map dataModel = new HashMap<>();
// Response classes are sharing the package with the model classes, so no imports are needed
dataModel.put(PACKAGE, DataModelMapper.getModelPackageName(mappingContext));
@@ -198,7 +181,8 @@ public Map mapResponse(MappingContext mappingContext,
dataModel.put(JAVA_DOC, operationDef.getJavaDoc());
dataModel.put(DEPRECATED, operationDef.getDeprecated(mappingContext));
dataModel.put(OPERATION_NAME, operationDef.getName());
- dataModel.put(METHOD_NAME, dataModelMapper.capitalizeMethodNameIfRestricted(mappingContext, operationDef.getName()));
+ dataModel.put(METHOD_NAME, dataModelMapper.capitalizeMethodNameIfRestricted(
+ mappingContext, operationDef.getName()));
dataModel.put(RETURN_TYPE_NAME, returnType);
dataModel.put(GENERATED_ANNOTATION, mappingContext.getAddGeneratedAnnotation());
dataModel.put(GENERATED_INFO, mappingContext.getGeneratedInformation());
@@ -228,7 +212,8 @@ public Map mapRequest(MappingContext mappingContext,
dataModel.put(JAVA_DOC, operationDef.getJavaDoc());
dataModel.put(OPERATION_NAME, operationDef.getName());
dataModel.put(OPERATION_TYPE, objectTypeName.toUpperCase());
- dataModel.put(FIELDS, inputValueDefinitionToParameterMapper.map(mappingContext, operationDef.getInputValueDefinitions(), operationDef.getName()));
+ dataModel.put(FIELDS, inputValueDefinitionToParameterMapper
+ .map(mappingContext, operationDef.getInputValueDefinitions(), operationDef.getName()));
dataModel.put(BUILDER, mappingContext.getGenerateBuilder());
dataModel.put(EQUALS_AND_HASH_CODE, mappingContext.getGenerateEqualsAndHashCode());
dataModel.put(TO_STRING, mappingContext.getGenerateToString());
@@ -239,6 +224,26 @@ public Map mapRequest(MappingContext mappingContext,
return dataModel;
}
+ /**
+ * Get merged attributes from the type and attributes from the interface.
+ *
+ * @param mappingContext Global mapping context
+ * @param unionDefinition GraphQL union definition
+ * @return Freemarker data model for response projection of the GraphQL union
+ */
+ private static Collection getProjectionFields(
+ MappingContext mappingContext, ExtendedUnionTypeDefinition unionDefinition) {
+ // using the map to exclude duplicate fields from the type and interfaces
+ Map allParameters = new LinkedHashMap<>();
+ for (String memberTypeName : unionDefinition.getMemberTypeNames()) {
+ ProjectionParameterDefinition memberDef = getChildDefinition(mappingContext, memberTypeName);
+ allParameters.put(memberDef.getMethodName(), memberDef);
+ }
+ ProjectionParameterDefinition typeNameProjParamDef = getTypeNameProjectionParameterDefinition();
+ allParameters.put(typeNameProjParamDef.getMethodName(), typeNameProjParamDef);
+ return allParameters.values();
+ }
+
/**
* Get merged attributes from the type and attributes from the interface.
*
@@ -271,12 +276,15 @@ private Collection getProjectionFields(
// using the map to exclude duplicate fields from the type and interfaces
Map allParameters = new LinkedHashMap<>();
// includes parameters from the base definition and extensions
- fieldDefinitionToParameterMapper.mapProjectionFields(mappingContext, typeDefinition.getFieldDefinitions(), typeDefinition)
+ fieldDefinitionToParameterMapper
+ .mapProjectionFields(mappingContext, typeDefinition.getFieldDefinitions(), typeDefinition)
.forEach(p -> allParameters.put(p.getMethodName(), p));
// includes parameters from the interface
- List interfacesOfType = DataModelMapper.getInterfacesOfType(typeDefinition, mappingContext.getDocument());
+ List interfacesOfType = DataModelMapper
+ .getInterfacesOfType(typeDefinition, mappingContext.getDocument());
interfacesOfType.stream()
- .map(i -> fieldDefinitionToParameterMapper.mapProjectionFields(mappingContext, i.getFieldDefinitions(), i))
+ .map(i -> fieldDefinitionToParameterMapper
+ .mapProjectionFields(mappingContext, i.getFieldDefinitions(), i))
.flatMap(Collection::stream)
.filter(paramDef -> !allParameters.containsKey(paramDef.getMethodName()))
.forEach(paramDef -> allParameters.put(paramDef.getMethodName(), paramDef));
@@ -297,17 +305,20 @@ private Collection getProjectionFields(
// using the map to exclude duplicate fields from the type and interfaces
Map allParameters = new LinkedHashMap<>();
// includes parameters from the base definition and extensions
- fieldDefinitionToParameterMapper.mapProjectionFields(mappingContext, interfaceDefinition.getFieldDefinitions(), interfaceDefinition)
+ fieldDefinitionToParameterMapper
+ .mapProjectionFields(mappingContext, interfaceDefinition.getFieldDefinitions(), interfaceDefinition)
.forEach(p -> allParameters.put(p.getMethodName(), p));
// includes parameters from the interface
DataModelMapper.getInterfacesOfType(interfaceDefinition, mappingContext.getDocument()).stream()
- .map(i -> fieldDefinitionToParameterMapper.mapProjectionFields(mappingContext, i.getFieldDefinitions(), i))
+ .map(i -> fieldDefinitionToParameterMapper
+ .mapProjectionFields(mappingContext, i.getFieldDefinitions(), i))
.flatMap(Collection::stream)
.filter(paramDef -> !allParameters.containsKey(paramDef.getMethodName()))
.forEach(paramDef -> allParameters.put(paramDef.getMethodName(), paramDef));
Set interfaceChildren = mappingContext.getInterfaceChildren()
- .getOrDefault(interfaceDefinition.getName(), Collections.emptySet());
+ .getOrDefault(interfaceDefinition.getName(),
+ Collections.emptySet());
for (String childName : interfaceChildren) {
ProjectionParameterDefinition childDef = getChildDefinition(mappingContext, childName);
allParameters.put(childDef.getMethodName(), childDef);
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java
index 7299386ad..e6f72cb6e 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java
@@ -124,7 +124,8 @@ private Collection getFields(MappingContext mappingContext,
DataModelMapper.getInterfacesOfType(typeDefinition, document).stream()
.map(i -> fieldDefinitionToParameterMapper.mapFields(mappingContext, i.getFieldDefinitions(), i))
.flatMap(Collection::stream)
- .forEach(paramDef -> allParameters.merge(paramDef.getName(), paramDef, TypeDefinitionToDataModelMapper::merge));
+ .forEach(paramDef -> allParameters
+ .merge(paramDef.getName(), paramDef, TypeDefinitionToDataModelMapper::merge));
return allParameters.values();
}
@@ -134,11 +135,13 @@ private Set getInterfaces(MappingContext mappingContext,
.stream()
.filter(union -> union.isDefinitionPartOfUnion(definition))
.map(ExtendedUnionTypeDefinition::getName)
- .map(unionName -> DataModelMapper.getModelClassNameWithPrefixAndSuffix(mappingContext, unionName))
+ .map(unionName -> DataModelMapper
+ .getModelClassNameWithPrefixAndSuffix(mappingContext, unionName))
.collect(Collectors.toList());
Set interfaceNames = definition.getImplements()
.stream()
- .map(anImplement -> graphQLTypeMapper.getLanguageType(mappingContext, anImplement))
+ .map(anImplement -> graphQLTypeMapper
+ .getLanguageType(mappingContext, anImplement))
.collect(Collectors.toSet());
Set allInterfaces = new LinkedHashSet<>();
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/UnionDefinitionToDataModelMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/UnionDefinitionToDataModelMapper.java
index 52fe0f061..eead1353f 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/UnionDefinitionToDataModelMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/UnionDefinitionToDataModelMapper.java
@@ -9,8 +9,8 @@
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.ANNOTATIONS;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.CLASS_NAME;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.ENUM_IMPORT_IT_SELF_IN_SCALA;
-import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_INFO;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_ANNOTATION;
+import static com.kobylynskyi.graphql.codegen.model.DataModelFields.GENERATED_INFO;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.JAVA_DOC;
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.PACKAGE;
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueFormatter.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueFormatter.java
index 801e1e382..d887a9757 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueFormatter.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueFormatter.java
@@ -16,6 +16,13 @@ static String format(String value, String formatter) {
return FORMATTER_TO_STRING.equals(formatter) ? "\"" + value + "\"" : value;
}
+ /**
+ * Format a list of values to a single string according to a formatter
+ *
+ * @param values values to be formatted
+ * @param formatter value formatter
+ * @return formatted string
+ */
default String formatList(List values, String formatter) {
if (values == null) {
return format(getNullValue(), formatter);
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java
index 23bd819aa..8c8739e5a 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java
@@ -19,6 +19,9 @@
import java.util.List;
import java.util.stream.Collectors;
+/**
+ * A class for mapping GraphQL value to a java value
+ */
public class ValueMapper {
private static final String NULL_STRING = "null";
@@ -36,10 +39,13 @@ private static String mapBoolean(BooleanValue value) {
return value.isValue() ? "true" : "false";
}
- //TODO It should also be abstracted. Different languages have different default values(It is now implemented in templates (templates are extremely complex))
+ //TODO It should also be abstracted. Different languages have different default values(It is now implemented in
+ // templates (templates are extremely complex))
private static String mapInt(MappingContext mappingContext, IntValue value, Type> graphQLType) {
- //default java basic type is `int`. so, default value like 123 that must wrap or append suffix `L` when it be defined as `int` in graphql schema.
- //`int` cannot assign to `Long`, also `double` cannot assign to `Float`, but graphql Float default mapping is Double in java, so, not modify `mapFloat`.
+ //default java basic type is `int`. so, default value like 123 that must wrap or append suffix `L` when it be
+ // defined as `int` in graphql schema.
+ //`int` cannot assign to `Long`, also `double` cannot assign to `Float`, but graphql Float default mapping is
+ // Double in java, so, not modify `mapFloat`.
if (graphQLType instanceof TypeName) {
String customType = mappingContext.getCustomTypesMapping().get("Long");
String typeName = ((TypeName) graphQLType).getName();
@@ -67,6 +73,15 @@ public String map(MappingContext mappingContext, Value> value, Type> graphQL
return map(mappingContext, value, graphQLType, null);
}
+ /**
+ * Map GraphQL value of a given type according to a formatter
+ *
+ * @param mappingContext Global mapping context
+ * @param value GraphQL Value
+ * @param graphQLType GraphQL Type
+ * @param formatter value formatter
+ * @return formatted value
+ */
public String map(MappingContext mappingContext, Value> value, Type> graphQLType,
String formatter) {
if (value instanceof NullValue) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiInterfaceStrategy.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiInterfaceStrategy.java
index c4e1a00e2..1eeb7efc9 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiInterfaceStrategy.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiInterfaceStrategy.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Strategy for creating API interface calsses
+ */
public enum ApiInterfaceStrategy {
/**
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiNamePrefixStrategy.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiNamePrefixStrategy.java
index a88746255..4a332486b 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiNamePrefixStrategy.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiNamePrefixStrategy.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Strategy of defining the prefix for all generated API interface classes
+ */
public enum ApiNamePrefixStrategy {
/**
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiRootInterfaceStrategy.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiRootInterfaceStrategy.java
index 772bea4f8..e83003368 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiRootInterfaceStrategy.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/ApiRootInterfaceStrategy.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Strategy of how root API interface (Query/Mutation/Subscription) will be generated
+ */
public enum ApiRootInterfaceStrategy {
/**
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/EnumValueDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/EnumValueDefinition.java
index 7eb9eb48d..2a9c59c8a 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/EnumValueDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/EnumValueDefinition.java
@@ -14,7 +14,8 @@ public class EnumValueDefinition {
private final List javaDoc;
private final DeprecatedDefinition deprecated;
- public EnumValueDefinition(String javaName, String graphqlName, List javaDoc, DeprecatedDefinition deprecated) {
+ public EnumValueDefinition(String javaName, String graphqlName, List javaDoc,
+ DeprecatedDefinition deprecated) {
this.javaName = javaName;
this.graphqlName = graphqlName;
this.javaDoc = javaDoc;
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedInformation.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedInformation.java
index ab6d244f2..b47024c09 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedInformation.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedInformation.java
@@ -4,6 +4,9 @@
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;
+/**
+ * A class used for building a @Generated annotation on top of each generated class
+ */
public class GeneratedInformation {
public static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedLanguage.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedLanguage.java
index 70ddd559e..2eb310734 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedLanguage.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/GeneratedLanguage.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Enum containing all supported langugages for code generation
+ */
public enum GeneratedLanguage {
JAVA(".java"),
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/GraphQLCodegenConfiguration.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/GraphQLCodegenConfiguration.java
index fbaadc16d..2095db193 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/GraphQLCodegenConfiguration.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/GraphQLCodegenConfiguration.java
@@ -11,14 +11,14 @@ public interface GraphQLCodegenConfiguration {
/**
* Can be used to supply custom mappings for scalars.
- *
- * Supports:
+ *
+ *
Supports:
*
* - Map of (GraphqlObjectName.fieldName) to (JavaType)
* - Map of (GraphqlType) to (JavaType)
*
- *
- * E.g.:
+ *
+ *
E.g.:
*
* - {@code DateTime --- String}
* - {@code Price.amount --- java.math.BigDecimal}
@@ -30,15 +30,16 @@ public interface GraphQLCodegenConfiguration {
/**
* Can be used to supply custom annotations (serializers) for scalars.
- *
- * Supports:
+ *
+ *
Supports:
*
* - Map of (GraphqlObjectName.fieldName) to (JavaAnnotation)
* - Map of (GraphqlType) to (JavaAnnotation)
*
- *
- * E.g.:
- * {@code EpochMillis --- @com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = com.example.json.EpochMillisScalarDeserializer.class)}
+ *
+ *
E.g.:
+ * {@code EpochMillis --- @com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = com.example.json
+ * .EpochMillisScalarDeserializer.class)}
*
* @return mappings from GraphqlType to JavaAnnotation
*/
@@ -46,14 +47,15 @@ public interface GraphQLCodegenConfiguration {
/**
* Map GraphQL directives to Java annotations.
- *
- * Directive fields can be used in annotations via: {{directiveFieldName}}
- *
- * Example:
- *
- * schema: directive @auth (roles: [String])
- *
- * {@code directiveAnnotationsMapping: auth --- @org.springframework.security.access.annotation.Secured({{roles}})}
+ *
+ *
Directive fields can be used in annotations via: {{directiveFieldName}}
+ *
+ *
Example:
+ *
+ *
schema: directive @auth (roles: [String])
+ *
+ *
{@code directiveAnnotationsMapping:
+ * auth --- @org.springframework.security.access.annotation.Secured({{roles}})}
*
* @return mappings from GraphQL directives to Java annotations.
*/
@@ -266,12 +268,12 @@ public interface GraphQLCodegenConfiguration {
/**
* Fields that require Resolvers.
- *
- * Values should be defined here in format: TypeName, TypeName.fieldName, @directive
- *
- * If just type is specified, then all fields of this type will have resolvers.
- *
- * E.g.:
+ *
+ *
Values should be defined here in format: TypeName, TypeName.fieldName, @directive
+ *
+ *
If just type is specified, then all fields of this type will have resolvers.
+ *
+ *
E.g.:
*
* - {@code Person}
* - {@code Person.friends}
@@ -284,14 +286,14 @@ public interface GraphQLCodegenConfiguration {
/**
* Fields that DO NOT require Resolvers.
- *
- * Values should be defined here in format: TypeName, TypeName.fieldName, @directive
- *
- * If just type is specified, then all fields of this type will NOT have resolvers.
- *
- * Can be used in conjunction with {@code generateExtensionFieldsResolvers}
- *
- * E.g.:
+ *
+ *
Values should be defined here in format: TypeName, TypeName.fieldName, @directive
+ *
+ *
If just type is specified, then all fields of this type will NOT have resolvers.
+ *
+ *
Can be used in conjunction with {@code generateExtensionFieldsResolvers}
+ *
+ *
E.g.:
*
* - {@code Person}
* - {@code Person.friends}
@@ -383,12 +385,12 @@ public interface GraphQLCodegenConfiguration {
/**
* Fields that require serialization using
* {@link com.fasterxml.jackson.databind.ObjectMapper#writeValueAsString(Object)}
- *
- * Values should be defined here in format: GraphqlObjectName.fieldName or GraphqlTypeName
- *
- * If just type is specified, then all fields of this type will be serialized using ObjectMapper.
- *
- * E.g.:
+ *
+ *
Values should be defined here in format: GraphqlObjectName.fieldName or GraphqlTypeName
+ *
+ *
If just type is specified, then all fields of this type will be serialized using ObjectMapper.
+ *
+ *
E.g.:
*
* - {@code Person.createdDateTime}
* - {@code ZonedDateTime}
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java
index 9f9e9b6db..c1dab9333 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java
@@ -116,45 +116,66 @@ public void combine(MappingConfig source) {
modelNameSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getModelNameSuffix);
apiNamePrefix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiNamePrefix);
apiNameSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiNameSuffix);
- apiRootInterfaceStrategy = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiRootInterfaceStrategy);
+ apiRootInterfaceStrategy = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getApiRootInterfaceStrategy);
apiInterfaceStrategy = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiInterfaceStrategy);
apiNamePrefixStrategy = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiNamePrefixStrategy);
typeResolverPrefix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getTypeResolverPrefix);
typeResolverSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getTypeResolverSuffix);
- modelValidationAnnotation = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getModelValidationAnnotation);
+ modelValidationAnnotation = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getModelValidationAnnotation);
apiReturnType = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiReturnType);
apiReturnListType = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getApiReturnListType);
- subscriptionReturnType = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getSubscriptionReturnType);
+ subscriptionReturnType = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getSubscriptionReturnType);
generateBuilder = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateBuilder);
- generateEqualsAndHashCode = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateEqualsAndHashCode);
- generateImmutableModels = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateImmutableModels);
+ generateEqualsAndHashCode = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateEqualsAndHashCode);
+ generateImmutableModels = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateImmutableModels);
generateToString = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateToString);
- generateParameterizedFieldsResolvers = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateParameterizedFieldsResolvers);
- generateExtensionFieldsResolvers = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateExtensionFieldsResolvers);
- generateDataFetchingEnvironmentArgumentInApis = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateDataFetchingEnvironmentArgumentInApis);
- generateModelsForRootTypes = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateModelsForRootTypes);
- useOptionalForNullableReturnTypes = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getUseOptionalForNullableReturnTypes);
- generateApisWithThrowsException = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateApisWithThrowsException);
- addGeneratedAnnotation = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getAddGeneratedAnnotation);
+ generateParameterizedFieldsResolvers = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateParameterizedFieldsResolvers);
+ generateExtensionFieldsResolvers = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateExtensionFieldsResolvers);
+ generateDataFetchingEnvironmentArgumentInApis = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateDataFetchingEnvironmentArgumentInApis);
+ generateModelsForRootTypes = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateModelsForRootTypes);
+ useOptionalForNullableReturnTypes = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getUseOptionalForNullableReturnTypes);
+ generateApisWithThrowsException = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getGenerateApisWithThrowsException);
+ addGeneratedAnnotation = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getAddGeneratedAnnotation);
relayConfig = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getRelayConfig);
- queryResolverParentInterface = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getQueryResolverParentInterface);
- mutationResolverParentInterface = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getMutationResolverParentInterface);
- subscriptionResolverParentInterface = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getSubscriptionResolverParentInterface);
- resolverParentInterface = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getResolverParentInterface);
+ queryResolverParentInterface = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getQueryResolverParentInterface);
+ mutationResolverParentInterface = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getMutationResolverParentInterface);
+ subscriptionResolverParentInterface = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getSubscriptionResolverParentInterface);
+ resolverParentInterface = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getResolverParentInterface);
generateClient = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGenerateClient);
requestSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getRequestSuffix);
responseSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getResponseSuffix);
- responseProjectionSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getResponseProjectionSuffix);
- parametrizedInputSuffix = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getParametrizedInputSuffix);
+ responseProjectionSuffix = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getResponseProjectionSuffix);
+ parametrizedInputSuffix = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getParametrizedInputSuffix);
fieldsWithResolvers = combineSet(fieldsWithResolvers, source.fieldsWithResolvers);
fieldsWithoutResolvers = combineSet(fieldsWithoutResolvers, source.fieldsWithoutResolvers);
customTypesMapping = combineMap(customTypesMapping, source.customTypesMapping);
customAnnotationsMapping = combineMap(customAnnotationsMapping, source.customAnnotationsMapping);
directiveAnnotationsMapping = combineMap(directiveAnnotationsMapping, source.directiveAnnotationsMapping);
- responseProjectionMaxDepth = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getResponseProjectionMaxDepth);
- useObjectMapperForRequestSerialization = combineSet(useObjectMapperForRequestSerialization, source.useObjectMapperForRequestSerialization);
+ responseProjectionMaxDepth = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::getResponseProjectionMaxDepth);
+ useObjectMapperForRequestSerialization = combineSet(useObjectMapperForRequestSerialization,
+ source.useObjectMapperForRequestSerialization);
generatedLanguage = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::getGeneratedLanguage);
- generateModelOpenClasses = getValueOrDefaultToThis(source, GraphQLCodegenConfiguration::isGenerateModelOpenClasses);
+ generateModelOpenClasses = getValueOrDefaultToThis(source,
+ GraphQLCodegenConfiguration::isGenerateModelOpenClasses);
}
private T getValueOrDefaultToThis(MappingConfig source, Function getValueFunction) {
@@ -414,7 +435,8 @@ public Boolean getGenerateDataFetchingEnvironmentArgumentInApis() {
return generateDataFetchingEnvironmentArgumentInApis;
}
- public void setGenerateDataFetchingEnvironmentArgumentInApis(Boolean generateDataFetchingEnvironmentArgumentInApis) {
+ public void setGenerateDataFetchingEnvironmentArgumentInApis(
+ Boolean generateDataFetchingEnvironmentArgumentInApis) {
this.generateDataFetchingEnvironmentArgumentInApis = generateDataFetchingEnvironmentArgumentInApis;
}
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfigConstants.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfigConstants.java
index 46a73963f..b971e9986 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfigConstants.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfigConstants.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Various constants used in code generation process
+ */
public class MappingConfigConstants {
public static final String DEFAULT_VALIDATION_ANNOTATION = "javax.validation.constraints.NotNull";
@@ -30,9 +33,11 @@ public class MappingConfigConstants {
public static final String DEFAULT_USE_OPTIONAL_FOR_NULLABLE_RETURN_TYPES_STRING = "false";
public static final ApiNamePrefixStrategy DEFAULT_API_NAME_PREFIX_STRATEGY = ApiNamePrefixStrategy.CONSTANT;
public static final String DEFAULT_API_NAME_PREFIX_STRATEGY_STRING = "CONSTANT";
- public static final ApiRootInterfaceStrategy DEFAULT_API_ROOT_INTERFACE_STRATEGY = ApiRootInterfaceStrategy.SINGLE_INTERFACE;
+ public static final ApiRootInterfaceStrategy DEFAULT_API_ROOT_INTERFACE_STRATEGY =
+ ApiRootInterfaceStrategy.SINGLE_INTERFACE;
public static final String DEFAULT_API_ROOT_INTERFACE_STRATEGY_STRING = "SINGLE_INTERFACE";
- public static final ApiInterfaceStrategy DEFAULT_API_INTERFACE_STRATEGY = ApiInterfaceStrategy.INTERFACE_PER_OPERATION;
+ public static final ApiInterfaceStrategy DEFAULT_API_INTERFACE_STRATEGY =
+ ApiInterfaceStrategy.INTERFACE_PER_OPERATION;
public static final String DEFAULT_API_INTERFACE_STRATEGY_STRING = "INTERFACE_PER_OPERATION";
public static final boolean DEFAULT_GENERATE_CLIENT = false;
public static final String DEFAULT_GENERATE_CLIENT_STRING = "false";
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingContext.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingContext.java
index 99d200f0c..2103de6cc 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingContext.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/MappingContext.java
@@ -2,7 +2,11 @@
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapper;
import com.kobylynskyi.graphql.codegen.mapper.DataModelMapperFactory;
-import com.kobylynskyi.graphql.codegen.model.definitions.*;
+import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDefinition;
+import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDocument;
+import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedEnumTypeDefinition;
+import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedFieldDefinition;
+import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedInterfaceTypeDefinition;
import java.util.HashMap;
import java.util.List;
@@ -10,6 +14,10 @@
import java.util.Set;
import java.util.stream.Collectors;
+/**
+ * A context of a single mapping process.
+ * Contains mapping configuration, parsed schema elements and other things used in code generation process
+ */
public class MappingContext implements GraphQLCodegenConfiguration {
private final MappingConfig config;
@@ -18,9 +26,9 @@ public class MappingContext implements GraphQLCodegenConfiguration {
private final Set interfacesName;
private final Map> interfaceChildren;
private final GeneratedInformation generatedInformation;
+ private final DataModelMapperFactory dataModelMapperFactory;
private Set enumImportItSelfInScala = null;
private Map> parentInterfaceProperties = null;
- private final DataModelMapperFactory dataModelMapperFactory;
public MappingContext(MappingConfig mappingConfig,
ExtendedDocument document,
@@ -292,22 +300,31 @@ public GeneratedInformation getGeneratedInformation() {
public Set getEnumImportItSelfInScala() {
// Only for scala
if (GeneratedLanguage.SCALA.equals(this.config.getGeneratedLanguage()) && enumImportItSelfInScala == null) {
- enumImportItSelfInScala = this.document.getEnumDefinitions().stream().map(this::getModelClassNameWithPrefixAndSuffix).collect(Collectors.toSet());
+ enumImportItSelfInScala = this.document.getEnumDefinitions().stream()
+ .map(this::getModelClassNameWithPrefixAndSuffix)
+ .collect(Collectors.toSet());
}
return enumImportItSelfInScala;
}
+ /**
+ * Get a list of fields for each interface
+ * This method is used only for Scala and Kotlin
+ *
+ * @return a map of interface name to a list of fields
+ */
public Map> getParentInterfaceProperties() {
// In this way, we no longer need to rely on the order in which files are created
// Only for scala/kotlin
if ((GeneratedLanguage.SCALA.equals(this.config.getGeneratedLanguage()) ||
- GeneratedLanguage.KOTLIN.equals(this.config.getGeneratedLanguage()))
- && parentInterfaceProperties == null) {
+ GeneratedLanguage.KOTLIN.equals(this.config.getGeneratedLanguage())) &&
+ parentInterfaceProperties == null) {
parentInterfaceProperties = new HashMap<>();
- for (ExtendedInterfaceTypeDefinition extendedInterfaceTypeDefinition : this.document.getInterfaceDefinitions()) {
- String clazzName = getModelClassNameWithPrefixAndSuffix(extendedInterfaceTypeDefinition);
- Set fields = getFields(extendedInterfaceTypeDefinition.getFieldDefinitions(),
- extendedInterfaceTypeDefinition).stream().map(ParameterDefinition::getName).collect(Collectors.toSet());
+ for (ExtendedInterfaceTypeDefinition interfaceDef : this.document.getInterfaceDefinitions()) {
+ String clazzName = getModelClassNameWithPrefixAndSuffix(interfaceDef);
+ Set fields = getFields(interfaceDef.getFieldDefinitions(), interfaceDef).stream()
+ .map(ParameterDefinition::getName)
+ .collect(Collectors.toSet());
if (parentInterfaceProperties.containsKey(clazzName)) {
parentInterfaceProperties.get(clazzName).addAll(fields);
} else {
@@ -323,11 +340,14 @@ private String getModelClassNameWithPrefixAndSuffix(ExtendedEnumTypeDefinition e
}
private String getModelClassNameWithPrefixAndSuffix(ExtendedDefinition, ?> extendedDefinition) {
- return this.dataModelMapperFactory.getDataModelMapper().getModelClassNameWithPrefixAndSuffix(this, extendedDefinition);
+ return this.dataModelMapperFactory.getDataModelMapper()
+ .getModelClassNameWithPrefixAndSuffix(this, extendedDefinition);
}
- private List getFields(List fieldDefinitions, ExtendedDefinition, ?> parentDefinition) {
- return this.dataModelMapperFactory.getFieldDefinitionToParameterMapper().mapFields(this, fieldDefinitions, parentDefinition);
+ private List getFields(List fieldDefinitions,
+ ExtendedDefinition, ?> parentDefinition) {
+ return this.dataModelMapperFactory.getFieldDefToParamMapper()
+ .mapFields(this, fieldDefinitions, parentDefinition);
}
}
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/MultiLanguageDeprecated.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/MultiLanguageDeprecated.java
index 1a4a994b3..9e9a38126 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/MultiLanguageDeprecated.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/MultiLanguageDeprecated.java
@@ -17,6 +17,13 @@ public class MultiLanguageDeprecated {
private MultiLanguageDeprecated() {
}
+ /**
+ * Get a definition of @deprecated annotation for a specified language.
+ *
+ * @param generatedLanguage Language of code generation
+ * @param directive GraphQL @deprecated directive
+ * @return a definition of a deprecation having reason and annotation
+ */
public static DeprecatedDefinition getLanguageDeprecated(GeneratedLanguage generatedLanguage, Directive directive) {
String msg = null;
if (directive.getArguments().stream().anyMatch(argument -> argument.getName().equals(REASON))) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/NamedDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/NamedDefinition.java
index 0c05aa274..ab8658dde 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/NamedDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/NamedDefinition.java
@@ -1,5 +1,8 @@
package com.kobylynskyi.graphql.codegen.model;
+/**
+ * Class describes a specific GraphQL type converted to a specific JVM language
+ */
public class NamedDefinition {
private String javaName;
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/ParameterDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/ParameterDefinition.java
index bce282e3e..98d4a5290 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/ParameterDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/ParameterDefinition.java
@@ -117,11 +117,11 @@ public void setSerializeUsingObjectMapper(boolean serializeUsingObjectMapper) {
this.serializeUsingObjectMapper = serializeUsingObjectMapper;
}
- public void setDefinitionInParentType(ParameterDefinition definitionInParentType) {
- this.definitionInParentType = definitionInParentType;
- }
-
public ParameterDefinition getDefinitionInParentType() {
return definitionInParentType;
}
+
+ public void setDefinitionInParentType(ParameterDefinition definitionInParentType) {
+ this.definitionInParentType = definitionInParentType;
+ }
}
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/RelayConfig.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/RelayConfig.java
index 210c280a2..d386c5274 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/RelayConfig.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/RelayConfig.java
@@ -2,6 +2,9 @@
import java.io.Serializable;
+/**
+ * Relay-related configurations
+ */
public class RelayConfig implements Serializable {
// Increment this when the serialization output changes
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDefinition.java
index 5a0bbb966..d04de0352 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDefinition.java
@@ -53,6 +53,11 @@ public List getJavaDoc() {
return javaDocFromDescription;
}
+ /**
+ * Get java doc from description for this definition
+ *
+ * @return List of java docs
+ */
public List getJavaDocFromDescription() {
List descriptions = new ArrayList<>();
if (this.definition instanceof AbstractDescribedNode) {
@@ -70,6 +75,11 @@ public List getJavaDocFromDescription() {
return descriptions;
}
+ /**
+ * Get java doc from description for this definition
+ *
+ * @return List of java docs
+ */
public List getJavaDocFromComments() {
List comments = new ArrayList<>();
if (definition != null && definition.getComments() != null) {
@@ -85,6 +95,11 @@ public List getJavaDocFromComments() {
return comments;
}
+ /**
+ * Return all directives for this definition
+ *
+ * @return list of directive names
+ */
public List getDirectiveNames() {
List directives = new ArrayList<>();
if (this.definition instanceof DirectivesContainer) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDocument.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDocument.java
index 0272eb8ba..f8e089dca 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDocument.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedDocument.java
@@ -40,6 +40,11 @@ public ExtendedDocument(Collection operationDefini
this.unionDefinitions = unionDefinitions;
}
+ /**
+ * Get a joint list of names of all types, unions and interfaces
+ *
+ * @return Set containing all type names, union names, interface names
+ */
public Set getTypesUnionsInterfacesNames() {
Set typesUnionsInterfaces = new LinkedHashSet<>();
typeDefinitions.stream()
@@ -54,6 +59,11 @@ public Set getTypesUnionsInterfacesNames() {
return typesUnionsInterfaces;
}
+ /**
+ * Construct a map having interface name as a key and all children (that are extending this interface) as a value
+ *
+ * @return a map of interface name to all its children
+ */
public Map> getInterfaceChildren() {
Map> interfaceChildren = new HashMap<>();
for (ExtendedObjectTypeDefinition typeDefinition : typeDefinitions) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedEnumTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedEnumTypeDefinition.java
index 461176200..d8facbc8e 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedEnumTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedEnumTypeDefinition.java
@@ -7,6 +7,9 @@
import java.util.ArrayList;
import java.util.List;
+/**
+ * Extended definition of GraphQL enum type: based definition + its extensions
+ */
public class ExtendedEnumTypeDefinition extends ExtendedDefinition {
/**
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedFieldDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedFieldDefinition.java
index cd83ea197..e349e6f78 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedFieldDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedFieldDefinition.java
@@ -31,10 +31,16 @@ public DeprecatedDefinition getDeprecated(MappingContext mappingContext) {
.stream()
.filter(d -> d.getName().equalsIgnoreCase(Deprecated.class.getSimpleName()))
.findFirst()
- .map(directive -> MultiLanguageDeprecated.getLanguageDeprecated(mappingContext.getGeneratedLanguage(), directive))
+ .map(directive -> MultiLanguageDeprecated
+ .getLanguageDeprecated(mappingContext.getGeneratedLanguage(), directive))
.orElse(null);
}
+ /**
+ * Get java doc of GraphQL field
+ *
+ * @return a list of Java docs for this GraphQL field
+ */
public List getJavaDoc() {
Description description = getDescription();
if (description != null && Utils.isNotBlank(description.getContent())) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedImplementingTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedImplementingTypeDefinition.java
index 7b4a7dae3..fb9a69dc2 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedImplementingTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedImplementingTypeDefinition.java
@@ -12,7 +12,8 @@
* @param base type
* @param extension type
*/
-public abstract class ExtendedImplementingTypeDefinition, E extends T> extends ExtendedDefinition {
+public abstract class ExtendedImplementingTypeDefinition, E extends T>
+ extends ExtendedDefinition {
@SuppressWarnings({"rawtypes", "java:S3740"})
public List getImplements() {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInputObjectTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInputObjectTypeDefinition.java
index 2bc341de6..8228c6c04 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInputObjectTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInputObjectTypeDefinition.java
@@ -7,7 +7,11 @@
import java.util.ArrayList;
import java.util.List;
-public class ExtendedInputObjectTypeDefinition extends ExtendedDefinition {
+/**
+ * Extended definition of GraphQL input type: based definition + its extensions
+ */
+public class ExtendedInputObjectTypeDefinition
+ extends ExtendedDefinition {
public List getValueDefinitions() {
List definitions = new ArrayList<>();
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInterfaceTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInterfaceTypeDefinition.java
index 26501dba6..27e893ce2 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInterfaceTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedInterfaceTypeDefinition.java
@@ -7,8 +7,17 @@
import java.util.Collection;
import java.util.List;
-public class ExtendedInterfaceTypeDefinition extends ExtendedImplementingTypeDefinition {
+/**
+ * Extended definition of GraphQL interface type: based definition + its extensions
+ */
+public class ExtendedInterfaceTypeDefinition
+ extends ExtendedImplementingTypeDefinition {
+ /**
+ * Get fields with extended information of the given interface
+ *
+ * @return List of field definitions
+ */
public List getFieldDefinitions() {
List definitions = new ArrayList<>();
if (definition != null) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedObjectTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedObjectTypeDefinition.java
index 735e3f52f..81d5af051 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedObjectTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedObjectTypeDefinition.java
@@ -12,7 +12,11 @@
import java.util.Map;
import java.util.function.Function;
-public class ExtendedObjectTypeDefinition extends ExtendedImplementingTypeDefinition {
+/**
+ * Extended definition of GraphQL object type: based definition + its extensions
+ */
+public class ExtendedObjectTypeDefinition
+ extends ExtendedImplementingTypeDefinition {
/**
* Get source location of the node.
@@ -24,6 +28,11 @@ private static String getSourceLocationName(Node> node) {
return node.getSourceLocation() != null ? node.getSourceLocation().getSourceName() : "unknown";
}
+ /**
+ * Get fields with extended information of the given object
+ *
+ * @return List of field definitions
+ */
public List getFieldDefinitions() {
List definitions = new ArrayList<>();
if (definition != null) {
diff --git a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedScalarTypeDefinition.java b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedScalarTypeDefinition.java
index 9ae6395ef..acf380961 100644
--- a/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedScalarTypeDefinition.java
+++ b/src/main/java/com/kobylynskyi/graphql/codegen/model/definitions/ExtendedScalarTypeDefinition.java
@@ -3,6 +3,10 @@
import graphql.language.ScalarTypeDefinition;
import graphql.language.ScalarTypeExtensionDefinition;
-public class ExtendedScalarTypeDefinition extends ExtendedDefinition {
+/**
+ * Extended definition of GraphQL scalar type: based definition + its extensions
+ */
+public class ExtendedScalarTypeDefinition
+ extends ExtendedDefinition