From aa9e7444c9509c0d2a9e7d05340bbfaf14ab5c9d Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 26 Jan 2023 15:40:40 +0100 Subject: [PATCH] [SLC] AnnotationsProvider: migrate to classIds to annotationOverviews ^KT-56046 --- .../symbol/annotations/AnnotationsProvider.kt | 3 ++- .../CompositeAnnotationsProvider.kt | 7 +++++-- .../annotations/EmptyAnnotationsProvider.kt | 3 ++- .../symbol/annotations/LazyAnnotationsBox.kt | 7 ++++--- .../annotations/SymbolAnnotationsProvider.kt | 9 +++------ .../annotations/SymbolLightLazyAnnotation.kt | 19 +++++++++++-------- 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsProvider.kt index 8ee8236ab20..134b1305a59 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsProvider.kt @@ -6,10 +6,11 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication +import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview import org.jetbrains.kotlin.name.ClassId internal sealed interface AnnotationsProvider { - fun classIds(): Collection + fun annotationOverviews(): List operator fun get(classId: ClassId): Collection operator fun contains(classId: ClassId): Boolean fun isTheSameAs(other: Any?): Boolean diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAnnotationsProvider.kt index 10842f4eea4..89c27dc8bac 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAnnotationsProvider.kt @@ -6,12 +6,15 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication +import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview import org.jetbrains.kotlin.name.ClassId internal class CompositeAnnotationsProvider(val providers: Collection) : AnnotationsProvider { - override fun classIds(): Collection = buildList { + constructor(vararg providers: AnnotationsProvider) : this(providers.toList()) + + override fun annotationOverviews(): List = buildList { for (provider in providers) { - addAll(provider.classIds()) + addAll(provider.annotationOverviews()) } } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsProvider.kt index 0537a4a0a4a..76fae5766f2 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsProvider.kt @@ -6,10 +6,11 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication +import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview import org.jetbrains.kotlin.name.ClassId object EmptyAnnotationsProvider : AnnotationsProvider { - override fun classIds(): Collection = emptyList() + override fun annotationOverviews(): List = emptyList() override fun get(classId: ClassId): Collection = emptyList() override fun contains(classId: ClassId): Boolean = false override fun isTheSameAs(other: Any?): Boolean = this === other diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt index 51f73f207e5..f7912485f19 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt @@ -23,9 +23,10 @@ internal class LazyAnnotationsBox( override fun annotations(owner: PsiModifierList): Array { annotationsArray.get()?.let { return it } - val classIds = annotationsProvider.classIds() - val annotations = classIds.withIndex().mapTo(SmartList()) { (index, classId) -> - SymbolLightLazyAnnotation(classId, annotationsProvider, index, owner) + val annotations = annotationsProvider.annotationOverviews().mapNotNullTo(SmartList()) { + it.classId?.let { classId -> + SymbolLightLazyAnnotation(classId, annotationsProvider, it, owner) + } } val valueToReturn = synchronized(monitor) { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationsProvider.kt index cbfc64cdd58..f492d45cd31 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolAnnotationsProvider.kt @@ -6,10 +6,7 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import org.jetbrains.kotlin.analysis.api.KtAnalysisSession -import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication -import org.jetbrains.kotlin.analysis.api.annotations.annotationClassIds -import org.jetbrains.kotlin.analysis.api.annotations.annotationsByClassId -import org.jetbrains.kotlin.analysis.api.annotations.hasAnnotation +import org.jetbrains.kotlin.analysis.api.annotations.* import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer @@ -24,8 +21,8 @@ internal class SymbolAnnotationsProvider( private inline fun withAnnotatedSymbol(crossinline action: context(KtAnalysisSession) (KtAnnotatedSymbol) -> T): T = annotatedSymbolPointer.withSymbol(ktModule, action) - override fun classIds(): Collection = withAnnotatedSymbol { annotatedSymbol -> - annotatedSymbol.annotationClassIds + override fun annotationOverviews(): List = withAnnotatedSymbol { annotatedSymbol -> + annotatedSymbol.annotationOverviews } override fun get(classId: ClassId): Collection = withAnnotatedSymbol { annotatedSymbol -> diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt index fd8ea414c90..1e5108f3fdb 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotationParameterList import com.intellij.psi.PsiModifierList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication +import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -16,30 +17,31 @@ import org.jetbrains.kotlin.psi.KtCallElement internal class SymbolLightLazyAnnotation private constructor( private val classId: ClassId, val annotationsProvider: AnnotationsProvider, - private val index: Int?, - specialAnnotationApplication: KtAnnotationApplication?, + private val annotationOverview: KtAnnotationOverview?, + private val specialAnnotationApplication: KtAnnotationApplication?, owner: PsiModifierList, ) : SymbolLightAbstractAnnotation(owner) { init { - require(index != null || specialAnnotationApplication != null) + require(annotationOverview != null || specialAnnotationApplication != null) } private val fqName: FqName = classId.asSingleFqName() val annotationApplication: Lazy = specialAnnotationApplication?.let(::lazyOf) ?: lazyPub { val applications = annotationsProvider[classId] - applications.find { it.index == index } ?: error("expected index: $index, actual indices: ${applications.map { it.index }}") + applications.find { it.index == annotationOverview?.index } + ?: error("expected index: ${annotationOverview?.index}, actual indices: ${applications.map { it.index }}") } constructor( classId: ClassId, annotationsProvider: AnnotationsProvider, - index: Int, + annotationOverview: KtAnnotationOverview, owner: PsiModifierList, ) : this( classId = classId, annotationsProvider = annotationsProvider, - index = index, + annotationOverview = annotationOverview, specialAnnotationApplication = null, owner = owner, ) @@ -52,7 +54,7 @@ internal class SymbolLightLazyAnnotation private constructor( ) : this( classId = classId, annotationsProvider = annotationsProvider, - index = null, + annotationOverview = null, specialAnnotationApplication = annotationApplication, owner = owner, ) @@ -70,7 +72,8 @@ internal class SymbolLightLazyAnnotation private constructor( override fun equals(other: Any?): Boolean = this === other || other is SymbolLightLazyAnnotation && other.fqName == fqName && - other.index == index && + other.annotationOverview == annotationOverview && + other.specialAnnotationApplication == specialAnnotationApplication && annotationsProvider.isTheSameAs(other.annotationsProvider) && other.parent == parent