From ea2bb32bc030d0b9348f9694155abc4056ec7516 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 22 Feb 2024 18:17:03 +0100 Subject: [PATCH] [PSI] Don't calculate `ClassId`s for local classes in call elements - The fix uses relevant logic from `getNonLocalContainingDeclaration`. - The annotation entry case is covered by `KtCallElement` because `KtAnnotationEntry` is a subtype of it. - KT-66038 is fixed by this because the static declaration provider only indexes non-local classes. ^KT-66038 fixed --- .../classId/localClassInsideAnnotationArgument.kt | 2 +- .../classId/localClassInsideUnclosedAnnotation.kt | 2 +- .../jetbrains/kotlin/psi/psiUtil/ClassIdCalculator.kt | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/analysis/low-level-api-fir/testData/classId/localClassInsideAnnotationArgument.kt b/analysis/low-level-api-fir/testData/classId/localClassInsideAnnotationArgument.kt index 562526c4519..587a12ed491 100644 --- a/analysis/low-level-api-fir/testData/classId/localClassInsideAnnotationArgument.kt +++ b/analysis/low-level-api-fir/testData/classId/localClassInsideAnnotationArgument.kt @@ -1,2 +1,2 @@ -/* ClassId: /Bar */@Retention(if (true) { /* ClassId: /Bar.Foo */class Foo }) +/* ClassId: /Bar */@Retention(if (true) { /* ClassId: null */class Foo }) class Bar diff --git a/analysis/low-level-api-fir/testData/classId/localClassInsideUnclosedAnnotation.kt b/analysis/low-level-api-fir/testData/classId/localClassInsideUnclosedAnnotation.kt index 0ca75843308..e2db12146cb 100644 --- a/analysis/low-level-api-fir/testData/classId/localClassInsideUnclosedAnnotation.kt +++ b/analysis/low-level-api-fir/testData/classId/localClassInsideUnclosedAnnotation.kt @@ -1,3 +1,3 @@ // KT-24323 @Retention(AnnotationRetention.RUNTIME -annotation /* ClassId: /Validation */class Validation() +annotation /* ClassId: null */class Validation() diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ClassIdCalculator.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ClassIdCalculator.kt index 16f235e96ee..97e1c8e076d 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ClassIdCalculator.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ClassIdCalculator.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.psi.psiUtil +import com.intellij.psi.PsiErrorElement import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.SpecialNames @@ -17,7 +18,12 @@ internal object ClassIdCalculator { for (element in declaration.parentsWithSelf) { when (element) { - is KtEnumEntry -> { + is KtEnumEntry, + is KtCallElement, + is KtObjectLiteralExpression, + is KtCodeFragment, + is PsiErrorElement, + -> { return null } is KtClassLikeDeclaration -> { @@ -30,7 +36,7 @@ internal object ClassIdCalculator { is KtScript -> { // Skip script parent } - is KtDeclaration, is KtObjectLiteralExpression -> { + is KtDeclaration -> { // Local declarations don't have a 'ClassId' return null }