From c401cd32104cab4b4f810639459753fdd4851b58 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 24 Jan 2023 19:58:16 +0100 Subject: [PATCH] [SLC] introduce SimpleAnnotationsBox ^KT-56046 --- .../symbol/annotations/AnnotationsBox.kt | 14 ++++++++++++++ .../symbol/annotations/LazyAnnotationsBox.kt | 7 +------ .../annotations/SimpleAnnotationsBox.kt | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsBox.kt create mode 100644 analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsBox.kt new file mode 100644 index 00000000000..f51cb1583a0 --- /dev/null +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/AnnotationsBox.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.light.classes.symbol.annotations + +import com.intellij.psi.PsiAnnotation +import com.intellij.psi.PsiAnnotationOwner + +internal sealed interface AnnotationsBox : PsiAnnotationOwner { + override fun getApplicableAnnotations(): Array = annotations + override fun addAnnotation(qualifiedName: String): PsiAnnotation = throw UnsupportedOperationException() +} 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 ea84597edf7..ec5d8b4e038 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 @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotation -import com.intellij.psi.PsiAnnotationOwner import com.intellij.psi.PsiModifierList import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.StandardClassIds @@ -17,7 +16,7 @@ internal class LazyAnnotationsBox( private val owner: PsiModifierList, private val annotationsProvider: AnnotationsProvider, private val additionalAnnotationsProvider: AdditionalAnnotationsProvider = DefaultAnnotationsProvider, -) : PsiAnnotationOwner { +) : AnnotationsBox { private val annotationsArray: AtomicReference?> = AtomicReference() private var specialAnnotations: SmartList? = null private val monitor = Any() @@ -61,8 +60,6 @@ internal class LazyAnnotationsBox( annotationsArray.get() ?: error("Unexpected state") } - override fun getApplicableAnnotations(): Array = annotations - override fun findAnnotation(qualifiedName: String): PsiAnnotation? = findAnnotation(qualifiedName, withAdditionalAnnotations = true) fun findAnnotation(qualifiedName: String, withAdditionalAnnotations: Boolean): PsiAnnotation? { @@ -124,8 +121,6 @@ internal class LazyAnnotationsBox( } } - override fun addAnnotation(qualifiedName: String): PsiAnnotation = throw UnsupportedOperationException() - companion object { /** * @see org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationsHelper diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt new file mode 100644 index 00000000000..4a94c9a84a0 --- /dev/null +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.light.classes.symbol.annotations + +import com.intellij.psi.PsiAnnotation +import org.jetbrains.kotlin.asJava.classes.lazyPub + +internal class SimpleAnnotationsBox(annotationsComputer: () -> Collection) : AnnotationsBox { + private val lazyAnnotation: Array by lazyPub { + val annotations = annotationsComputer() + if (annotations.isEmpty()) PsiAnnotation.EMPTY_ARRAY else annotations.toTypedArray() + } + + override fun getAnnotations(): Array = lazyAnnotation + override fun findAnnotation(qualifiedName: String): PsiAnnotation? = lazyAnnotation.find { it.qualifiedName == qualifiedName } +}