Skip to content

Commit

Permalink
[⚙️compiler] Add KDoc + remove hooks + API tweaks (#5591)
Browse files Browse the repository at this point in the history
* add a version of SchemaAndOperationsLayout that doesn't use a PackageNameGenerator

* rename topLevelName to className

* add a default implementation to OperationOutputGenerator.version

* update apiDump

* remove compiler hooks

* add KDoc

* update apiDump

* fix generateMethods KDoc
  • Loading branch information
martinbonnin committed Feb 5, 2024
1 parent 504eeb6 commit 69fda6f
Show file tree
Hide file tree
Showing 37 changed files with 420 additions and 493 deletions.
6 changes: 3 additions & 3 deletions docs/source/advanced/plugin-configuration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,9 @@ auto-generate `toString`, `equals` `hashCode`, `copy` and `componentN` for most
auto-generated methods, and/or you are worried about the size of the generated code, you can configure the Apollo compiler to generate none
or a subset of the data class methods. To do this, set `generateMethods` to a list of the methods you need. The available methods are:

- "equalsHashCode" generates `equals` and `hashCode` methods that will compare generated class properties
- "toString" generates a method that will print a pretty string representing the data in the class
- "copy" (Kotlin only) generates a method that will copy the class with named parameters for
- "equalsHashCode" generates `equals` and `hashCode` methods that will compare generated class properties.
- "toString" generates a method that will print a pretty string representing the data in the class.
- "copy" (Kotlin only) generates a method that will copy the class with named parameters and default values.
- "dataClass" (Kotlin only and redundant with all other methods) generates the class as a [data class](https://kotlinlang.org/docs/data-classes.html)
which will automatically generate `toString`, `copy`, `equals` and `hashCode`.

Expand Down
41 changes: 30 additions & 11 deletions libraries/apollo-compiler/api/apollo-compiler.api
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ public final class com/apollographql/apollo3/compiler/ApolloCompiler {
public final fun buildCodegenSchema (Ljava/util/List;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;)Lcom/apollographql/apollo3/compiler/CodegenSchema;
public final fun buildExecutableSchemaSources (Lcom/apollographql/apollo3/compiler/CodegenSchema;Lcom/apollographql/apollo3/compiler/CodegenMetadata;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildIrOperations (Lcom/apollographql/apollo3/compiler/CodegenSchema;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;)Lcom/apollographql/apollo3/compiler/ir/IrOperations;
public final fun buildSchemaAndOperationsSources (Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/LayoutFactory;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildSchemaAndOperationsSourcesFromIr (Lcom/apollographql/apollo3/compiler/CodegenSchema;Lcom/apollographql/apollo3/compiler/ir/IrOperations;Ljava/util/Map;Ljava/util/List;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/codegen/SchemaAndOperationsLayout;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Ljava/io/File;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildSchemaSources (Lcom/apollographql/apollo3/compiler/CodegenSchema;Ljava/util/Map;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/codegen/SchemaLayout;Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildSchemaAndOperationsSources (Ljava/util/List;Ljava/util/List;Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;Lcom/apollographql/apollo3/compiler/IrOptions;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/LayoutFactory;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/ApolloCompiler$Logger;Ljava/io/File;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildSchemaAndOperationsSourcesFromIr (Lcom/apollographql/apollo3/compiler/CodegenSchema;Lcom/apollographql/apollo3/compiler/ir/IrOperations;Ljava/util/Map;Ljava/util/List;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/codegen/SchemaAndOperationsLayout;Lcom/apollographql/apollo3/compiler/OperationOutputGenerator;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;Ljava/io/File;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
public final fun buildSchemaSources (Lcom/apollographql/apollo3/compiler/CodegenSchema;Ljava/util/Map;Lcom/apollographql/apollo3/compiler/CodegenOptions;Lcom/apollographql/apollo3/compiler/codegen/SchemaLayout;Lcom/apollographql/apollo3/compiler/Transform;Lcom/apollographql/apollo3/compiler/Transform;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
}

public abstract interface class com/apollographql/apollo3/compiler/ApolloCompiler$Logger {
Expand All @@ -24,6 +24,14 @@ public final class com/apollographql/apollo3/compiler/ApolloCompilerKt {
public static final fun toInputFiles (Ljava/util/Collection;)Ljava/util/List;
}

public final class com/apollographql/apollo3/compiler/CodegenMetadata {
public static final field Companion Lcom/apollographql/apollo3/compiler/CodegenMetadata$Companion;
public fun <init> (Lcom/apollographql/apollo3/compiler/TargetLanguage;Ljava/util/List;)V
public final fun getEntries ()Ljava/util/List;
public final fun getTargetLanguage ()Lcom/apollographql/apollo3/compiler/TargetLanguage;
public final fun plus (Lcom/apollographql/apollo3/compiler/CodegenMetadata;)Lcom/apollographql/apollo3/compiler/CodegenMetadata;
}

public final class com/apollographql/apollo3/compiler/CodegenMetadata$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lcom/apollographql/apollo3/compiler/CodegenMetadata$$serializer;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
Expand Down Expand Up @@ -300,7 +308,7 @@ public final class com/apollographql/apollo3/compiler/OperationIdGenerator$Sha25

public abstract interface class com/apollographql/apollo3/compiler/OperationOutputGenerator {
public abstract fun generate (Ljava/util/Collection;)Ljava/util/Map;
public abstract fun getVersion ()Ljava/lang/String;
public fun getVersion ()Ljava/lang/String;
}

public final class com/apollographql/apollo3/compiler/OperationOutputGenerator$Default : com/apollographql/apollo3/compiler/OperationOutputGenerator {
Expand Down Expand Up @@ -328,8 +336,6 @@ public final class com/apollographql/apollo3/compiler/OptionsKt {
public static final field MODELS_OPERATION_BASED Ljava/lang/String;
public static final field MODELS_OPERATION_BASED_WITH_INTERFACES Ljava/lang/String;
public static final field MODELS_RESPONSE_BASED Ljava/lang/String;
public static final field defaultDecapitalizeFields Z
public static final field defaultUseSemanticNaming Z
public static final fun buildCodegenOptions (Lcom/apollographql/apollo3/compiler/TargetLanguage;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/Boolean;Lcom/apollographql/apollo3/compiler/JavaNullable;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;)Lcom/apollographql/apollo3/compiler/CodegenOptions;
public static synthetic fun buildCodegenOptions$default (Lcom/apollographql/apollo3/compiler/TargetLanguage;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/Boolean;Lcom/apollographql/apollo3/compiler/JavaNullable;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/apollographql/apollo3/compiler/CodegenOptions;
public static final fun buildCodegenSchemaOptions (Ljava/util/Map;Ljava/lang/Boolean;)Lcom/apollographql/apollo3/compiler/CodegenSchemaOptions;
Expand All @@ -340,19 +346,17 @@ public final class com/apollographql/apollo3/compiler/OptionsKt {
}

public abstract interface class com/apollographql/apollo3/compiler/PackageNameGenerator {
public abstract fun getVersion ()Ljava/lang/String;
public fun getVersion ()Ljava/lang/String;
public abstract fun packageName (Ljava/lang/String;)Ljava/lang/String;
}

public final class com/apollographql/apollo3/compiler/PackageNameGenerator$Flat : com/apollographql/apollo3/compiler/PackageNameGenerator {
public fun <init> (Ljava/lang/String;)V
public fun getVersion ()Ljava/lang/String;
public fun packageName (Ljava/lang/String;)Ljava/lang/String;
}

public final class com/apollographql/apollo3/compiler/PackageNameGenerator$NormalizedPathAware : com/apollographql/apollo3/compiler/PackageNameGenerator {
public fun <init> (Ljava/lang/String;)V
public fun getVersion ()Ljava/lang/String;
public fun packageName (Ljava/lang/String;)Ljava/lang/String;
}

Expand Down Expand Up @@ -428,15 +432,15 @@ public final class com/apollographql/apollo3/compiler/VersionKt {
}

public abstract interface class com/apollographql/apollo3/compiler/codegen/CommonLayout {
public abstract fun className (Ljava/lang/String;)Ljava/lang/String;
public abstract fun propertyName (Ljava/lang/String;)Ljava/lang/String;
public abstract fun topLevelName (Ljava/lang/String;)Ljava/lang/String;
}

public abstract interface class com/apollographql/apollo3/compiler/codegen/ExecutableSchemaLayout : com/apollographql/apollo3/compiler/codegen/SchemaLayout {
}

public final class com/apollographql/apollo3/compiler/codegen/LayoutImplKt {
public static final fun SchemaAndOperationsLayout (Lcom/apollographql/apollo3/compiler/CodegenSchema;Lcom/apollographql/apollo3/compiler/PackageNameGenerator;ZZ)Lcom/apollographql/apollo3/compiler/codegen/SchemaAndOperationsLayout;
public static final fun SchemaAndOperationsLayout (Lcom/apollographql/apollo3/compiler/CodegenSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;)Lcom/apollographql/apollo3/compiler/codegen/SchemaAndOperationsLayout;
}

public abstract interface class com/apollographql/apollo3/compiler/codegen/OperationsLayout : com/apollographql/apollo3/compiler/codegen/CommonLayout {
Expand All @@ -445,6 +449,14 @@ public abstract interface class com/apollographql/apollo3/compiler/codegen/Opera
public abstract fun operationName (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
}

public final class com/apollographql/apollo3/compiler/codegen/ResolverClassName {
public static final field Companion Lcom/apollographql/apollo3/compiler/codegen/ResolverClassName$Companion;
public fun <init> (Ljava/lang/String;Ljava/util/List;)V
public fun <init> (Ljava/lang/String;[Ljava/lang/String;)V
public final fun getPackageName ()Ljava/lang/String;
public final fun getSimpleNames ()Ljava/util/List;
}

public final class com/apollographql/apollo3/compiler/codegen/ResolverClassName$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lcom/apollographql/apollo3/compiler/codegen/ResolverClassName$$serializer;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
Expand Down Expand Up @@ -537,6 +549,9 @@ public abstract interface class com/apollographql/apollo3/compiler/codegen/Schem
}

public abstract interface class com/apollographql/apollo3/compiler/codegen/SchemaLayout : com/apollographql/apollo3/compiler/codegen/CommonLayout {
public abstract fun assertionsName ()Ljava/lang/String;
public abstract fun paginationName ()Ljava/lang/String;
public abstract fun schemaName ()Ljava/lang/String;
public abstract fun schemaPackageName ()Ljava/lang/String;
public abstract fun schemaTypeName (Ljava/lang/String;)Ljava/lang/String;
}
Expand Down Expand Up @@ -603,6 +618,10 @@ public final class com/apollographql/apollo3/compiler/codegen/kotlin/KotlinOutpu
public static final fun toSourceOutput (Lcom/apollographql/apollo3/compiler/codegen/kotlin/KotlinOutput;)Lcom/apollographql/apollo3/compiler/codegen/SourceOutput;
}

public final class com/apollographql/apollo3/compiler/codegen/kotlin/helpers/Add_internalKt {
public static final fun addInternal (Lcom/squareup/kotlinpoet/FileSpec$Builder;Ljava/util/List;)Lcom/squareup/kotlinpoet/FileSpec$Builder;
}

public final class com/apollographql/apollo3/compiler/ir/IrCatchTo$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ import com.apollographql.apollo3.compiler.codegen.kotlin.KotlinCodegen
import com.apollographql.apollo3.compiler.codegen.kotlin.KotlinOutput
import com.apollographql.apollo3.compiler.codegen.kotlin.toSourceOutput
import com.apollographql.apollo3.compiler.codegen.plus
import com.apollographql.apollo3.compiler.hooks.ApolloCompilerJavaHooks
import com.apollographql.apollo3.compiler.hooks.ApolloCompilerKotlinHooks
import com.apollographql.apollo3.compiler.internal.addRequiredFields
import com.apollographql.apollo3.compiler.internal.checkApolloInlineFragmentsHaveTypeCondition
import com.apollographql.apollo3.compiler.internal.checkApolloReservedEnumValueNames
Expand Down Expand Up @@ -323,8 +321,6 @@ object ApolloCompiler {
usedCoordinates: UsedCoordinates?,
codegenOptions: CodegenOptions,
schemaLayout: SchemaLayout?,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>?,
compilerJavaHooks: List<ApolloCompilerJavaHooks>?,
javaOutputTransform: Transform<JavaOutput>?,
kotlinOutputTransform: Transform<KotlinOutput>?,
): SourceOutput {
Expand All @@ -333,11 +329,13 @@ object ApolloCompiler {
val targetLanguage = defaultTargetLanguage(codegenOptions.targetLanguage, emptyList())
codegenOptions.validate()

val layout = schemaLayout ?: LayoutImpl(
val layout = schemaLayout ?: SchemaAndOperationsLayout(
codegenSchema = codegenSchema,
packageNameGenerator = packageNameGenerator(codegenOptions.packageName, codegenOptions.rootPackageName),
useSemanticNaming = codegenOptions.useSemanticNaming ?: defaultUseSemanticNaming,
decapitalizeFields = codegenOptions.decapitalizeFields ?: defaultDecapitalizeFields
packageName = codegenOptions.packageName,
rootPackageName = codegenOptions.rootPackageName,
useSemanticNaming = codegenOptions.useSemanticNaming ,
decapitalizeFields = codegenOptions.decapitalizeFields,
generatedSchemaName = codegenOptions.generatedSchemaName,
)

return if (targetLanguage == TargetLanguage.JAVA) {
Expand All @@ -346,7 +344,6 @@ object ApolloCompiler {
irSchema = irSchema,
codegenOptions = codegenOptions,
layout = layout,
compilerJavaHooks = compilerJavaHooks ?: defaultCompilerJavaHooks,
javaOutputTransform = javaOutputTransform
).toSourceOutput()
} else {
Expand All @@ -356,7 +353,6 @@ object ApolloCompiler {
irSchema = irSchema,
codegenOptions = codegenOptions,
layout = layout,
compilerKotlinHooks = compilerKotlinHooks ?: defaultCompilerKotlinHooks,
kotlinOutputTransform = kotlinOutputTransform
).toSourceOutput()
}
Expand All @@ -370,8 +366,6 @@ object ApolloCompiler {
codegenOptions: CodegenOptions,
layout: SchemaAndOperationsLayout?,
operationOutputGenerator: OperationOutputGenerator?,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>?,
compilerJavaHooks: List<ApolloCompilerJavaHooks>?,
irOperationsTransform: Transform<IrOperations>?,
javaOutputTransform: Transform<JavaOutput>?,
kotlinOutputTransform: Transform<KotlinOutput>?,
Expand Down Expand Up @@ -414,11 +408,13 @@ object ApolloCompiler {


@Suppress("NAME_SHADOWING")
val layout = layout ?: LayoutImpl(
val layout = layout ?: SchemaAndOperationsLayout(
codegenSchema = codegenSchema,
packageNameGenerator = packageNameGenerator(codegenOptions.packageName, codegenOptions.rootPackageName),
useSemanticNaming = codegenOptions.useSemanticNaming ?: defaultUseSemanticNaming,
decapitalizeFields = codegenOptions.decapitalizeFields ?: defaultDecapitalizeFields
packageName = codegenOptions.packageName,
rootPackageName = codegenOptions.rootPackageName,
useSemanticNaming = codegenOptions.useSemanticNaming,
decapitalizeFields = codegenOptions.decapitalizeFields,
generatedSchemaName = codegenOptions.generatedSchemaName,
)

var sourceOutput: SourceOutput? = null
Expand All @@ -428,8 +424,6 @@ object ApolloCompiler {
usedCoordinates = downstreamUsedCoordinates?.mergeWith(irOperations.usedFields),
codegenOptions = codegenOptions,
schemaLayout = layout,
compilerKotlinHooks = compilerKotlinHooks,
compilerJavaHooks = compilerJavaHooks,
javaOutputTransform = javaOutputTransform,
kotlinOutputTransform = kotlinOutputTransform,
)
Expand All @@ -442,7 +436,6 @@ object ApolloCompiler {
upstreamCodegenMetadata = upstreamCodegenMetadata + listOfNotNull(sourceOutput?.codegenMetadata),
codegenOptions = codegenOptions,
layout = layout,
compilerJavaHooks = compilerJavaHooks,
javaOutputTransform = javaOutputTransform,
).toSourceOutput()
} else {
Expand All @@ -454,7 +447,6 @@ object ApolloCompiler {
upstreamCodegenMetadata = upstreamCodegenMetadata + listOfNotNull(sourceOutput?.codegenMetadata),
codegenOptions = codegenOptions,
layout = layout,
compilerKotlinHooks = compilerKotlinHooks,
kotlinOutputTransform = kotlinOutputTransform
).toSourceOutput()
}
Expand All @@ -473,8 +465,6 @@ object ApolloCompiler {
codegenOptions: CodegenOptions,
layoutFactory: LayoutFactory?,
operationOutputGenerator: OperationOutputGenerator?,
compilerJavaHooks: List<ApolloCompilerJavaHooks>?,
compilerKotlinHooks: List<ApolloCompilerKotlinHooks>?,
irOperationsTransform: Transform<IrOperations>?,
javaOutputTransform: Transform<JavaOutput>?,
kotlinOutputTransform: Transform<KotlinOutput>?,
Expand Down Expand Up @@ -503,8 +493,6 @@ object ApolloCompiler {
upstreamCodegenMetadata = emptyList(),
codegenOptions = codegenOptions,
layout = layoutFactory?.create(codegenSchema),
compilerJavaHooks = compilerJavaHooks,
compilerKotlinHooks = compilerKotlinHooks,
irOperationsTransform = irOperationsTransform,
javaOutputTransform = javaOutputTransform,
kotlinOutputTransform = kotlinOutputTransform,
Expand All @@ -523,11 +511,13 @@ object ApolloCompiler {
serviceName: String,
): SourceOutput {
val layout = LayoutImpl(
codegenSchema,
PackageNameGenerator.Flat(packageName),
false,
false
codegenSchema = codegenSchema,
packageNameGenerator = PackageNameGenerator.Flat(packageName),
useSemanticNaming = null,
decapitalizeFields = null,
generatedSchemaName = null,
)

return KotlinCodegen.buildExecutableSchema(
codegenSchema = codegenSchema,
codegenMetadata = codegenMetadata,
Expand Down

0 comments on commit 69fda6f

Please sign in to comment.