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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||||
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -453,7 +454,7 @@ internal fun createKtInitializerValue(
|
|||||||
internal fun AnnotationDescriptor.toKtAnnotationApplication(): KtAnnotationApplication {
|
internal fun AnnotationDescriptor.toKtAnnotationApplication(): KtAnnotationApplication {
|
||||||
return KtAnnotationApplication(
|
return KtAnnotationApplication(
|
||||||
annotationClass?.maybeLocalClassId,
|
annotationClass?.maybeLocalClassId,
|
||||||
(source as? PsiSourceElement)?.psi as? KtAnnotationEntry,
|
(source as? PsiSourceElement)?.psi as? KtCallElement,
|
||||||
(this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget(),
|
(this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget(),
|
||||||
getKtNamedAnnotationArguments(),
|
getKtNamedAnnotationArguments(),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||||
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,7 +77,7 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
|
|||||||
internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession): KtAnnotationApplication {
|
internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession): KtAnnotationApplication {
|
||||||
return KtAnnotationApplication(
|
return KtAnnotationApplication(
|
||||||
fullyExpandedClassId(useSiteSession),
|
fullyExpandedClassId(useSiteSession),
|
||||||
psi as? KtAnnotationEntry,
|
psi as? KtCallElement,
|
||||||
useSiteTarget,
|
useSiteTarget,
|
||||||
FirAnnotationValueConverter.toNamedConstantValue(
|
FirAnnotationValueConverter.toNamedConstantValue(
|
||||||
mapAnnotationParameters(this, useSiteSession),
|
mapAnnotationParameters(this, useSiteSession),
|
||||||
|
|||||||
+1
-1
@@ -108,7 +108,7 @@ internal object FirAnnotationValueConverter {
|
|||||||
KtAnnotationApplicationValue(
|
KtAnnotationApplicationValue(
|
||||||
KtAnnotationApplication(
|
KtAnnotationApplication(
|
||||||
resolvedSymbol.callableId.classId,
|
resolvedSymbol.callableId.classId,
|
||||||
psi as? KtAnnotationEntry,
|
psi as? KtCallElement,
|
||||||
useSiteTarget = null,
|
useSiteTarget = null,
|
||||||
toNamedConstantValue(resultMap, session),
|
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`
|
* 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.
|
* [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
|
* [KtAnnotationApplicationValue] represents annotation types (with annotation fq name and arguments); and
|
||||||
* [KtArrayAnnotationValue] abstracts an array of [KtAnnotationValue]s.
|
* [KtArrayAnnotationValue] abstracts an array of [KtAnnotationValue]s.
|
||||||
*/
|
*/
|
||||||
public sealed class KtAnnotationValue(
|
public sealed class KtAnnotationValue {
|
||||||
public open val sourcePsi: KtElement? = null
|
public abstract val sourcePsi: KtElement?
|
||||||
)
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This represents an unsupported expression used as an annotation value.
|
* 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])`
|
* Array of annotation values. E.g: `@A([1, 2])`
|
||||||
@@ -116,7 +118,9 @@ public class KtEnumEntryAnnotationValue(
|
|||||||
*/
|
*/
|
||||||
public class KtConstantAnnotationValue(
|
public class KtConstantAnnotationValue(
|
||||||
public val constantValue: KtConstantValue,
|
public val constantValue: KtConstantValue,
|
||||||
) : KtAnnotationValue()
|
) : KtAnnotationValue() {
|
||||||
|
override val sourcePsi: KtElement? get() = constantValue.sourcePsi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user