Analysis API: fix invalid psi elements for constants and annotation values
This commit is contained in:
+2
-1
@@ -36,6 +36,7 @@ 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.KtCallElement
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -453,7 +454,7 @@ internal fun createKtInitializerValue(
|
||||
internal fun AnnotationDescriptor.toKtAnnotationApplication(): KtAnnotationApplication {
|
||||
return KtAnnotationApplication(
|
||||
annotationClass?.maybeLocalClassId,
|
||||
(source as? PsiSourceElement)?.psi as? KtAnnotationEntry,
|
||||
(source as? PsiSourceElement)?.psi as? KtCallElement,
|
||||
(this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget(),
|
||||
getKtNamedAnnotationArguments(),
|
||||
)
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtCallElement
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
/**
|
||||
@@ -76,7 +77,7 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
|
||||
internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession): KtAnnotationApplication {
|
||||
return KtAnnotationApplication(
|
||||
fullyExpandedClassId(useSiteSession),
|
||||
psi as? KtAnnotationEntry,
|
||||
psi as? KtCallElement,
|
||||
useSiteTarget,
|
||||
FirAnnotationValueConverter.toNamedConstantValue(
|
||||
mapAnnotationParameters(this, useSiteSession),
|
||||
|
||||
+1
-1
@@ -108,7 +108,7 @@ internal object FirAnnotationValueConverter {
|
||||
KtAnnotationApplicationValue(
|
||||
KtAnnotationApplication(
|
||||
resolvedSymbol.callableId.classId,
|
||||
psi as? KtAnnotationEntry,
|
||||
psi as? KtCallElement,
|
||||
useSiteTarget = null,
|
||||
toNamedConstantValue(resultMap, session),
|
||||
)
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ public data class KtAnnotationApplication(
|
||||
*
|
||||
* Present only for declarations from sources. For declarations from other places (libraries, stdlib) it's `null`
|
||||
*/
|
||||
public val psi: KtAnnotationEntry?,
|
||||
public val psi: KtCallElement?,
|
||||
|
||||
/**
|
||||
* [AnnotationUseSiteTarget] to which annotation was applied. May be not-null only for annotation applications for declarations.
|
||||
|
||||
+9
-5
@@ -26,15 +26,17 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
* [KtAnnotationApplicationValue] represents annotation types (with annotation fq name and arguments); and
|
||||
* [KtArrayAnnotationValue] abstracts an array of [KtAnnotationValue]s.
|
||||
*/
|
||||
public sealed class KtAnnotationValue(
|
||||
public open val sourcePsi: KtElement? = null
|
||||
)
|
||||
public sealed class KtAnnotationValue {
|
||||
public abstract val sourcePsi: KtElement?
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This represents an unsupported expression used as an annotation value.
|
||||
*/
|
||||
public object KtUnsupportedAnnotationValue : KtAnnotationValue()
|
||||
public object KtUnsupportedAnnotationValue : KtAnnotationValue() {
|
||||
override val sourcePsi: KtElement? get() = null
|
||||
}
|
||||
|
||||
/**
|
||||
* Array of annotation values. E.g: `@A([1, 2])`
|
||||
@@ -116,7 +118,9 @@ public class KtEnumEntryAnnotationValue(
|
||||
*/
|
||||
public class KtConstantAnnotationValue(
|
||||
public val constantValue: KtConstantValue,
|
||||
) : KtAnnotationValue()
|
||||
) : KtAnnotationValue() {
|
||||
override val sourcePsi: KtElement? get() = constantValue.sourcePsi
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user