Skip to content

Commit 74c7beb

Browse files
ting-yuanKSP Auto Pick
authored andcommitted
Support KaDestructuringDeclarationSymbol
(cherry picked from commit 335a998)
1 parent d305dbb commit 74c7beb

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,14 @@ class KSFunctionDeclarationImpl private constructor(internal val ktFunctionSymbo
158158
if (!psi.hasBlockBody()) {
159159
emptySequence()
160160
} else {
161-
psi.bodyBlockExpression?.statements?.asSequence()?.filterIsInstance<KtDeclaration>()?.mapNotNull {
161+
psi.bodyBlockExpression?.statements?.asSequence()?.filterIsInstance<KtDeclaration>()?.flatMap {
162162
analyze {
163-
it.symbol.toKSDeclaration()
163+
when (val symbol = it.symbol) {
164+
is KaDestructuringDeclarationSymbol -> {
165+
symbol.entries.mapNotNull { it.toKSDeclaration() }
166+
}
167+
else -> listOfNotNull(symbol.toKSDeclaration())
168+
}
164169
}
165170
} ?: emptySequence()
166171
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ internal fun KaSymbol.getContainingKSSymbol(): KSDeclaration? {
381381

382382
internal fun KaSymbol.toKSDeclaration(): KSDeclaration? = this.toKSNode() as? KSDeclaration
383383

384+
// For efficiency & simplicity, KaDestructuringDeclarationSymbol is handled by caller.
384385
internal fun KaSymbol.toKSNode(): KSNode {
385386
return when (this) {
386387
is KaPropertySymbol -> KSPropertyDeclarationImpl.getCached(this)

kotlin-analysis-api/testData/getSymbolsFromAnnotation.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
// functionFoo:KSFunctionDeclaration
3939
// p1:KSValueParameter
4040
// local:KSPropertyDeclaration
41+
// a:KSPropertyDeclaration
4142
// <init>:KSFunctionDeclaration
4243
// constructorParameterFoo:KSValueParameter
4344
// param:KSValueParameter
@@ -77,6 +78,7 @@
7778
// functionFoo:KSFunctionDeclaration
7879
// p1:KSValueParameter
7980
// local:KSPropertyDeclaration
81+
// a:KSPropertyDeclaration
8082
// <init>:KSFunctionDeclaration
8183
// constructorParameterFoo:KSValueParameter
8284
// param:KSValueParameter
@@ -106,6 +108,7 @@
106108
// functionFoo:KSFunctionDeclaration
107109
// p1:KSValueParameter
108110
// local:KSPropertyDeclaration
111+
// a:KSPropertyDeclaration
109112
// <init>:KSFunctionDeclaration
110113
// constructorParameterFoo:KSValueParameter
111114
// param:KSValueParameter
@@ -147,6 +150,7 @@ class Foo @Anno constructor(@Anno @param:Cnno val constructorParameterFoo: Int,
147150
@Anno
148151
fun functionFoo(@Anno p1: Int, @Bnno p2: Int) {
149152
@Anno val local = 1
153+
val (@Anno a, b) = Pair<Int, Int>(17, 42)
150154
}
151155

152156
@setparam:Cnno

0 commit comments

Comments
 (0)