[SLC] introduce EmptyAdditionalAnnotationsProvider

^KT-56046
This commit is contained in:
Dmitrii Gridin
2023-01-25 14:53:55 +01:00
committed by Space Team
parent 5f6c1afa1f
commit cb531635b1
5 changed files with 28 additions and 4 deletions
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
import java.lang.annotation.ElementType
internal object DefaultAnnotationsProvider : AdditionalAnnotationsProvider {
internal object DefaultAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
override fun addAllAnnotations(
currentRawAnnotations: MutableList<in PsiAnnotation>,
foundQualifiers: MutableSet<String>,
@@ -0,0 +1,23 @@
/*
* 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.PsiModifierList
internal object EmptyAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
override fun addAllAnnotations(
currentRawAnnotations: MutableList<in PsiAnnotation>,
foundQualifiers: MutableSet<String>,
owner: PsiModifierList
) = Unit
override fun findAdditionalAnnotation(
annotationsBox: LazyAnnotationsBox,
qualifiedName: String,
owner: PsiModifierList
): PsiAnnotation? = null
}
@@ -14,7 +14,7 @@ import java.util.concurrent.atomic.AtomicReference
internal class LazyAnnotationsBox(
private val annotationsProvider: AnnotationsProvider,
private val additionalAnnotationsProvider: AdditionalAnnotationsProvider = DefaultAnnotationsProvider,
private val additionalAnnotationsProvider: AdditionalAnnotationsProvider = EmptyAdditionalAnnotationsProvider,
) : AnnotationsBox {
private val annotationsArray: AtomicReference<Array<PsiAnnotation>?> = AtomicReference()
private var specialAnnotations: SmartList<PsiAnnotation>? = null
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.light.classes.symbol.annotations.DefaultAdditionalAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
@@ -72,7 +73,8 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
computer = ::computeModifiers
),
annotationsBox = LazyAnnotationsBox(
annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer)
annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer),
additionalAnnotationsProvider = DefaultAdditionalAnnotationsProvider,
),
)
@@ -71,7 +71,6 @@ internal class SymbolLightParameterForReceiver private constructor(
annotationsBox = LazyAnnotationsBox(
annotationsProvider = SymbolAnnotationsProvider(ktModule, receiverPointer),
additionalAnnotationsProvider = CompositeAdditionalAnnotationsProvider(
DefaultAnnotationsProvider,
NullabilityAnnotationsProvider {
withReceiverSymbol { receiver ->
receiver.type.nullabilityType