From dfaf26f7e8bbea614e767a248cdc5d224c345201 Mon Sep 17 00:00:00 2001 From: Martin Bonnin Date: Tue, 6 Feb 2024 13:38:59 +0100 Subject: [PATCH] Fix a regression in alwaysGenerateTypesMatching --- .../internal/ApolloGenerateOptionsTask.kt | 30 ++----------------- .../gradle/internal/DefaultApolloExtension.kt | 4 +-- .../apollo3/gradle/internal/defaults.kt | 23 ++++++++++++++ 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ApolloGenerateOptionsTask.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ApolloGenerateOptionsTask.kt index 1f0c7ee64ce..7d59d3a3621 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ApolloGenerateOptionsTask.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/ApolloGenerateOptionsTask.kt @@ -205,10 +205,7 @@ abstract class ApolloGenerateOptionsTask : DefaultTask() { abstract var isKmp: Boolean @get:Input - abstract var isMultiModule: Boolean - - @get:Input - abstract var hasDownstreamDependencies: Boolean + abstract var generateAllTypes: Boolean @get:Internal var hasPackageNameGenerator: Boolean = false @@ -235,7 +232,7 @@ abstract class ApolloGenerateOptionsTask : DefaultTask() { val upstreamTargetLanguage = upstreamOtherOptions?.targetLanguage val targetLanguage = targetLanguage(generateKotlinModels.orNull, languageVersion.orNull, isJavaPluginApplied, kgpVersion, upstreamTargetLanguage) val generateFilterNotNull = generateFilterNotNull(targetLanguage, isKmp) - val alwaysGenerateTypesMatching = alwaysGenerateTypesMatching(alwaysGenerateTypesMatching.orNull, isMultiModule, hasDownstreamDependencies) + val alwaysGenerateTypesMatching = alwaysGenerateTypesMatching(alwaysGenerateTypesMatching.orNull, generateAllTypes) val upstreamCodegenModels = upstreamOtherOptions?.codegenModels val codegenModels = codegenModels(codegenModels.orNull, upstreamCodegenModels) @@ -365,29 +362,6 @@ private fun scalarMapping( } } -private fun generateFilterNotNull(targetLanguage: TargetLanguage, isKmp: Boolean): Boolean? { - return if (targetLanguage == TargetLanguage.JAVA) { - null - } else { - isKmp - } -} - -private fun alwaysGenerateTypesMatching(alwaysGenerateTypesMatching: Set?, isMultiModule: Boolean, hasDownstreamDependencies: Boolean): Set { - if (alwaysGenerateTypesMatching != null) { - // The user specified something, use this - return alwaysGenerateTypesMatching - } - - if (isMultiModule && !hasDownstreamDependencies) { - // No downstream dependency, generate everything because we don't know what types are going to be used downstream - return setOf(".*") - } else { - // get the used coordinates from the downstream dependencies - return emptySet() - } -} - @Serializable internal class OtherOptions( val targetLanguage: TargetLanguage, diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt index e358eeca9b2..a8772b12412 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/DefaultApolloExtension.kt @@ -712,8 +712,8 @@ abstract class DefaultApolloExtension( task.isJavaPluginApplied = project.hasJavaPlugin() task.kgpVersion = project.apolloGetKotlinPluginVersion() task.isKmp = project.isKotlinMultiplatform - task.isMultiModule = service.isMultiModule() - task.hasDownstreamDependencies = service.downstreamDependencies.isNotEmpty() + // If there is no downstream dependency, generate everything because we don't know what types are going to be used downstream + task.generateAllTypes = service.isSchemaModule() && service.isMultiModule() && service.downstreamDependencies.isEmpty() task.otherOptions.set(BuildDirLayout.otherOptions(project, service)) diff --git a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/defaults.kt b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/defaults.kt index 51c78704cd0..f7c88b6ea87 100644 --- a/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/defaults.kt +++ b/libraries/apollo-gradle-plugin-external/src/main/kotlin/com/apollographql/apollo3/gradle/internal/defaults.kt @@ -8,6 +8,7 @@ import com.apollographql.apollo3.compiler.MANIFEST_PERSISTED_QUERY import com.apollographql.apollo3.compiler.OperationIdGenerator import com.apollographql.apollo3.compiler.OperationOutputGenerator import com.apollographql.apollo3.compiler.Plugin +import com.apollographql.apollo3.compiler.TargetLanguage import com.apollographql.apollo3.compiler.operationoutput.OperationDescriptor import com.apollographql.apollo3.compiler.operationoutput.OperationId import com.apollographql.apollo3.compiler.operationoutput.OperationOutput @@ -100,4 +101,26 @@ internal fun Plugin.toOperationOutputGenerator(): OperationOutputGenerator { } } } +} + +internal fun generateFilterNotNull(targetLanguage: TargetLanguage, isKmp: Boolean): Boolean? { + return if (targetLanguage == TargetLanguage.JAVA) { + null + } else { + isKmp + } +} + +internal fun alwaysGenerateTypesMatching(alwaysGenerateTypesMatching: Set?, generateAllTypes: Boolean): Set { + if (alwaysGenerateTypesMatching != null) { + // The user specified something, use this + return alwaysGenerateTypesMatching + } + + if (generateAllTypes) { + return setOf(".*") + } else { + // get the used coordinates from the downstream dependencies + return emptySet() + } } \ No newline at end of file