From 08cb9069283464feef351a0f4f9a5c4292f9abcd Mon Sep 17 00:00:00 2001 From: dermakov Date: Mon, 28 Jun 2021 18:37:56 +0300 Subject: [PATCH] Interface always has default projection __typename --- .../io/github/ermadmi78/kobby/generator/kotlin/entity.kt | 6 ++++-- .../io/github/ermadmi78/kobby/generator/kotlin/layout.kt | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/entity.kt b/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/entity.kt index 2ef9d2c1..45cb012b 100644 --- a/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/entity.kt +++ b/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/entity.kt @@ -146,7 +146,7 @@ private fun FileSpecBuilder.buildProjection(node: KobbyNode, layout: KotlinLayou } field.lambda?.also { buildParameter(it) { - if (!field.isOverride && field.type.hasDefaults) { + if (!field.isOverride && field.type.node.hasDefaults) { defaultValue("{}") } } @@ -215,7 +215,9 @@ private fun FileSpecBuilder.buildQualification(node: KobbyNode, layout: KotlinLa addKdoc(it) } buildParameter(entity.projection.projectionArgument, subObject.projectionLambda) { - defaultValue("{}") + if (subObject.hasDefaults) { + defaultValue("{}") + } } } } diff --git a/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/layout.kt b/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/layout.kt index ccbcf703..097def88 100644 --- a/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/layout.kt +++ b/kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/layout.kt @@ -170,10 +170,10 @@ data class KotlinLayout( else -> false } - internal val KobbyType.hasDefaults: Boolean - get() = when (node.kind) { - OBJECT, INTERFACE -> node.fields.values.any { it.isRequired || it.isDefault } - else -> true + internal val KobbyNode.hasDefaults: Boolean + get() = when (kind) { + OBJECT -> fields.values.any { it.isRequired || it.isDefault } + else -> true // unions and interfaces always has default projection __typename } internal val KobbyField.entityType: TypeName