Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion graphql-dgs-codegen-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ dependencies {
implementation 'com.fasterxml.jackson.core:jackson-annotations'
implementation 'org.slf4j:slf4j-api'

implementation 'com.squareup:javapoet:1.13.+'
implementation 'com.palantir.javapoet:javapoet:0.9.+'
implementation 'com.squareup:kotlinpoet:1.17.+'
implementation 'com.github.ajalt.clikt:clikt:4.4.+'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.f
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findTypeExtensions
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findUnionExtensions
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
import com.squareup.javapoet.AnnotationSpec
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.TypeSpec
import com.palantir.javapoet.AnnotationSpec
import com.palantir.javapoet.ClassName
import com.palantir.javapoet.JavaFile
import com.palantir.javapoet.TypeSpec
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.KModifier
import graphql.language.*
Expand Down Expand Up @@ -323,10 +323,10 @@ class CodeGen(
CodeGenResult.EMPTY
}

private fun generateJavaClientEntitiesRepresentations(definitions: Collection<Definition<*>>): CodeGenResult {
return if (config.generateClientApi || config.generateClientApiv2) {
private fun generateJavaClientEntitiesRepresentations(definitions: Collection<Definition<*>>): CodeGenResult =
if (config.generateClientApi || config.generateClientApiv2) {
val generatedRepresentations = mutableMapOf<String, Any>()
return definitions
definitions
.asSequence()
.filterIsInstance<ObjectTypeDefinition>()
.filter { it.hasDirective("key") }
Expand All @@ -336,7 +336,6 @@ class CodeGen(
} else {
CodeGenResult.EMPTY
}
}

private fun generateJavaDataFetchers(definitions: Collection<Definition<*>>): CodeGenResult =
definitions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ import com.netflix.graphql.dgs.codegen.filterSkipped
import com.netflix.graphql.dgs.codegen.findTypeDefinition
import com.netflix.graphql.dgs.codegen.generators.shared.CodeGeneratorUtils.capitalized
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.collectAllFieldDefinitions
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.CodeBlock
import com.squareup.javapoet.FieldSpec
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.MethodSpec
import com.squareup.javapoet.ParameterSpec
import com.squareup.javapoet.ParameterizedTypeName
import com.squareup.javapoet.TypeSpec
import com.squareup.javapoet.TypeVariableName
import com.palantir.javapoet.ClassName
import com.palantir.javapoet.CodeBlock
import com.palantir.javapoet.FieldSpec
import com.palantir.javapoet.JavaFile
import com.palantir.javapoet.MethodSpec
import com.palantir.javapoet.ParameterSpec
import com.palantir.javapoet.ParameterizedTypeName
import com.palantir.javapoet.TypeSpec
import com.palantir.javapoet.TypeVariableName
import graphql.introspection.Introspection.TypeNameMetaFieldDef
import graphql.language.Directive
import graphql.language.DirectivesContainer
Expand Down Expand Up @@ -537,7 +537,7 @@ class ClientApiGenerator(
javaType: TypeSpec.Builder,
projectionRoot: String,
): TypeSpec.Builder? {
val clazzName = javaType.build().name
val clazzName = javaType.build().name()
val rootTypeName = if (projectionRoot == "this") "$clazzName<PARENT, ROOT>" else "ROOT"
val returnTypeName = TypeVariableName.get("$projectionName<$clazzName<PARENT, ROOT>, $rootTypeName>")
val methodBuilder =
Expand Down Expand Up @@ -576,7 +576,7 @@ class ClientApiGenerator(
javaType: TypeSpec.Builder,
projectionRoot: String,
): TypeSpec.Builder? {
val clazzName = javaType.build().name
val clazzName = javaType.build().name()
val rootTypeName = if (projectionRoot == "this") "$clazzName<PARENT, ROOT>" else "ROOT"
val returnTypeName = TypeVariableName.get("$projectionName<$clazzName<PARENT, ROOT>, $rootTypeName>")
val methodBuilder =
Expand Down Expand Up @@ -718,9 +718,9 @@ class ClientApiGenerator(
processedEdges: Set<Pair<String, String>>,
queryDepth: Int,
): CodeGenResult {
val rootRef = if (javaType.build().name == rootType.name) "this" else "getRoot()"
val rootTypeName = if (javaType.build().name == rootType.name) "${rootType.name}<PARENT, ROOT>" else "ROOT"
val parentRef = javaType.build().name
val rootRef = if (javaType.build().name() == rootType.name()) "this" else "getRoot()"
val rootTypeName = if (javaType.build().name() == rootType.name()) "${rootType.name()}<PARENT, ROOT>" else "ROOT"
val parentRef = javaType.build().name()
val projectionName = "${it.name.capitalized()}Fragment"
val fullProjectionName = "${projectionName}Projection"
val typeVariable = TypeVariableName.get("$fullProjectionName<$parentRef<PARENT, ROOT>, $rootTypeName>")
Expand Down Expand Up @@ -927,7 +927,7 @@ class ClientApiGenerator(
val methodWithInputArgumentsBuilder =
MethodSpec
.methodBuilder(javaReservedKeywordSanitizer.sanitize(it.name))
.returns(ClassName.get(getPackageName(), javaType.build().name))
.returns(ClassName.get(getPackageName(), javaType.build().name()))
.addCode(
"""
|getFields().put("${it.name}", null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.f
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInterfaceExtensions
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findTypeExtensions
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
import com.squareup.javapoet.ClassName
import com.squareup.javapoet.FieldSpec
import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.TypeSpec
import com.palantir.javapoet.ClassName
import com.palantir.javapoet.FieldSpec
import com.palantir.javapoet.JavaFile
import com.palantir.javapoet.TypeSpec
import graphql.language.*
import javax.lang.model.element.Modifier

Expand All @@ -39,14 +39,38 @@ class ConstantsGenerator(
) {
private val javaReservedKeywordSanitizer = JavaReservedKeywordSanitizer()

class TypeSpecBuilderWrapper(
private val builder: TypeSpec.Builder,
) {
private val _fieldNames = mutableListOf<String>()
val fieldNames: List<String>
get() = _fieldNames

private val _typeNames = mutableListOf<String>()
val typeNames: List<String>
get() = _typeNames

fun addField(fieldSpec: FieldSpec) {
_fieldNames.add(fieldSpec.name())
builder.addField(fieldSpec)
}

fun addType(typeSpec: TypeSpec) {
_typeNames.add(typeSpec.name())
builder.addType(typeSpec)
}

fun build(): TypeSpec = builder.build()
}

fun generate(): CodeGenResult {
val javaType =
TypeSpec
.classBuilder("DgsConstants")
.addOptionalGeneratedAnnotation(config)
.addModifiers(Modifier.PUBLIC)

val types = mutableMapOf<String, TypeSpec.Builder>()
val types = mutableMapOf<String, TypeSpecBuilderWrapper>()

document.definitions
.filterIsInstance<ObjectTypeDefinition>()
Expand Down Expand Up @@ -193,9 +217,9 @@ class ConstantsGenerator(
}

private fun getOrCreateConstantsType(
types: MutableMap<String, TypeSpec.Builder>,
types: Map<String, TypeSpecBuilderWrapper>,
name: String,
): TypeSpec.Builder =
): TypeSpecBuilderWrapper =
if (types.contains(name)) {
types[name]!!
} else {
Expand All @@ -205,14 +229,17 @@ class ConstantsGenerator(
private fun createConstantTypeBuilder(
conf: CodeGenConfig,
name: String,
): TypeSpec.Builder {
): TypeSpecBuilderWrapper {
val className =
getConstantTypeName(conf, name)

return TypeSpec
.classBuilder(className)
.addOptionalGeneratedAnnotation(config)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
return TypeSpecBuilderWrapper(
builder =
TypeSpec
.classBuilder(className)
.addOptionalGeneratedAnnotation(config)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC),
)
}

private fun getConstantTypeName(
Expand All @@ -229,11 +256,11 @@ class ConstantsGenerator(
}

private fun addFieldNameConstant(
constantsType: TypeSpec.Builder,
constantsType: TypeSpecBuilderWrapper,
fieldName: String,
) {
val sanitizedFieldName = javaReservedKeywordSanitizer.sanitize(fieldName.capitalized())
if (!constantsType.fieldSpecs.any { it.name == sanitizedFieldName }) {
if (!constantsType.fieldNames.any { it == sanitizedFieldName }) {
constantsType.addField(
FieldSpec
.builder(
Expand All @@ -247,12 +274,12 @@ class ConstantsGenerator(
}

private fun addQueryInputArgument(
constantsType: TypeSpec.Builder,
constantsType: TypeSpecBuilderWrapper,
field: FieldDefinition,
) {
val inputFields = field.inputValueDefinitions
val name = getConstantTypeName(config, field.name + "_INPUT_ARGUMENT")
if (inputFields.isNotEmpty() && !constantsType.typeSpecs.any { it.name == name }) {
if (inputFields.isNotEmpty() && !constantsType.typeNames.any { it == name }) {
val inputConstantsType = createConstantTypeBuilder(config, name)
inputFields.forEach { inputField ->
addFieldNameConstant(inputConstantsType, inputField.name)
Expand Down
Loading
Loading