From 666f6f44c60fb6e16429a5585cf23ce7aab6e353 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Sat, 14 Jun 2025 22:36:49 +0200 Subject: [PATCH] [kotlin] Clean up #KTIJ-34403 GitOrigin-RevId: c527c46531aa9827d93376da2a88178fba6095f4 --- .../KotlinLanguageInjectionContributorBase.kt | 3 ++- .../K2KotlinLanguageInjectionContributor.kt | 15 +++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/kotlin/injection/base/src/org/jetbrains/kotlin/idea/base/injection/KotlinLanguageInjectionContributorBase.kt b/plugins/kotlin/injection/base/src/org/jetbrains/kotlin/idea/base/injection/KotlinLanguageInjectionContributorBase.kt index 234c2b91f8e4..8d58f2d6f2bc 100644 --- a/plugins/kotlin/injection/base/src/org/jetbrains/kotlin/idea/base/injection/KotlinLanguageInjectionContributorBase.kt +++ b/plugins/kotlin/injection/base/src/org/jetbrains/kotlin/idea/base/injection/KotlinLanguageInjectionContributorBase.kt @@ -99,13 +99,14 @@ abstract class KotlinLanguageInjectionContributorBase : LanguageInjectionContrib val project = ktHost.project val modificationCount = PsiManager.getInstance(project).modificationTracker.modificationCount - val configuration = Configuration.getProjectInstance(project) return when { kotlinCachedInjection != null && (modificationCount == kotlinCachedInjection.modificationCount) -> // Cache is up-to-date kotlinCachedInjection.baseInjection else -> { + val configuration = Configuration.getProjectInstance(project) + fun computeAndCache(): BaseInjection { val computedInjection = computeBaseInjection(ktHost, containingFile, configuration, support) ?: absentKotlinInjection ktHost.cachedInjectionWithModification = KotlinCachedInjection(modificationCount, computedInjection) diff --git a/plugins/kotlin/injection/k2/src/org/jetbrains/kotlin/idea/k2/injection/K2KotlinLanguageInjectionContributor.kt b/plugins/kotlin/injection/k2/src/org/jetbrains/kotlin/idea/k2/injection/K2KotlinLanguageInjectionContributor.kt index 7511bf11b66a..e5863b9772f8 100644 --- a/plugins/kotlin/injection/k2/src/org/jetbrains/kotlin/idea/k2/injection/K2KotlinLanguageInjectionContributor.kt +++ b/plugins/kotlin/injection/k2/src/org/jetbrains/kotlin/idea/k2/injection/K2KotlinLanguageInjectionContributor.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.base.injection.KotlinLanguageInjectionContribut import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.name.CallableId +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtCallExpression @@ -50,7 +51,7 @@ internal class K2KotlinLanguageInjectionContributor : KotlinLanguageInjectionCon null } else { analyze(callableDeclaration) { - val annotation = callableDeclaration.symbol.findAnnotation() ?: return null + val annotation = callableDeclaration.symbol.findAnnotation() ?: return null injectionInfoByAnnotation(annotation) } } @@ -72,8 +73,8 @@ internal class K2KotlinLanguageInjectionContributor : KotlinLanguageInjectionCon // For a parameter of a primary constructor, there are multiple possible locations for the annotation in the generated Java // bytecode e.g., getter. Thus, we cannot get annotations of the parameter symbol itself. We have to check its use-site targets. // We first check its generated property here. - val annotationForParameter = parameterSymbol.generatedPrimaryConstructorProperty?.findAnnotation() - ?: parameterSymbol.findAnnotation() ?: return null + val annotationForParameter = parameterSymbol.generatedPrimaryConstructorProperty?.findAnnotation() + ?: parameterSymbol.findAnnotation() ?: return null injectionInfoByAnnotation(annotationForParameter) } } @@ -87,9 +88,11 @@ internal class K2KotlinLanguageInjectionContributor : KotlinLanguageInjectionCon } } -context(KaSession) -private inline fun KaAnnotatedSymbol.findAnnotation(): KaAnnotation? = - annotations.find { it.classId?.asFqNameString() == T::class.java.name } +private val languageAnnotationClassId = + ClassId(FqName(LanguageAnnotation::class.java.packageName), FqName(LanguageAnnotation::class.java.simpleName), false) + +private inline fun KaAnnotatedSymbol.findAnnotation(annotationClassId: ClassId = languageAnnotationClassId): KaAnnotation? = + annotations.firstOrNull { it.classId == annotationClassId } context(KaSession) private fun KaAnnotation.getStringValueOfArgument(argumentName: String): String? {