Skip to content

Commit d906cdb

Browse files
ting-yuanKSP Auto Pick
authored and
KSP Auto Pick
committed
Fix KSAnnotationResolvedImpl.origin
Annotations applied in sources can be attached to synthetic elements. In that case, they should still be considered as source. (cherry picked from commit 8b94047)
1 parent 74c7beb commit d906cdb

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.google.devtools.ksp.impl.symbol.kotlin.resolved
33
import com.google.devtools.ksp.common.IdKeyPair
44
import com.google.devtools.ksp.common.KSObjectCache
55
import com.google.devtools.ksp.common.impl.KSNameImpl
6+
import com.google.devtools.ksp.containingFile
67
import com.google.devtools.ksp.impl.symbol.java.KSValueArgumentLiteImpl
78
import com.google.devtools.ksp.impl.symbol.java.calcValue
89
import com.google.devtools.ksp.impl.symbol.kotlin.*
@@ -137,7 +138,14 @@ class KSAnnotationResolvedImpl private constructor(
137138
}
138139
}
139140

140-
override val origin: Origin = parent?.origin ?: Origin.KOTLIN_LIB
141+
// Annotations on deeply synthesized members like getter of Java annotation arguments can still be real.
142+
override val origin: Origin by lazy {
143+
val parentOrigin = parent?.origin ?: Origin.SYNTHETIC
144+
when (parentOrigin) {
145+
Origin.SYNTHETIC -> containingFile?.origin ?: Origin.SYNTHETIC
146+
else -> parentOrigin
147+
}
148+
}
141149

142150
override val location: Location by lazy {
143151
NonExistLocation

kotlin-analysis-api/testData/libOrigins.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
// Validating Anno2
2222
// Validating Anno3
2323
// Validating Anno4
24+
// Validating Anno5
2425
// Validating JavaLib
2526
// Validating KotlinLibClass
2627
// Exception: [KotlinLibClass, T1, Any?]: SYNTHETIC
@@ -30,6 +31,12 @@
3031
// Validating File: JavaSrc.java
3132
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc, JavaSrc]: SYNTHETIC
3233
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc]: SYNTHETIC
34+
// Exception: [File: JavaSrc.java, JavaAnno1, value, String]: SYNTHETIC
35+
// Exception: [File: JavaSrc.java, JavaAnno1, value, value.getter(), String]: SYNTHETIC
36+
// Exception: [File: JavaSrc.java, JavaAnno1, value, value.getter()]: SYNTHETIC
37+
// Exception: [File: JavaSrc.java, JavaAnno1, value]: SYNTHETIC
38+
// Exception: [File: JavaSrc.java, JavaAnno1, synthetic constructor for JavaAnno1, JavaAnno1]: SYNTHETIC
39+
// Exception: [File: JavaSrc.java, JavaAnno1, synthetic constructor for JavaAnno1]: SYNTHETIC
3340
// Validating File: KotlinSrc.kt
3441
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short, Short]: SYNTHETIC
3542
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short]: SYNTHETIC
@@ -56,6 +63,7 @@ annotation class Anno1
5663
annotation class Anno2
5764
annotation class Anno3
5865
annotation class Anno4
66+
annotation class Anno5(val p1: Int = 42, val p2: String = "default")
5967

6068
@Anno1
6169
class KotlinLibClass<T1>(val p1: List<T1>, val p2: Int) {
@@ -111,3 +119,7 @@ class JavaSrc {
111119
}
112120
}
113121

122+
public @interface JavaAnno1 {
123+
@Anno5(p1 = 1, p2 = "a2")
124+
String value ();
125+
}

test-utils/testData/api/libOrigins.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
// Validating Anno2
2222
// Validating Anno3
2323
// Validating Anno4
24+
// Validating Anno5
2425
// Validating JavaLib
2526
// Validating KotlinLibClass
2627
// Validating kotlinLibFuntion
2728
// Validating kotlinLibProperty
2829
// Validating File: JavaSrc.java
2930
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc, JavaSrc]: SYNTHETIC
3031
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc]: SYNTHETIC
32+
// Exception: [File: JavaSrc.java, JavaAnno1, synthetic constructor for JavaAnno1, JavaAnno1]: SYNTHETIC
33+
// Exception: [File: JavaSrc.java, JavaAnno1, synthetic constructor for JavaAnno1]: SYNTHETIC
3134
// Validating File: KotlinSrc.kt
3235
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short, Short]: SYNTHETIC
3336
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short]: SYNTHETIC
@@ -59,6 +62,7 @@ annotation class Anno1
5962
annotation class Anno2
6063
annotation class Anno3
6164
annotation class Anno4
65+
annotation class Anno5(val p1: Int = 42, val p2: String = "default")
6266

6367
@Anno1
6468
class KotlinLibClass<T1>(val p1: List<T1>, val p2: Int) {
@@ -114,3 +118,7 @@ class JavaSrc {
114118
}
115119
}
116120

121+
public @interface JavaAnno1 {
122+
@Anno5(p1 = 1, p2 = "a2")
123+
String value ();
124+
}

0 commit comments

Comments
 (0)