Skip to content

Commit

Permalink
[compiler] Remove old generateAsInternal code (#5526)
Browse files Browse the repository at this point in the history
* remove hooks chains

* use hooks to implement generateAsInternal

* fix CodegenTest
  • Loading branch information
martinbonnin committed Jan 12, 2024
1 parent c7b0695 commit 647d1be
Show file tree
Hide file tree
Showing 15 changed files with 83 additions and 154 deletions.
12 changes: 6 additions & 6 deletions libraries/apollo-compiler/api/apollo-compiler.api
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ public final class com/apollographql/apollo3/compiler/AdapterInitializer$Compani

public final class com/apollographql/apollo3/compiler/ApolloCompiler {
public static final field INSTANCE Lcom/apollographql/apollo3/compiler/ApolloCompiler;
public final fun build (Ljava/util/Set;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public final fun build (Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Ljava/io/File;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public static synthetic fun build$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/util/Set;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public static synthetic fun build$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Ljava/io/File;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public final fun build (Ljava/util/Set;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public final fun build (Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Ljava/io/File;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public static synthetic fun build$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/util/Set;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public static synthetic fun build$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Ljava/io/File;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public final fun buildCodegenSchema (Ljava/util/Set;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Ljava/io/File;Ljava/io/File;)V
public static synthetic fun buildCodegenSchema$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public final fun buildIrOperations (Ljava/io/File;Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;)V
public static synthetic fun buildIrOperations$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/io/File;Ljava/util/Set;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;ILjava/lang/Object;)V
public final fun buildIrSchema (Ljava/io/File;Ljava/util/Set;Ljava/io/File;)V
public final fun buildSchemaAndOperationSources (Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public static synthetic fun buildSchemaAndOperationSources$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerKotlinHooks;Lcom/apollographql/apollo3/compiler/hooks/ApolloCompilerJavaHooks;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public final fun buildSchemaAndOperationSources (Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
public static synthetic fun buildSchemaAndOperationSources$default (Lcom/apollographql/apollo3/compiler/ApolloCompiler;Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/util/Set;Ljava/io/File;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/Object;)V
public final fun resolverFileSpecs (Lcom/apollographql/apollo3/compiler/CodegenSchema;Lcom/apollographql/apollo3/compiler/CodegenMetadata;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
public final fun schemaFileSpecs (Lcom/apollographql/apollo3/compiler/CodegenSchema;Ljava/lang/String;)Lkotlin/Pair;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -360,8 +360,8 @@ object ApolloCompiler {
codegenOptionsFile: File,
packageNameGenerator: PackageNameGenerator? = null,
packageNameRoots: Set<String>? = null,
compilerKotlinHooks: ApolloCompilerKotlinHooks? = null,
compilerJavaHooks: ApolloCompilerJavaHooks? = null,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>? = null,
compilerJavaHooks: List<ApolloCompilerJavaHooks>? = null,
sourcesDir: File,
operationManifestFile: File? = null,
codegenMetadataFile: File? = null,
Expand Down Expand Up @@ -392,8 +392,8 @@ object ApolloCompiler {
packageNameGenerator: PackageNameGenerator? = null,
packageNameRoots: Set<String>? = null,
operationOutputGenerator: OperationOutputGenerator? = null,
compilerKotlinHooks: ApolloCompilerKotlinHooks? = null,
compilerJavaHooks: ApolloCompilerJavaHooks? = null,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>? = null,
compilerJavaHooks: List<ApolloCompilerJavaHooks>? = null,
outputDir: File,
operationManifestFile: File? = null,
codegenMetadataFile: File? = null,
Expand Down Expand Up @@ -517,8 +517,8 @@ object ApolloCompiler {
packageNameGenerator: PackageNameGenerator? = null,
packageNameRoots: Set<String>? = null,
operationOutputGenerator: OperationOutputGenerator? = null,
compilerJavaHooks: ApolloCompilerJavaHooks? = null,
compilerKotlinHooks: ApolloCompilerKotlinHooks? = null,
compilerJavaHooks: List<ApolloCompilerJavaHooks>? = null,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>? = null,
logger: Logger = defaultLogger,
outputDir: File,
operationManifestFile: File? = null,
Expand Down Expand Up @@ -554,8 +554,8 @@ object ApolloCompiler {
packageNameGenerator: PackageNameGenerator? = null,
packageNameRoots: Set<String>? = null,
operationOutputGenerator: OperationOutputGenerator? = null,
compilerJavaHooks: ApolloCompilerJavaHooks? = null,
compilerKotlinHooks: ApolloCompilerKotlinHooks? = null,
compilerJavaHooks: List<ApolloCompilerJavaHooks>? = null,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>? = null,
logger: Logger = defaultLogger,
outputDir: File,
operationManifestFile: File? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.apollographql.apollo3.compiler
import com.apollographql.apollo3.annotations.ApolloExperimental
import com.apollographql.apollo3.compiler.hooks.ApolloCompilerJavaHooks
import com.apollographql.apollo3.compiler.hooks.ApolloCompilerKotlinHooks
import com.apollographql.apollo3.compiler.hooks.internal.AddInternalCompilerHooks
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

Expand Down Expand Up @@ -398,8 +399,8 @@ internal const val defaultJsExport = false
internal const val defaultGenerateInputBuilders = false
internal val defaultNullableFieldStyle = JavaNullable.NONE
internal const val defaultDecapitalizeFields = false
internal val defaultCompilerKotlinHooks = ApolloCompilerKotlinHooks.Identity
internal val defaultCompilerJavaHooks = ApolloCompilerJavaHooks.Identity
internal val defaultCompilerKotlinHooks = emptyList<ApolloCompilerKotlinHooks>()
internal val defaultCompilerJavaHooks = emptyList<ApolloCompilerJavaHooks>()
internal val defaultOperationManifestFormat = MANIFEST_NONE

internal fun codegenModels(codegenModels: String?, targetLanguage: TargetLanguage): String {
Expand Down Expand Up @@ -445,4 +446,17 @@ internal fun flattenModels(codegenModels: String): Boolean {
MODELS_RESPONSE_BASED -> false
else -> true
}
}

internal fun compilerKotlinHooks(compilerKotlinHooks: List<ApolloCompilerKotlinHooks>?, generateAsInternal: Boolean): List<ApolloCompilerKotlinHooks> {
return buildList {
addAll(compilerKotlinHooks.orEmpty())
if (generateAsInternal) {
add(AddInternalCompilerHooks(".*"))
}
}
}

internal fun compilerJavaHooks(compilerKotlinHooks: List<ApolloCompilerJavaHooks>?): List<ApolloCompilerJavaHooks> {
return compilerKotlinHooks.orEmpty()
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import com.apollographql.apollo3.compiler.codegen.java.file.UnionBuilderBuilder
import com.apollographql.apollo3.compiler.codegen.java.file.UnionMapBuilder
import com.apollographql.apollo3.compiler.codegen.java.file.UnionUnknownMapBuilder
import com.apollographql.apollo3.compiler.codegen.java.file.UtilAssertionsBuilder
import com.apollographql.apollo3.compiler.compilerJavaHooks
import com.apollographql.apollo3.compiler.defaultClassesForEnumsMatching
import com.apollographql.apollo3.compiler.defaultGenerateFragmentImplementations
import com.apollographql.apollo3.compiler.defaultGenerateModelBuilders
Expand Down Expand Up @@ -75,7 +76,7 @@ internal object JavaCodeGen {
commonCodegenOptions: CommonCodegenOptions,
javaCodegenOptions: JavaCodegenOptions,
packageNameGenerator: PackageNameGenerator,
compilerJavaHooks: ApolloCompilerJavaHooks,
compilerJavaHooks: List<ApolloCompilerJavaHooks>,
outputDir: File,
codegenMetadataFile: File?,
) {
Expand Down Expand Up @@ -111,6 +112,8 @@ internal object JavaCodeGen {

val scalarMapping = codegenSchema.scalarMapping
val schemaPackageName = codegenSchema.packageName
@Suppress("NAME_SHADOWING")
val compilerJavaHooks = compilerJavaHooks(compilerJavaHooks)

val upstreamResolver = resolverInfos.fold(null as JavaResolver?) { acc, resolverInfo ->
JavaResolver(
Expand Down Expand Up @@ -270,7 +273,11 @@ internal object JavaCodeGen {
.build()
ApolloCompilerJavaHooks.FileInfo(javaFile = javaFile)
}
.let { compilerJavaHooks.postProcessFiles(it) }
.let {
compilerJavaHooks.fold(it as Collection<ApolloCompilerJavaHooks.FileInfo>) { acc, hooks ->
hooks.postProcessFiles(acc)
}
}

// Write the files to disk
fileInfos.forEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ internal class JavaResolver(
private val scalarMapping: Map<String, ScalarInfo>,
private val generatePrimitiveTypes: Boolean,
private val nullableFieldStyle: JavaNullable,
private val hooks: ApolloCompilerJavaHooks,
private val hooks: List<ApolloCompilerJavaHooks>,
) {

private val optionalClassName: ClassName = when (nullableFieldStyle) {
Expand Down Expand Up @@ -86,8 +86,9 @@ internal class JavaResolver(
else -> null
}


fun resolve(key: ResolverKey): ClassName? = hooks.overrideResolvedType(key, classNames[key] ?: next?.resolve(key))
fun resolve(key: ResolverKey): ClassName? = hooks.fold(classNames[key] ?: next?.resolve(key)) { acc, hooks ->
hooks.overrideResolvedType(key, acc)
}

private var classNames = entries.associateBy(
keySelector = { it.key },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import com.apollographql.apollo3.compiler.codegen.kotlin.file.PaginationBuilder
import com.apollographql.apollo3.compiler.codegen.kotlin.file.ScalarBuilder
import com.apollographql.apollo3.compiler.codegen.kotlin.file.SchemaBuilder
import com.apollographql.apollo3.compiler.codegen.kotlin.file.UnionBuilder
import com.apollographql.apollo3.compiler.compilerKotlinHooks
import com.apollographql.apollo3.compiler.defaultAddJvmOverloads
import com.apollographql.apollo3.compiler.defaultGenerateAsInternal
import com.apollographql.apollo3.compiler.defaultGenerateFilterNotNull
Expand All @@ -62,10 +63,6 @@ import com.apollographql.apollo3.compiler.operationoutput.OperationOutput
import com.apollographql.apollo3.compiler.operationoutput.findOperationId
import com.apollographql.apollo3.compiler.writeTo
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import java.io.File

internal object KotlinCodeGen {
Expand Down Expand Up @@ -120,8 +117,7 @@ internal object KotlinCodeGen {

private fun buildFileSpecs(
builders: List<CgFileBuilder>,
generateAsInternal: Boolean,
hooks: ApolloCompilerKotlinHooks,
hooks: List<ApolloCompilerKotlinHooks>,
): List<FileSpec> {
/**
* 1st pass: call prepare on all builders
Expand All @@ -147,21 +143,25 @@ internal object KotlinCodeGen {
""".trimIndent()
)

cgFile.typeSpecs.map { typeSpec -> typeSpec.internal(generateAsInternal) }.forEach { typeSpec ->
cgFile.typeSpecs.forEach { typeSpec ->
builder.addType(typeSpec)
}
cgFile.funSpecs.map { funSpec -> funSpec.internal(generateAsInternal) }.forEach { funSpec ->
cgFile.funSpecs.forEach { funSpec ->
builder.addFunction(funSpec)
}
cgFile.propertySpecs.map { propertySpec -> propertySpec.internal(generateAsInternal) }.forEach { propertySpec ->
cgFile.propertySpecs.forEach { propertySpec ->
builder.addProperty(propertySpec)
}
cgFile.imports.forEach {
builder.addAliasedImport(it.className, it.alias)
}
ApolloCompilerKotlinHooks.FileInfo(fileSpec = builder.build())
}
.let { hooks.postProcessFiles(it) }
.let {
hooks.fold(it as Collection<ApolloCompilerKotlinHooks.FileInfo>) { acc, hooks ->
hooks.postProcessFiles(acc)
}
}

// Write the files to disk
return fileInfos.map { it.fileSpec }
Expand All @@ -176,7 +176,7 @@ internal object KotlinCodeGen {
commonCodegenOptions: CommonCodegenOptions,
kotlinCodegenOptions: KotlinCodegenOptions,
packageNameGenerator: PackageNameGenerator,
compilerKotlinHooks: ApolloCompilerKotlinHooks,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>,
outputDir: File,
codegenMetadataFile: File?,
) {
Expand Down Expand Up @@ -208,6 +208,8 @@ internal object KotlinCodeGen {
val targetLanguageVersion = codegenSchema.targetLanguage
val scalarMapping = codegenSchema.scalarMapping
val schemaPackageName = codegenSchema.packageName
@Suppress("NAME_SHADOWING")
val compilerKotlinHooks = compilerKotlinHooks(compilerKotlinHooks, generateAsInternal)

val upstreamResolver = resolverInfos.fold(null as KotlinResolver?) { acc, resolverInfo ->
KotlinResolver(resolverInfo.entries, acc, scalarMapping, requiresOptInAnnotation, compilerKotlinHooks)
Expand Down Expand Up @@ -309,7 +311,8 @@ internal object KotlinCodeGen {
)
}

buildFileSpecs(builders, generateAsInternal, compilerKotlinHooks).forEach {

buildFileSpecs(builders, compilerKotlinHooks).forEach {
it.writeTo(outputDir)
}

Expand All @@ -326,30 +329,6 @@ internal object KotlinCodeGen {
}
}

private fun TypeSpec.internal(generateAsInternal: Boolean): TypeSpec {
return if (generateAsInternal) {
this.toBuilder().addModifiers(KModifier.INTERNAL).build()
} else {
this
}
}

private fun FunSpec.internal(generateAsInternal: Boolean): FunSpec {
return if (generateAsInternal) {
this.toBuilder().addModifiers(KModifier.INTERNAL).build()
} else {
this
}
}

private fun PropertySpec.internal(generateAsInternal: Boolean): PropertySpec {
return if (generateAsInternal) {
this.toBuilder().addModifiers(KModifier.INTERNAL).build()
} else {
this
}
}

fun schemaFileSpecs(
codegenSchema: CodegenSchema,
packageName: String,
Expand All @@ -371,7 +350,7 @@ internal object KotlinCodeGen {
next = null,
scalarMapping = codegenSchema.scalarMapping,
requiresOptInAnnotation = null,
hooks = ApolloCompilerKotlinHooks.Identity
hooks = emptyList()
),
targetLanguageVersion = TargetLanguage.KOTLIN_1_9,
)
Expand All @@ -398,7 +377,7 @@ internal object KotlinCodeGen {
builders.add(InputObjectAdapterBuilder(context, irInputObject))
}

val fileSpecs = buildFileSpecs(builders, true, ApolloCompilerKotlinHooks.Identity)
val fileSpecs = buildFileSpecs(builders, compilerKotlinHooks(null, true))
return CodegenMetadata(ResolverInfo(
magic = "KotlinCodegen",
version = APOLLO_VERSION,
Expand Down Expand Up @@ -426,7 +405,7 @@ internal object KotlinCodeGen {
next = null,
scalarMapping = codegenSchema.scalarMapping,
requiresOptInAnnotation = null,
hooks = ApolloCompilerKotlinHooks.Identity
hooks = emptyList()
)
val context = KotlinContext(
generateMethods = emptyList(),
Expand All @@ -437,7 +416,7 @@ internal object KotlinCodeGen {
next = upstreamResolver,
scalarMapping = codegenSchema.scalarMapping,
requiresOptInAnnotation = null,
hooks = ApolloCompilerKotlinHooks.Identity
hooks = emptyList()
),
targetLanguageVersion = TargetLanguage.KOTLIN_1_9,
)
Expand Down Expand Up @@ -468,7 +447,7 @@ internal object KotlinCodeGen {
)
)

return buildFileSpecs(builders, true, ApolloCompilerKotlinHooks.Identity)
return buildFileSpecs(builders, compilerKotlinHooks(null, true))
}
}

0 comments on commit 647d1be

Please sign in to comment.