Skip to content

Commit 43c649b

Browse files
authored
[client] add @generated annotation (ExpediaGroup#1251)
* [client] add auto @generated annotation Update client generation logic to automatically apply `@com.expediagroup.graphql.client.Generated` annotation to all auto-generated classes. This doesn't change any functionality but is a meta-information for JaCoCo to automatically exclude those classes from coverage reports. * update docs * unit tests * fix formatting
1 parent c1ab056 commit 43c649b

File tree

129 files changed

+679
-17
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+679
-17
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.expediagroup.graphql.client
2+
3+
/**
4+
* Annotation to automatically exclude auto-generated client code from JaCoCo reports.
5+
*
6+
* Starting with JaCoCo 8.3, classes and methods annotated with `@Generated` annotation that has RUNTIME retention will be excluded from
7+
* code coverage report. We are using custom annotation instead of `javax.annotation.Generated` or `javax.annotation.processing.Generated`
8+
* as their retention policy is just SOURCE.
9+
*/
10+
@Target(allowedTargets = [AnnotationTarget.CLASS])
11+
@Retention(value = AnnotationRetention.RUNTIME)
12+
annotation class Generated

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/GraphQLClientGenerator.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.exceptions.MultipleOperationsInFileException
2021
import com.expediagroup.graphql.plugin.client.generator.exceptions.SchemaUnavailableException
2122
import com.expediagroup.graphql.plugin.client.generator.types.generateGraphQLObjectTypeSpec
@@ -120,6 +121,7 @@ class GraphQLClientGenerator(
120121
val kotlinResultTypeName = ClassName(context.packageName, "${context.operationName}.${graphQLResponseTypeSpec.name}")
121122

122123
val operationTypeSpec = TypeSpec.classBuilder(capitalizedOperationName)
124+
.addAnnotation(Generated::class)
123125
.addSuperinterface(ClassName(CORE_TYPES_PACKAGE, "GraphQLClientRequest").parameterizedBy(kotlinResultTypeName))
124126

125127
var queryProperty: PropertySpec = PropertySpec.builder("query", STRING, KModifier.OVERRIDE)

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateGraphQLCustomScalarConverters.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.expediagroup.graphql.plugin.client.generator.ScalarConverterInfo
@@ -69,6 +70,7 @@ private fun generateGraphQLCustomScalarJacksonConverters(
6970
val serializeConverterName = "${customScalarName}ToAnyConverter"
7071
val serializerConverterTypeSpec = TypeSpec.classBuilder(serializeConverterName)
7172
.superclass(StdConverter::class.asTypeName().parameterizedBy(scalarClassName, ANY))
73+
.addAnnotation(Generated::class)
7274
.addProperty(converter)
7375
.addFunction(
7476
FunSpec.builder("convert")
@@ -83,6 +85,7 @@ private fun generateGraphQLCustomScalarJacksonConverters(
8385
val deserializeConverterName = "AnyTo${customScalarName}Converter"
8486
val deserializerConverterTypeSpec = TypeSpec.classBuilder(deserializeConverterName)
8587
.superclass(StdConverter::class.asTypeName().parameterizedBy(ANY, scalarClassName))
88+
.addAnnotation(Generated::class)
8689
.addProperty(converter)
8790
.addFunction(
8891
FunSpec.builder("convert")
@@ -110,6 +113,7 @@ private fun generateGraphQLCustomScalarKSerializer(
110113
val serializerName = "${customScalarName}Serializer"
111114
val serializerTypeSpec = TypeSpec.objectBuilder(serializerName)
112115
.addSuperinterface(KSerializer::class.asTypeName().parameterizedBy(scalarClassName))
116+
.addAnnotation(Generated::class)
113117

114118
val converter = PropertySpec.builder("converter", converterClassName)
115119
.initializer("%T()", converterClassName)

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateGraphQLEnumTypeSpec.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue
@@ -35,6 +36,7 @@ internal const val UNKNOWN_VALUE = "__UNKNOWN_VALUE"
3536
*/
3637
internal fun generateGraphQLEnumTypeSpec(context: GraphQLClientGeneratorContext, enumDefinition: EnumTypeDefinition): TypeSpec {
3738
val enumTypeSpecBuilder = TypeSpec.enumBuilder(enumDefinition.name)
39+
.addAnnotation(Generated::class)
3840
enumDefinition.description?.content?.let { kdoc ->
3941
enumTypeSpecBuilder.addKdoc("%L", kdoc)
4042
}

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateGraphQLInputObjectTypeSpec.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.squareup.kotlinpoet.ClassName
@@ -37,6 +38,7 @@ import kotlinx.serialization.Serializable
3738
internal fun generateGraphQLInputObjectTypeSpec(context: GraphQLClientGeneratorContext, inputObjectDefinition: InputObjectTypeDefinition): TypeSpec {
3839
val inputObjectTypeSpecBuilder = TypeSpec.classBuilder(inputObjectDefinition.name)
3940
.addModifiers(KModifier.DATA)
41+
.addAnnotation(Generated::class)
4042
inputObjectDefinition.description?.content?.let { kdoc ->
4143
inputObjectTypeSpecBuilder.addKdoc("%L", kdoc)
4244
}

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateGraphQLObjectTypeSpec.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.expediagroup.graphql.plugin.client.generator.exceptions.InvalidSelectionSetException
@@ -47,6 +48,7 @@ internal fun generateGraphQLObjectTypeSpec(
4748
val typeName = objectNameOverride ?: objectDefinition.name
4849
val objectTypeSpecBuilder = TypeSpec.classBuilder(typeName)
4950
.addModifiers(KModifier.DATA)
51+
.addAnnotation(Generated::class)
5052
objectDefinition.description?.content?.let { kdoc ->
5153
objectTypeSpecBuilder.addKdoc("%L", kdoc)
5254
}

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateInterfaceTypeSpec.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.expediagroup.graphql.plugin.client.generator.exceptions.InvalidFragmentException
@@ -63,10 +64,13 @@ internal fun generateInterfaceTypeSpec(
6364
val interfaceTypeSpec = if (context.serializer == GraphQLSerializer.KOTLINX) {
6465
TypeSpec.classBuilder(interfaceName)
6566
.addModifiers(KModifier.SEALED)
67+
.addAnnotation(Generated::class)
6668
.addAnnotation(Serializable::class)
6769
} else {
6870
TypeSpec.interfaceBuilder(interfaceName)
71+
.addAnnotation(Generated::class)
6972
}
73+
7074
if (kdoc != null) {
7175
interfaceTypeSpec.addKdoc("%L", kdoc)
7276
}
@@ -181,18 +185,14 @@ private fun updateImplementationTypeSpecWithSuperInformation(
181185
val commonPropertyNames = commonProperties.map { it.name }
182186
val implementationTypeSpec = context.typeSpecs[implementationClassName]!!
183187

184-
val builder = TypeSpec.classBuilder(implementationTypeSpec.name!!)
185-
.addModifiers(implementationTypeSpec.modifiers)
186-
.addKdoc("%L", implementationTypeSpec.kdoc)
187-
188+
val builder = implementationTypeSpec.toBuilder()
188189
val superClassName = ClassName("${context.packageName}.${context.operationName.lowercase()}", interfaceName)
189190
if (context.serializer == GraphQLSerializer.KOTLINX) {
190-
builder.addAnnotation(Serializable::class)
191-
.addAnnotation(
192-
AnnotationSpec.builder(SerialName::class)
193-
.addMember("value = %S", implementationName)
194-
.build()
195-
)
191+
builder.addAnnotation(
192+
AnnotationSpec.builder(SerialName::class)
193+
.addMember("value = %S", implementationName)
194+
.build()
195+
)
196196
.superclass(superClassName)
197197
} else {
198198
builder.addSuperinterface(superClassName)

plugins/client/graphql-kotlin-client-generator/src/main/kotlin/com/expediagroup/graphql/plugin/client/generator/types/generateVariableTypeSpec.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.expediagroup.graphql.plugin.client.generator.types
1818

19+
import com.expediagroup.graphql.client.Generated
1920
import com.expediagroup.graphql.plugin.client.generator.GraphQLClientGeneratorContext
2021
import com.expediagroup.graphql.plugin.client.generator.GraphQLSerializer
2122
import com.squareup.kotlinpoet.FunSpec
@@ -32,6 +33,7 @@ import kotlinx.serialization.Serializable
3233
internal fun generateVariableTypeSpec(context: GraphQLClientGeneratorContext, variableDefinitions: List<VariableDefinition>): TypeSpec? {
3334
val variableTypeSpec = TypeSpec.classBuilder("Variables")
3435
.addModifiers(KModifier.DATA)
36+
.addAnnotation(Generated::class)
3537
if (context.serializer == GraphQLSerializer.KOTLINX) {
3638
variableTypeSpec.addAnnotation(Serializable::class)
3739
}

plugins/client/graphql-kotlin-client-generator/src/test/data/generator/alias/AliasQuery.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.expediagroup.graphql.generated
22

3+
import com.expediagroup.graphql.client.Generated
34
import com.expediagroup.graphql.client.types.GraphQLClientRequest
45
import kotlin.Boolean
56
import kotlin.String
@@ -8,13 +9,15 @@ import kotlin.reflect.KClass
89
public const val ALIAS_QUERY: String =
910
"query AliasQuery {\n first: inputObjectQuery(criteria: { min: 1.0, max: 5.0 } )\n second: inputObjectQuery(criteria: { min: 5.0, max: 10.0 } )\n}"
1011

12+
@Generated
1113
public class AliasQuery : GraphQLClientRequest<AliasQuery.Result> {
1214
public override val query: String = ALIAS_QUERY
1315

1416
public override val operationName: String = "AliasQuery"
1517

1618
public override fun responseType(): KClass<AliasQuery.Result> = AliasQuery.Result::class
1719

20+
@Generated
1821
public data class Result(
1922
/**
2023
* Query that accepts some input arguments

plugins/client/graphql-kotlin-client-generator/src/test/data/generator/documentation/DocumentationQuery.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.expediagroup.graphql.generated
22

3+
import com.expediagroup.graphql.client.Generated
34
import com.expediagroup.graphql.client.types.GraphQLClientRequest
45
import com.expediagroup.graphql.generated.documentationquery.DocObject
56
import kotlin.String
@@ -8,6 +9,7 @@ import kotlin.reflect.KClass
89
public const val DOCUMENTATION_QUERY: String =
910
"query DocumentationQuery {\n docQuery {\n id\n }\n}"
1011

12+
@Generated
1113
public class DocumentationQuery : GraphQLClientRequest<DocumentationQuery.Result> {
1214
public override val query: String = DOCUMENTATION_QUERY
1315

@@ -16,6 +18,7 @@ public class DocumentationQuery : GraphQLClientRequest<DocumentationQuery.Result
1618
public override fun responseType(): KClass<DocumentationQuery.Result> =
1719
DocumentationQuery.Result::class
1820

21+
@Generated
1922
public data class Result(
2023
/**
2124
* Query to test doc strings

0 commit comments

Comments
 (0)