[AA] KtAnnotationsList: introduce 'annotationOverviews'
it provides a solution for several problems with redundant resolve. It is a more powerful tool than 'annotationClassIds' ^KT-56046
This commit is contained in:
committed by
Space Team
parent
24041bf96d
commit
3a7602a38f
+16
-2
@@ -6,10 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.descriptors.annotations
|
package org.jetbrains.kotlin.analysis.api.descriptors.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
@@ -30,8 +32,20 @@ internal class KtFe10AnnotationsList private constructor(
|
|||||||
override val annotations: List<KtAnnotationApplication>
|
override val annotations: List<KtAnnotationApplication>
|
||||||
get() = withValidityAssertion {
|
get() = withValidityAssertion {
|
||||||
fe10Annotations.mapIndexedNotNull { index, annotation ->
|
fe10Annotations.mapIndexedNotNull { index, annotation ->
|
||||||
if (annotation.annotationClass.classId in annotationsToIgnore) null
|
if (annotation.annotationClass.classId in annotationsToIgnore)
|
||||||
else annotation.toKtAnnotationApplication(analysisContext, index)
|
null
|
||||||
|
else
|
||||||
|
annotation.toKtAnnotationApplication(analysisContext, index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = withValidityAssertion {
|
||||||
|
fe10Annotations.mapIndexedNotNull { index, annotation ->
|
||||||
|
if (annotation.annotationClass.classId in annotationsToIgnore)
|
||||||
|
null
|
||||||
|
else
|
||||||
|
annotation.toKtAnnotationOverview(index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+25
-10
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.descriptors.impl.*
|
import org.jetbrains.kotlin.descriptors.impl.*
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
||||||
@@ -608,27 +609,41 @@ internal fun createKtInitializerValue(
|
|||||||
return KtNonConstantInitializerValue(initializer)
|
return KtNonConstantInitializerValue(initializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun AnnotationDescriptor.toKtAnnotationApplication(analysisContext: Fe10AnalysisContext, index: Int): KtAnnotationApplication {
|
internal fun AnnotationDescriptor.toKtAnnotationApplication(
|
||||||
return KtAnnotationApplication(
|
analysisContext: Fe10AnalysisContext,
|
||||||
annotationClass?.maybeLocalClassId,
|
index: Int,
|
||||||
(source as? PsiSourceElement)?.psi as? KtCallElement,
|
): KtAnnotationApplication = KtAnnotationApplication(
|
||||||
(this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget(),
|
classId = classIdIfNonLocal,
|
||||||
getKtNamedAnnotationArguments(analysisContext),
|
psi = psi,
|
||||||
index,
|
useSiteTarget = useSiteTarget,
|
||||||
)
|
arguments = getKtNamedAnnotationArguments(analysisContext),
|
||||||
}
|
index = index,
|
||||||
|
)
|
||||||
|
|
||||||
|
internal fun AnnotationDescriptor.toKtAnnotationOverview(index: Int): KtAnnotationOverview = KtAnnotationOverview(
|
||||||
|
classId = classIdIfNonLocal,
|
||||||
|
psi = psi,
|
||||||
|
useSiteTarget = useSiteTarget,
|
||||||
|
hasArguments = allValueArguments.isNotEmpty(),
|
||||||
|
index = index,
|
||||||
|
)
|
||||||
|
|
||||||
|
private val AnnotationDescriptor.psi: KtCallElement? get() = (source as? PsiSourceElement)?.psi as? KtCallElement
|
||||||
|
private val AnnotationDescriptor.classIdIfNonLocal: ClassId? get() = annotationClass?.maybeLocalClassId
|
||||||
|
private val AnnotationDescriptor.useSiteTarget: AnnotationUseSiteTarget?
|
||||||
|
get() = (this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget()
|
||||||
|
|
||||||
internal fun AnnotationDescriptor.getKtNamedAnnotationArguments(analysisContext: Fe10AnalysisContext): List<KtNamedAnnotationValue> =
|
internal fun AnnotationDescriptor.getKtNamedAnnotationArguments(analysisContext: Fe10AnalysisContext): List<KtNamedAnnotationValue> =
|
||||||
allValueArguments.map { (name, value) ->
|
allValueArguments.map { (name, value) ->
|
||||||
KtNamedAnnotationValue(name, value.toKtAnnotationValue(analysisContext, index = -1))
|
KtNamedAnnotationValue(name, value.toKtAnnotationValue(analysisContext, index = -1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun CallableDescriptor.createContextReceivers(
|
internal fun CallableDescriptor.createContextReceivers(
|
||||||
analysisContext: Fe10AnalysisContext
|
analysisContext: Fe10AnalysisContext
|
||||||
): List<KtContextReceiver> {
|
): List<KtContextReceiver> {
|
||||||
return contextReceiverParameters.map { createContextReceiver(it, analysisContext) }
|
return contextReceiverParameters.map { createContextReceiver(it, analysisContext) }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun ClassDescriptor.createContextReceivers(
|
internal fun ClassDescriptor.createContextReceivers(
|
||||||
analysisContext: Fe10AnalysisContext
|
analysisContext: Fe10AnalysisContext
|
||||||
): List<KtContextReceiver> {
|
): List<KtContextReceiver> {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir
|
package org.jetbrains.kotlin.analysis.api.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
|
import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
|
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
@@ -13,7 +14,9 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.arguments
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
@@ -65,15 +68,24 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
|
|||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession, index: Int): KtAnnotationApplication {
|
internal fun FirAnnotation.toKtAnnotationApplication(
|
||||||
return KtAnnotationApplication(
|
useSiteSession: FirSession,
|
||||||
toAnnotationClassId(useSiteSession),
|
index: Int,
|
||||||
psi as? KtCallElement,
|
): KtAnnotationApplication = KtAnnotationApplication(
|
||||||
useSiteTarget,
|
classId = toAnnotationClassId(useSiteSession),
|
||||||
FirAnnotationValueConverter.toNamedConstantValue(
|
psi = psi as? KtCallElement,
|
||||||
mapAnnotationParameters(this),
|
useSiteTarget = useSiteTarget,
|
||||||
useSiteSession,
|
arguments = FirAnnotationValueConverter.toNamedConstantValue(
|
||||||
),
|
mapAnnotationParameters(this),
|
||||||
index,
|
useSiteSession,
|
||||||
)
|
),
|
||||||
}
|
index = index,
|
||||||
|
)
|
||||||
|
|
||||||
|
internal fun FirAnnotation.toKtAnnotationOverview(useSiteSession: FirSession, index: Int): KtAnnotationOverview = KtAnnotationOverview(
|
||||||
|
classId = toAnnotationClassId(useSiteSession),
|
||||||
|
psi = psi as? KtCallElement,
|
||||||
|
useSiteTarget = useSiteTarget,
|
||||||
|
hasArguments = this is FirAnnotationCall && arguments.isNotEmpty(),
|
||||||
|
index = index,
|
||||||
|
)
|
||||||
|
|||||||
+6
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
@@ -25,6 +26,11 @@ internal class KtFirAnnotationListForDeclaration private constructor(
|
|||||||
annotations(firSymbol, useSiteSession)
|
annotations(firSymbol, useSiteSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = withValidityAssertion {
|
||||||
|
annotationOverviews(firSymbol, useSiteSession)
|
||||||
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
|
|||||||
+6
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
@@ -22,12 +23,16 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
|
|||||||
private val useSiteSession: FirSession,
|
private val useSiteSession: FirSession,
|
||||||
override val token: KtLifetimeToken,
|
override val token: KtLifetimeToken,
|
||||||
) : KtAnnotationsList() {
|
) : KtAnnotationsList() {
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationApplication>
|
override val annotations: List<KtAnnotationApplication>
|
||||||
get() = withValidityAssertion {
|
get() = withValidityAssertion {
|
||||||
annotations(firCallableSymbol, useSiteSession, receiverParameter)
|
annotations(firCallableSymbol, useSiteSession, receiverParameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = withValidityAssertion {
|
||||||
|
annotationOverviews(firCallableSymbol, useSiteSession, receiverParameter)
|
||||||
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
|
|||||||
+9
@@ -6,8 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
@@ -36,6 +38,13 @@ internal class KtFirAnnotationListForType private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = withValidityAssertion {
|
||||||
|
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).mapIndexed { index, annotation ->
|
||||||
|
annotation.toKtAnnotationOverview(useSiteSession, index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
|
|||||||
+10
@@ -6,7 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
|
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
||||||
@@ -64,6 +66,14 @@ internal fun annotations(
|
|||||||
annotation.toKtAnnotationApplication(useSiteSession, index)
|
annotation.toKtAnnotationApplication(useSiteSession, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun annotationOverviews(
|
||||||
|
firSymbol: FirBasedSymbol<*>,
|
||||||
|
useSiteSession: FirSession,
|
||||||
|
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
||||||
|
): List<KtAnnotationOverview> = annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).mapIndexed { index, annotation ->
|
||||||
|
annotation.toKtAnnotationOverview(useSiteSession, index)
|
||||||
|
}
|
||||||
|
|
||||||
internal fun annotationClassIds(
|
internal fun annotationClassIds(
|
||||||
firSymbol: FirBasedSymbol<*>,
|
firSymbol: FirBasedSymbol<*>,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
|
|||||||
+4
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.impl.base.annotations
|
package org.jetbrains.kotlin.analysis.api.impl.base.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
@@ -16,6 +17,9 @@ class KtEmptyAnnotationsList(override val token: KtLifetimeToken) : KtAnnotation
|
|||||||
override val annotations: List<KtAnnotationApplication>
|
override val annotations: List<KtAnnotationApplication>
|
||||||
get() = withValidityAssertion { emptyList() }
|
get() = withValidityAssertion { emptyList() }
|
||||||
|
|
||||||
|
override val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = withValidityAssertion { emptyList() }
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
|
|||||||
@@ -23,6 +23,14 @@ public interface KtAnnotated {
|
|||||||
public val KtAnnotated.annotations: List<KtAnnotationApplication>
|
public val KtAnnotated.annotations: List<KtAnnotationApplication>
|
||||||
get() = annotationsList.annotations
|
get() = annotationsList.annotations
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of annotation overviews.
|
||||||
|
*
|
||||||
|
* @see [KtAnnotationsList.annotationOverviews]
|
||||||
|
*/
|
||||||
|
public val KtAnnotated.annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
get() = annotationsList.annotationOverviews
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if entity has annotation with specified [classId].
|
* Checks if entity has annotation with specified [classId].
|
||||||
*
|
*
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* 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.analysis.api.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overview of annotation to some declaration or type.
|
||||||
|
*
|
||||||
|
* Some examples:
|
||||||
|
* - For declarations: `@Deprecated("Should not be used") fun foo(){}`
|
||||||
|
* - For types: `fun foo(x: List<@A Int>){}`
|
||||||
|
*/
|
||||||
|
public data class KtAnnotationOverview(
|
||||||
|
/**
|
||||||
|
* The [ClassId] of applied annotation. [ClassId] is a fully qualified name on annotation class.
|
||||||
|
*/
|
||||||
|
public val classId: ClassId?,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PsiElement which was used to apply annotation to declaration/type.
|
||||||
|
*
|
||||||
|
* Present only for declarations from sources. For declarations from other places (libraries, stdlib) it's `null`
|
||||||
|
*/
|
||||||
|
public val psi: KtCallElement?,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [AnnotationUseSiteTarget] to which annotation was applied. May be not-null only for annotation applications for declarations.
|
||||||
|
*
|
||||||
|
* See in more details in [Kotlin Documentation](https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets) for more information about annotation targets.
|
||||||
|
*/
|
||||||
|
public val useSiteTarget: AnnotationUseSiteTarget?,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* **true** if the annotation has any arguments
|
||||||
|
*/
|
||||||
|
public val hasArguments: Boolean,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An index of the annotation in an owner
|
||||||
|
*/
|
||||||
|
public val index: Int,
|
||||||
|
)
|
||||||
+9
-1
@@ -24,6 +24,15 @@ public abstract class KtAnnotationsList : KtLifetimeOwner {
|
|||||||
*/
|
*/
|
||||||
public abstract val annotations: List<KtAnnotationApplication>
|
public abstract val annotations: List<KtAnnotationApplication>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of annotation overviews.
|
||||||
|
*
|
||||||
|
* Can be used instead of [annotations] if applicable to reduce resolve.
|
||||||
|
*
|
||||||
|
* @see KtAnnotationOverview
|
||||||
|
*/
|
||||||
|
public abstract val annotationOverviews: List<KtAnnotationOverview>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if entity contains annotation with specified [classId].
|
* Checks if entity contains annotation with specified [classId].
|
||||||
*
|
*
|
||||||
@@ -81,4 +90,3 @@ public abstract class KtAnnotationsList : KtLifetimeOwner {
|
|||||||
*/
|
*/
|
||||||
public abstract val annotationClassIds: Collection<ClassId>
|
public abstract val annotationClassIds: Collection<ClassId>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user