FIR IDE: separate KtAnnotationApplication and KtAnnotationApplicationValue
This commit is contained in:
+3
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
@@ -21,7 +22,7 @@ internal class KtFe10AnnotationsList private constructor(
|
||||
) : KtAnnotationsList() {
|
||||
override val annotations: List<KtAnnotationApplication>
|
||||
get() = withValidityAssertion {
|
||||
fe10Annotations.map { KtFe10DescAnnotationApplication(it, token) }
|
||||
fe10Annotations.map { it.toKtAnnotationApplication() }
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
@@ -43,7 +44,7 @@ internal class KtFe10AnnotationsList private constructor(
|
||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
|
||||
fe10Annotations.mapNotNull { annotation ->
|
||||
if (annotation.annotationClass?.maybeLocalClassId != classId) return@mapNotNull null
|
||||
KtFe10DescAnnotationApplication(annotation, token)
|
||||
annotation.toKtAnnotationApplication()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.descriptors.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtCallElement
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationDescriptor
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
|
||||
internal class KtFe10DescAnnotationApplication(
|
||||
private val descriptor: AnnotationDescriptor,
|
||||
override val token: ValidityToken
|
||||
) : KtAnnotationApplication() {
|
||||
override val classId: ClassId?
|
||||
get() = withValidityAssertion { descriptor.annotationClass?.maybeLocalClassId }
|
||||
|
||||
override val useSiteTarget: AnnotationUseSiteTarget?
|
||||
get() = withValidityAssertion {
|
||||
val psiTarget = (descriptor as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget ?: return null
|
||||
return psiTarget.getAnnotationUseSiteTarget()
|
||||
}
|
||||
|
||||
val source: SourceElement
|
||||
get() = withValidityAssertion { descriptor.source }
|
||||
|
||||
override val psi: KtCallElement?
|
||||
get() = withValidityAssertion { (source as? PsiSourceElement)?.psi as? KtAnnotationEntry }
|
||||
|
||||
override val arguments: List<KtNamedConstantValue>
|
||||
get() = withValidityAssertion {
|
||||
descriptor.allValueArguments.map { (name, value) -> KtNamedConstantValue(name.asString(), value.toKtConstantValue()) }
|
||||
}
|
||||
}
|
||||
+22
-2
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.*
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
||||
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.load.kotlin.toSourceElement
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.CapturedType
|
||||
@@ -37,7 +39,9 @@ import org.jetbrains.kotlin.resolve.constants.*
|
||||
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationDescriptor
|
||||
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||
import org.jetbrains.kotlin.types.*
|
||||
@@ -281,8 +285,15 @@ internal fun ConstantValue<*>.toKtConstantValue(): KtAnnotationValue {
|
||||
is ArrayValue -> KtArrayAnnotationValue(value.map { it.toKtConstantValue() }, null)
|
||||
is EnumValue -> KtEnumEntryAnnotationValue(CallableId(enumClassId, enumEntryName), null)
|
||||
is AnnotationValue -> {
|
||||
val arguments = value.allValueArguments.map { (name, v) -> KtNamedConstantValue(name.asString(), v.toKtConstantValue()) }
|
||||
KtAnnotationAnnotationValue(value.annotationClass?.classId, arguments, null)
|
||||
val arguments = value.allValueArguments.map { (name, v) -> KtNamedAnnotationValue(name.asString(), v.toKtConstantValue()) }
|
||||
KtAnnotationApplicationValue(
|
||||
KtAnnotationApplication(
|
||||
value.annotationClass?.classId,
|
||||
psi = null,
|
||||
useSiteTarget = null,
|
||||
arguments = arguments
|
||||
)
|
||||
)
|
||||
}
|
||||
is ErrorValue -> KtErrorValue(this.toString())
|
||||
else -> KtUnsupportedAnnotationValue
|
||||
@@ -418,4 +429,13 @@ internal fun createKtInitializerValue(
|
||||
}
|
||||
|
||||
return KtNonConstantInitializerValue(initializer)
|
||||
}
|
||||
|
||||
internal fun AnnotationDescriptor.toKtAnnotationApplication(): KtAnnotationApplication {
|
||||
return KtAnnotationApplication(
|
||||
annotationClass?.maybeLocalClassId,
|
||||
(source as? PsiSourceElement)?.psi as? KtAnnotationEntry,
|
||||
(this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget(),
|
||||
allValueArguments.map { (name, value) -> KtNamedAnnotationValue(name.asString(), value.toKtConstantValue()) }
|
||||
)
|
||||
}
|
||||
+3
-3
@@ -88,11 +88,11 @@ internal class KtFe10TypeRenderer(private val options: KtTypeRendererOptions, pr
|
||||
}
|
||||
|
||||
private fun KtFe10RendererConsumer.renderTypeAnnotationDebug(annotation: AnnotationDescriptor) {
|
||||
val namedValues = annotation.allValueArguments.map { KtNamedConstantValue(it.key.asString(), it.value.toKtConstantValue()) }
|
||||
val namedValues = annotation.allValueArguments.map { KtNamedAnnotationValue(it.key.asString(), it.value.toKtConstantValue()) }
|
||||
renderAnnotationDebug(annotation.annotationClass?.classId, namedValues)
|
||||
}
|
||||
|
||||
private fun KtFe10RendererConsumer.renderAnnotationDebug(classId: ClassId?, namedValues: List<KtNamedConstantValue>) {
|
||||
private fun KtFe10RendererConsumer.renderAnnotationDebug(classId: ClassId?, namedValues: List<KtNamedAnnotationValue>) {
|
||||
append("@")
|
||||
|
||||
if (classId != null) {
|
||||
@@ -111,7 +111,7 @@ internal class KtFe10TypeRenderer(private val options: KtTypeRendererOptions, pr
|
||||
|
||||
private fun KtFe10RendererConsumer.renderConstantValueDebug(value: KtAnnotationValue) {
|
||||
when (value) {
|
||||
is KtAnnotationAnnotationValue -> renderAnnotationDebug(value.classId, value.arguments)
|
||||
is KtAnnotationApplicationValue -> renderAnnotationDebug(value.annotationValue.classId, value.annotationValue.arguments)
|
||||
is KtArrayAnnotationValue ->
|
||||
renderList(value.values, separator = ", ", prefix = "[", postfix = "]") { renderConstantValueDebug(it) }
|
||||
is KtEnumEntryAnnotationValue -> append(value.callableId)
|
||||
|
||||
Reference in New Issue
Block a user