Skip to content

Commit c02121c

Browse files
bcorsoDagger Team
authored andcommitted
Add support for converting XAnnotation to XAnnotationSpec via KotlinPoet.
The `XAnnotationSpecs.of(XAnnotation)` method now correctly translates annotation values when creating the KotlinPoet AnnotationSpec. This is done using the [`kotlinpoet-ksp`](https://mvnrepository.com/artifact/com.squareup/kotlinpoet-ksp) interop library. RELNOTES=N/A PiperOrigin-RevId: 859269193
1 parent d060e95 commit c02121c

6 files changed

Lines changed: 85 additions & 40 deletions

File tree

MODULE.bazel

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ INCAP_VERSION = "0.2"
5050

5151
KOTLIN_VERSION = "2.2.20"
5252

53+
KOTLINPOET_VERSION = "2.2.0"
54+
5355
KSP_VERSION = KOTLIN_VERSION + "-2.0.3"
5456

5557
MAVEN_VERSION = "3.3.3"
@@ -141,8 +143,9 @@ maven.install(
141143
"com.google.guava:guava-beta-checker:1.0",
142144
"com.google.protobuf:protobuf-java:4.29.3",
143145
"com.squareup:javapoet:1.13.0",
144-
"com.squareup:kotlinpoet:1.11.0",
145-
"com.squareup:kotlinpoet-javapoet:1.11.0",
146+
"com.squareup:kotlinpoet-javapoet:%s" % KOTLINPOET_VERSION,
147+
"com.squareup:kotlinpoet-jvm:%s" % KOTLINPOET_VERSION,
148+
"com.squareup:kotlinpoet-ksp:%s" % KOTLINPOET_VERSION,
146149
"io.github.java-diff-utils:java-diff-utils:4.11",
147150
"io.grpc:grpc-context:%s" % GRPC_VERSION,
148151
"io.grpc:grpc-core:%s" % GRPC_VERSION,

dagger-compiler/BUILD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ gen_maven_artifact(
6363
"com.google.guava:failureaccess",
6464
"com.google.guava:guava",
6565
"com.squareup:javapoet",
66-
"com.squareup:kotlinpoet",
66+
"com.squareup:kotlinpoet-jvm",
67+
"com.squareup:kotlinpoet-ksp",
6768
"javax.inject:javax.inject",
6869
"net.ltgt.gradle.incap:incap",
6970
"org.checkerframework:checker-compat-qual",

dagger-compiler/main/java/dagger/internal/codegen/xprocessing/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ java_library(
4545
"//third_party/java/guava/collect",
4646
"//third_party/java/javapoet",
4747
"//third_party/kotlin/kotlinpoet",
48+
"//third_party/kotlin/kotlinpoet:interop-ksp",
4849
],
4950
)
5051

dagger-compiler/main/java/dagger/internal/codegen/xprocessing/XAnnotationSpecs.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import static androidx.room3.compiler.codegen.compat.XConverters.toJavaPoet;
2020
import static androidx.room3.compiler.codegen.compat.XConverters.toKotlinPoet;
2121
import static androidx.room3.compiler.codegen.compat.XConverters.toXPoet;
22+
import static androidx.room3.compiler.processing.compat.XConverters.getProcessingEnv;
23+
import static androidx.room3.compiler.processing.compat.XConverters.toJavac;
24+
import static androidx.room3.compiler.processing.compat.XConverters.toKS;
2225
import static com.google.common.base.Preconditions.checkArgument;
2326
import static com.google.common.base.Preconditions.checkState;
2427

@@ -28,31 +31,47 @@
2831
import androidx.room3.compiler.codegen.XTypeName;
2932
import androidx.room3.compiler.processing.JavaPoetExtKt;
3033
import androidx.room3.compiler.processing.XAnnotation;
34+
import androidx.room3.compiler.processing.XProcessingEnv;
3135
import com.google.common.collect.ImmutableSet;
3236
import com.google.common.collect.LinkedListMultimap;
3337
import com.google.common.collect.ListMultimap;
3438
import com.google.common.collect.Lists;
3539
import com.google.errorprone.annotations.CanIgnoreReturnValue;
3640
import com.squareup.javapoet.AnnotationSpec;
41+
import com.squareup.kotlinpoet.ksp.AnnotationsKt;
3742
import java.util.HashSet;
3843
import java.util.List;
3944
import java.util.Optional;
4045
import java.util.Set;
4146

4247
/** Static factories to create {@link AnnotationSpec}s. */
4348
public final class XAnnotationSpecs {
49+
public static XAnnotationSpec of(XClassName className) {
50+
return builder(className).build();
51+
}
52+
4453
public static XAnnotationSpec of(XAnnotation annotation) {
54+
return of(annotation, /* includeDefaultValues= */ false);
55+
}
56+
57+
public static XAnnotationSpec of(XAnnotation annotation, boolean includeDefaultValues) {
4558
return toXPoet(
46-
JavaPoetExtKt.toAnnotationSpec(annotation, /* includeDefaultValues= */ false),
47-
// TODO(b/411661393): Add support for annotation values. For now, the KotlinPoet
48-
// implementation only copies the class name and ignores the annotation values.
49-
com.squareup.kotlinpoet.AnnotationSpec
50-
.builder(toKotlinPoet(XAnnotations.asClassName(annotation)))
51-
.build());
59+
JavaPoetExtKt.toAnnotationSpec(annotation, includeDefaultValues),
60+
toKAnnotationSpec(annotation, includeDefaultValues));
5261
}
5362

54-
public static XAnnotationSpec of(XClassName className) {
55-
return builder(className).build();
63+
@SuppressWarnings("StatementSwitchToExpressionSwitch") // Dagger targets Java 8 source.
64+
private static com.squareup.kotlinpoet.AnnotationSpec toKAnnotationSpec(
65+
XAnnotation annotation, boolean includeDefaultValues) {
66+
XProcessingEnv processingEnv = getProcessingEnv(annotation);
67+
switch (processingEnv.getBackend()) {
68+
case JAVAC:
69+
return com.squareup.kotlinpoet.AnnotationSpec.Companion.get(toJavac(annotation));
70+
case KSP:
71+
return AnnotationsKt.toAnnotationSpec(
72+
toKS(annotation), /* omitDefaultValues= */ !includeDefaultValues);
73+
}
74+
throw new AssertionError("Unsupported backend: " + processingEnv.getBackend());
5675
}
5776

5877
/** Values for an {@link SuppressWarnings} annotation. */

maven_install.json

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
3-
"__INPUT_ARTIFACTS_HASH": -439239509,
4-
"__RESOLVED_ARTIFACTS_HASH": -536649459,
3+
"__INPUT_ARTIFACTS_HASH": 1202390130,
4+
"__RESOLVED_ARTIFACTS_HASH": -334589348,
55
"conflict_resolution": {
66
"androidx.test:monitor:1.4.0": "androidx.test:monitor:1.8.0",
77
"com.google.auto.value:auto-value-annotations:1.9": "com.google.auto.value:auto-value-annotations:1.11.0",
@@ -739,17 +739,23 @@
739739
},
740740
"version": "1.13.0"
741741
},
742-
"com.squareup:kotlinpoet": {
742+
"com.squareup:kotlinpoet-javapoet": {
743743
"shasums": {
744-
"jar": "2887ada1ca03dd83baa2758640d87e840d1907564db0ef88d2289c868a980492"
744+
"jar": "228dd31de97447209f1cc03d648117fbc4f7c39aa2ffab34f12b474921026fb0"
745745
},
746-
"version": "1.11.0"
746+
"version": "2.2.0"
747747
},
748-
"com.squareup:kotlinpoet-javapoet": {
748+
"com.squareup:kotlinpoet-jvm": {
749749
"shasums": {
750-
"jar": "519cd84fa11bb01e6b305de4369d5244b128091823872471601b103044e1c41e"
750+
"jar": "87ba83576e2bbda929e2d4d83035eaf7984b9adc0798837b8e8d1eb4953a17da"
751751
},
752-
"version": "1.11.0"
752+
"version": "2.2.0"
753+
},
754+
"com.squareup:kotlinpoet-ksp": {
755+
"shasums": {
756+
"jar": "368e7a7c25908c39fd3178e2177789c3d83fbf75092914c76cb67b640dbc5434"
757+
},
758+
"version": "2.2.0"
753759
},
754760
"com.sun.activation:javax.activation": {
755761
"shasums": {
@@ -1191,9 +1197,9 @@
11911197
},
11921198
"org.jetbrains.kotlin:kotlin-reflect": {
11931199
"shasums": {
1194-
"jar": "3277ac102ae17aad10a55abec75ff5696c8d109790396434b496e75087854203"
1200+
"jar": "bcd75a36ca4ad8e06117214ed807f8dea2fe61a71e07f91ca14f4335024b8463"
11951201
},
1196-
"version": "1.6.10"
1202+
"version": "2.1.21"
11971203
},
11981204
"org.jetbrains.kotlin:kotlin-script-runtime": {
11991205
"shasums": {
@@ -1215,15 +1221,15 @@
12151221
},
12161222
"org.jetbrains.kotlin:kotlin-stdlib-jdk7": {
12171223
"shasums": {
1218-
"jar": "2aedcdc6b69b33bdf5cc235bcea88e7cf6601146bb6bcdffdb312bbacd7be261"
1224+
"jar": "870d35fd266b2daf64c1080fe51824d3c368f7995384a8d7c5fc2fdc40eb7b3a"
12191225
},
1220-
"version": "1.6.10"
1226+
"version": "1.6.0"
12211227
},
12221228
"org.jetbrains.kotlin:kotlin-stdlib-jdk8": {
12231229
"shasums": {
1224-
"jar": "1456d82d039ea30d8485b032901f52bbf07e7cdbe8bb1f8708ad32a8574c41ce"
1230+
"jar": "ab0547c495953214a5f2b28150014f4e02133678d52b77d76375ea235e443dbd"
12251231
},
1226-
"version": "1.6.10"
1232+
"version": "1.6.0"
12271233
},
12281234
"org.jetbrains.kotlin:kotlin-test": {
12291235
"shasums": {
@@ -2022,14 +2028,18 @@
20222028
"org.checkerframework:checker-qual",
20232029
"org.ow2.asm:asm"
20242030
],
2025-
"com.squareup:kotlinpoet": [
2026-
"org.jetbrains.kotlin:kotlin-reflect",
2027-
"org.jetbrains.kotlin:kotlin-stdlib-jdk8"
2028-
],
20292031
"com.squareup:kotlinpoet-javapoet": [
20302032
"com.squareup:javapoet",
2031-
"com.squareup:kotlinpoet",
2032-
"org.jetbrains.kotlin:kotlin-stdlib-jdk8"
2033+
"com.squareup:kotlinpoet-jvm",
2034+
"org.jetbrains.kotlin:kotlin-stdlib"
2035+
],
2036+
"com.squareup:kotlinpoet-jvm": [
2037+
"org.jetbrains.kotlin:kotlin-reflect",
2038+
"org.jetbrains.kotlin:kotlin-stdlib"
2039+
],
2040+
"com.squareup:kotlinpoet-ksp": [
2041+
"com.squareup:kotlinpoet-jvm",
2042+
"org.jetbrains.kotlin:kotlin-stdlib"
20332043
],
20342044
"com.sun.istack:istack-commons-runtime": [
20352045
"jakarta.activation:jakarta.activation-api"
@@ -5003,13 +5013,16 @@
50035013
"com.squareup:javapoet": [
50045014
"com.squareup.javapoet"
50055015
],
5006-
"com.squareup:kotlinpoet": [
5016+
"com.squareup:kotlinpoet-javapoet": [
5017+
"com.squareup.kotlinpoet.javapoet"
5018+
],
5019+
"com.squareup:kotlinpoet-jvm": [
50075020
"com.squareup.kotlinpoet",
50085021
"com.squareup.kotlinpoet.jvm",
50095022
"com.squareup.kotlinpoet.tags"
50105023
],
5011-
"com.squareup:kotlinpoet-javapoet": [
5012-
"com.squareup.kotlinpoet.javapoet"
5024+
"com.squareup:kotlinpoet-ksp": [
5025+
"com.squareup.kotlinpoet.ksp"
50135026
],
50145027
"com.sun.activation:javax.activation": [
50155028
"com.sun.activation.registries",
@@ -7196,14 +7209,15 @@
71967209
"kotlin.reflect.jvm.internal.impl.types",
71977210
"kotlin.reflect.jvm.internal.impl.types.checker",
71987211
"kotlin.reflect.jvm.internal.impl.types.error",
7212+
"kotlin.reflect.jvm.internal.impl.types.extensions",
71997213
"kotlin.reflect.jvm.internal.impl.types.model",
72007214
"kotlin.reflect.jvm.internal.impl.types.typeUtil",
72017215
"kotlin.reflect.jvm.internal.impl.types.typesApproximation",
72027216
"kotlin.reflect.jvm.internal.impl.util",
72037217
"kotlin.reflect.jvm.internal.impl.util.capitalizeDecapitalize",
72047218
"kotlin.reflect.jvm.internal.impl.util.collectionUtils",
72057219
"kotlin.reflect.jvm.internal.impl.utils",
7206-
"kotlin.reflect.jvm.internal.pcollections"
7220+
"kotlin.reflect.jvm.internal.impl.utils.addToStdlib"
72077221
],
72087222
"org.jetbrains.kotlin:kotlin-script-runtime": [
72097223
"kotlin.script.dependencies",
@@ -7630,7 +7644,7 @@
76307644
]
76317645
},
76327646
"repositories": {
7633-
"https://repo1.maven.org/maven2/": [
7647+
"https://maven.google.com/": [
76347648
"androidx.activity:activity-ktx:aar",
76357649
"androidx.activity:activity:aar",
76367650
"androidx.annotation:annotation",
@@ -7750,8 +7764,9 @@
77507764
"com.google.truth:truth",
77517765
"com.ibm.icu:icu4j",
77527766
"com.squareup:javapoet",
7753-
"com.squareup:kotlinpoet",
77547767
"com.squareup:kotlinpoet-javapoet",
7768+
"com.squareup:kotlinpoet-jvm",
7769+
"com.squareup:kotlinpoet-ksp",
77557770
"com.sun.activation:javax.activation",
77567771
"com.sun.istack:istack-commons-runtime",
77577772
"com.sun.xml.fastinfoset:FastInfoset",
@@ -7865,7 +7880,7 @@
78657880
"xerces:xercesImpl",
78667881
"xml-apis:xml-apis"
78677882
],
7868-
"https://maven.google.com/": [
7883+
"https://repo1.maven.org/maven2/": [
78697884
"androidx.activity:activity-ktx:aar",
78707885
"androidx.activity:activity:aar",
78717886
"androidx.annotation:annotation",
@@ -7985,8 +8000,9 @@
79858000
"com.google.truth:truth",
79868001
"com.ibm.icu:icu4j",
79878002
"com.squareup:javapoet",
7988-
"com.squareup:kotlinpoet",
79898003
"com.squareup:kotlinpoet-javapoet",
8004+
"com.squareup:kotlinpoet-jvm",
8005+
"com.squareup:kotlinpoet-ksp",
79908006
"com.sun.activation:javax.activation",
79918007
"com.sun.istack:istack-commons-runtime",
79928008
"com.sun.xml.fastinfoset:FastInfoset",

third_party/kotlin/kotlinpoet/BUILD

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,10 @@ package(default_visibility = ["//:src"])
1818

1919
alias(
2020
name = "kotlinpoet",
21-
actual = "@maven//:com_squareup_kotlinpoet",
21+
actual = "@maven//:com_squareup_kotlinpoet_jvm",
22+
)
23+
24+
alias(
25+
name = "interop-ksp",
26+
actual = "@maven//:com_squareup_kotlinpoet_ksp",
2227
)

0 commit comments

Comments
 (0)