diff options
author | Jiaxiang Chen <jiaxiang@google.com> | 2022-11-28 18:40:55 -0800 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2022-11-29 19:38:14 +0000 |
commit | 7d8cace8bdc38063cb9a7af00dd63375a8304db4 (patch) | |
tree | b07e938da898adb01dea25892d95087a1da7b5ef | |
parent | 318914ae600a12ad6ee44d18fea6b366b0798862 (diff) | |
download | ksp-7d8cace8bdc38063cb9a7af00dd63375a8304db4.tar.gz |
AA: Handle AnnotationTarget.VALUE_PARAMETER for property declarations.
2 files changed, 13 insertions, 1 deletions
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt index 8f03e326..2ba87469 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSPropertyDeclarationImpl.kt @@ -40,6 +40,16 @@ class KSPropertyDeclarationImpl private constructor(internal val ktPropertySymbo ktPropertySymbol.annotations.asSequence() .filter { !it.isUseSiteTargetAnnotation() } .map { KSAnnotationImpl.getCached(it) } + .filterNot { valueParameterAnnotation -> + valueParameterAnnotation.annotationType.resolve().declaration.annotations.any { metaAnnotation -> + metaAnnotation.annotationType.resolve().declaration.qualifiedName + ?.asString() == "kotlin.annotation.Target" && + (metaAnnotation.arguments.singleOrNull()?.value as? ArrayList<*>)?.any { + (it as? KSClassDeclaration)?.qualifiedName + ?.asString() == "kotlin.annotation.AnnotationTarget.VALUE_PARAMETER" + } ?: false + } + } } override val getter: KSPropertyGetter? by lazy { @@ -99,7 +109,8 @@ internal fun KtAnnotationApplication.isUseSiteTargetAnnotation(): Boolean { return this.useSiteTarget?.let { it == AnnotationUseSiteTarget.PROPERTY_GETTER || it == AnnotationUseSiteTarget.PROPERTY_SETTER || - it == AnnotationUseSiteTarget.SETTER_PARAMETER + it == AnnotationUseSiteTarget.SETTER_PARAMETER || + it == AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER } ?: false } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSValueArgumentImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSValueArgumentImpl.kt index 0c2be02c..782969fe 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSValueArgumentImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSValueArgumentImpl.kt @@ -66,6 +66,7 @@ class KSValueArgumentImpl private constructor( private fun KtAnnotationValue.toValue(): Any? = when (this) { is KtArrayAnnotationValue -> this.values.map { it.toValue() } is KtAnnotationApplicationValue -> KSAnnotationImpl.getCached(this.annotationValue) + // TODO: Enum entry should return a type, use declaration as a placeholder. is KtEnumEntryAnnotationValue -> this.callableId?.classId?.let { analyze { it.toKtClassSymbol()?.let { |