Skip to content

Commit

Permalink
fix instance filtering for java annotation default value checking
Browse files Browse the repository at this point in the history
  • Loading branch information
neetopia committed May 8, 2024
1 parent d432b52 commit 90fd8c7
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.intellij.lang.jvm.JvmClassKind
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiAnnotationMemberValue
import com.intellij.psi.PsiAnnotationMethod
import com.intellij.psi.PsiArrayInitializerMemberValue
import com.intellij.psi.PsiArrayType
import com.intellij.psi.PsiClass
Expand All @@ -35,7 +36,6 @@ import com.intellij.psi.PsiLiteralValue
import com.intellij.psi.PsiPrimitiveType
import com.intellij.psi.PsiReference
import com.intellij.psi.PsiType
import com.intellij.psi.impl.source.PsiAnnotationMethodImpl
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedAnnotationValue
import org.jetbrains.kotlin.analysis.api.components.buildClassType
import org.jetbrains.kotlin.analysis.api.lifetime.KtAlwaysAccessibleLifetimeToken
Expand Down Expand Up @@ -93,7 +93,7 @@ class KSAnnotationJavaImpl private constructor(private val psi: PsiAnnotation, o
(type.classifierSymbol() as KtClassOrObjectSymbol).getMemberScope().getConstructors().singleOrNull()
?.let { symbol ->
if (symbol.origin == KtSymbolOrigin.JAVA && symbol.psi != null) {
(symbol.psi as PsiClass).allMethods.filterIsInstance<PsiAnnotationMethodImpl>()
(symbol.psi as PsiClass).allMethods.filterIsInstance<PsiAnnotationMethod>()
.mapNotNull { annoMethod ->
annoMethod.defaultValue?.let {
val value = it
Expand Down
6 changes: 6 additions & 0 deletions kotlin-analysis-api/testData/annotationValue/java.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
// WITH_RUNTIME
// TEST PROCESSOR: AnnotationArgumentProcessor
// EXPECTED:
// MyClass: stringParam = 2
// MyClass: stringParam2 = 1
// MyClass: stringArrayParam = [3, 5, 7]
// MyClassInLib: stringParam = 2
// MyClassInLib: stringParam2 = 1
// MyClassInLib: stringArrayParam = [3, 5, 7]
// Str
// 42
// Foo
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ class AnnotationArgumentProcessor : AbstractTestProcessor() {

override fun process(resolver: Resolver): List<KSAnnotated> {
listOf("MyClass", "MyClassInLib").forEach { clsName ->
resolver.getClassDeclarationByName(clsName)!!.let { cls ->
resolver.getClassDeclarationByName(clsName)?.let { cls ->
cls.annotations.single().arguments.forEach {
println("${clsName}: ${it.name!!.asString()} = ${it.value}")
results.add("$clsName: ${it.name!!.asString()} = ${it.value}")
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions test-utils/testData/api/annotationValue_java.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
// WITH_RUNTIME
// TEST PROCESSOR: AnnotationArgumentProcessor
// EXPECTED:
// MyClass: stringParam = 2
// MyClass: stringParam2 = 1
// MyClass: stringArrayParam = [3, 5, 7]
// MyClassInLib: stringParam = 2
// MyClassInLib: stringParam2 = 1
// MyClassInLib: stringArrayParam = [3, 5, 7]
// Str
// 42
// Foo
Expand Down

0 comments on commit 90fd8c7

Please sign in to comment.