[FIR IDE] Make annotations and extension receiver lazy
This commit is contained in:
+1
-1
@@ -62,7 +62,7 @@ object DebugSymbolRenderer {
|
|||||||
is KtNamedConstantValue -> "${renderValue(value.name)} = ${renderValue(value.expression)}"
|
is KtNamedConstantValue -> "${renderValue(value.name)} = ${renderValue(value.expression)}"
|
||||||
is KtAnnotationCall ->
|
is KtAnnotationCall ->
|
||||||
"${renderValue(value.classId)}${value.arguments.joinToString(prefix = "(", postfix = ")") { renderValue(it) }}"
|
"${renderValue(value.classId)}${value.arguments.joinToString(prefix = "(", postfix = ")") { renderValue(it) }}"
|
||||||
is ReceiverTypeAndAnnotations -> "${renderValue(value.annotations)} ${renderValue(value.type)}"
|
is KtTypeAndAnnotations -> "${renderValue(value.annotations)} ${renderValue(value.type)}"
|
||||||
else -> value::class.simpleName!!
|
else -> value::class.simpleName!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -6,11 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.idea.frontend.api.symbols.markers
|
package org.jetbrains.kotlin.idea.frontend.api.symbols.markers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
|
|
||||||
abstract class KtAnnotationCall {
|
abstract class KtAnnotationCall : ValidityTokenOwner {
|
||||||
abstract val classId: ClassId?
|
abstract val classId: ClassId?
|
||||||
abstract val useSiteTarget: AnnotationUseSiteTarget?
|
abstract val useSiteTarget: AnnotationUseSiteTarget?
|
||||||
abstract val psi: KtCallElement?
|
abstract val psi: KtCallElement?
|
||||||
|
|||||||
+6
-2
@@ -5,13 +5,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.symbols.markers
|
package org.jetbrains.kotlin.idea.frontend.api.symbols.markers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
|
|
||||||
data class ReceiverTypeAndAnnotations(val type: KtType, val annotations: List<KtAnnotationCall>)
|
abstract class KtTypeAndAnnotations : ValidityTokenOwner {
|
||||||
|
abstract val type: KtType
|
||||||
|
abstract val annotations: List<KtAnnotationCall>
|
||||||
|
}
|
||||||
|
|
||||||
interface KtPossibleExtensionSymbol {
|
interface KtPossibleExtensionSymbol {
|
||||||
val receiverTypeAndAnnotations: ReceiverTypeAndAnnotations?
|
val receiverType: KtTypeAndAnnotations?
|
||||||
val isExtension: Boolean
|
val isExtension: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -14,13 +14,13 @@ import org.jetbrains.kotlin.codegen.AsmUtil
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.ReceiverTypeAndAnnotations
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtPossibleExtensionSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtPossibleExtensionSymbol
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
|
|
||||||
internal class FirLightParameterForReceiver private constructor(
|
internal class FirLightParameterForReceiver private constructor(
|
||||||
private val receiverTypeAndAnnotations: ReceiverTypeAndAnnotations,
|
private val receiverTypeAndAnnotations: KtTypeAndAnnotations,
|
||||||
private val context: KtSymbol,
|
private val context: KtSymbol,
|
||||||
methodName: String,
|
methodName: String,
|
||||||
method: FirLightMethod
|
method: FirLightMethod
|
||||||
@@ -36,7 +36,7 @@ internal class FirLightParameterForReceiver private constructor(
|
|||||||
if (callableSymbol !is KtPossibleExtensionSymbol) return null
|
if (callableSymbol !is KtPossibleExtensionSymbol) return null
|
||||||
|
|
||||||
if (!callableSymbol.isExtension) return null
|
if (!callableSymbol.isExtension) return null
|
||||||
val extensionTypeAndAnnotations = callableSymbol.receiverTypeAndAnnotations ?: return null
|
val extensionTypeAndAnnotations = callableSymbol.receiverType ?: return null
|
||||||
|
|
||||||
return FirLightParameterForReceiver(
|
return FirLightParameterForReceiver(
|
||||||
receiverTypeAndAnnotations = extensionTypeAndAnnotations,
|
receiverTypeAndAnnotations = extensionTypeAndAnnotations,
|
||||||
|
|||||||
+50
-5
@@ -6,13 +6,58 @@
|
|||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
|
import org.jetbrains.kotlin.fir.types.classId
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.mapAnnotationParameters
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.psi.KtCallElement
|
||||||
|
|
||||||
class KtFirAnnotationCall(
|
class KtFirAnnotationCall(
|
||||||
override val classId: ClassId,
|
containingDeclaration: FirDeclaration,
|
||||||
override val useSiteTarget: AnnotationUseSiteTarget?,
|
annotationCall: FirAnnotationCall,
|
||||||
override val psi: KtCallElement?,
|
resolveState: FirModuleResolveState,
|
||||||
override val arguments: List<KtNamedConstantValue>
|
override val token: ValidityToken,
|
||||||
) : KtAnnotationCall()
|
) : KtAnnotationCall() {
|
||||||
|
|
||||||
|
private val containingDeclarationRef = firRef(containingDeclaration, resolveState)
|
||||||
|
private val annotationCallRef by weakRef(annotationCall)
|
||||||
|
|
||||||
|
override val psi: KtCallElement? by containingDeclarationRef.withFirAndCache { fir ->
|
||||||
|
annotationCallRef.findPsi(fir.session) as? KtCallElement
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ConeClassLikeType.expandTypeAliasIfNeeded(session: FirSession): ConeClassLikeType {
|
||||||
|
val firTypeAlias = lookupTag.toSymbol(session) as? FirTypeAliasSymbol ?: return this
|
||||||
|
val expandedType = firTypeAlias.fir.expandedTypeRef.coneType
|
||||||
|
return expandedType.fullyExpandedType(session) as? ConeClassLikeType
|
||||||
|
?: return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override val classId: ClassId? by containingDeclarationRef.withFirAndCache(FirResolvePhase.TYPES) {
|
||||||
|
val declaredCone = annotationCallRef.annotationTypeRef.coneType as? ConeClassLikeType
|
||||||
|
declaredCone?.expandTypeAliasIfNeeded(it.session)?.classId
|
||||||
|
}
|
||||||
|
|
||||||
|
override val useSiteTarget: AnnotationUseSiteTarget? get() = annotationCallRef.useSiteTarget
|
||||||
|
|
||||||
|
override val arguments: List<KtNamedConstantValue> by containingDeclarationRef.withFirAndCache(FirResolvePhase.TYPES) {
|
||||||
|
mapAnnotationParameters(annotationCallRef, it.session).map { (name, expression) ->
|
||||||
|
KtNamedConstantValue(name, expression.convertConstantExpression())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+2
-4
@@ -13,10 +13,8 @@ import org.jetbrains.kotlin.idea.fir.findPsi
|
|||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtAnonymousObjectSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtAnonymousObjectSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
|
||||||
@@ -35,8 +33,8 @@ internal class KtFirAnonymousObjectSymbol(
|
|||||||
override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL
|
override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL
|
||||||
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
|
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val superTypes: List<KtType> by firRef.withFirAndCache(FirResolvePhase.SUPER_TYPES) { fir ->
|
override val superTypes: List<KtType> by firRef.withFirAndCache(FirResolvePhase.SUPER_TYPES) { fir ->
|
||||||
|
|||||||
+5
-4
@@ -13,9 +13,10 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolModality
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolModality
|
||||||
@@ -45,8 +46,8 @@ internal class KtFirClassOrObjectSymbol(
|
|||||||
|
|
||||||
override val visibility: KtSymbolVisibility get() = getVisibility()
|
override val visibility: KtSymbolVisibility get() = getVisibility()
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val isInner: Boolean get() = firRef.withFir(FirResolvePhase.STATUS) { it.isInner }
|
override val isInner: Boolean get() = firRef.withFir(FirResolvePhase.STATUS) { it.isInner }
|
||||||
|
|||||||
+2
-3
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirConstructorSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirConstructorSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
|
||||||
@@ -49,8 +48,8 @@ internal class KtFirConstructorSymbol(
|
|||||||
|
|
||||||
override val visibility: KtSymbolVisibility get() = getVisibility()
|
override val visibility: KtSymbolVisibility get() = getVisibility()
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val containingClassIdIfNonLocal: ClassId?
|
override val containingClassIdIfNonLocal: ClassId?
|
||||||
|
|||||||
+5
-5
@@ -11,15 +11,15 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
|||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal class KtFirConstructorValueParameterSymbol(
|
internal class KtFirConstructorValueParameterSymbol(
|
||||||
@@ -41,8 +41,8 @@ internal class KtFirConstructorValueParameterSymbol(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val constructorParameterKind: KtConstructorParameterSymbolKind
|
override val constructorParameterKind: KtConstructorParameterSymbolKind
|
||||||
|
|||||||
+2
-4
@@ -7,12 +7,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFileSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFileSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
@@ -35,7 +33,7 @@ internal class KtFirFileSymbol(
|
|||||||
TODO("Creating pointers for files from library is not supported yet")
|
TODO("Creating pointers for files from library is not supported yet")
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-9
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberFunctionSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberFunctionSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
||||||
@@ -48,20 +47,16 @@ internal class KtFirFunctionSymbol(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val isSuspend: Boolean get() = firRef.withFir { it.isSuspend }
|
override val isSuspend: Boolean get() = firRef.withFir { it.isSuspend }
|
||||||
override val isOverride: Boolean get() = firRef.withFir { it.isOverride }
|
override val isOverride: Boolean get() = firRef.withFir { it.isOverride }
|
||||||
|
|
||||||
override val receiverTypeAndAnnotations: ReceiverTypeAndAnnotations? by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir ->
|
override val receiverType: KtTypeAndAnnotations? by firRef.withFirAndCache { fir ->
|
||||||
fir.receiverTypeRef?.let { typeRef ->
|
fir.receiverTypeRef?.let { typeRef ->
|
||||||
val type = builder.buildKtType(typeRef)
|
KtFirTypeAndAnnotations(fir, typeRef, resolveState, token, builder)
|
||||||
val annotations = typeRef.annotations.mapNotNull {
|
|
||||||
convertAnnotation(it, fir.session)
|
|
||||||
}
|
|
||||||
ReceiverTypeAndAnnotations(type, annotations)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -11,14 +11,13 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
|||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionParameterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal class KtFirFunctionValueParameterSymbol(
|
internal class KtFirFunctionValueParameterSymbol(
|
||||||
@@ -36,8 +35,8 @@ internal class KtFirFunctionValueParameterSymbol(
|
|||||||
|
|
||||||
override val hasDefaultValue: Boolean get() = firRef.withFir { it.defaultValue != null }
|
override val hasDefaultValue: Boolean get() = firRef.withFir { it.defaultValue != null }
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtFunctionParameterSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtFunctionParameterSymbol> {
|
||||||
|
|||||||
+4
-10
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtKotlinPropertySymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtKotlinPropertySymbol
|
||||||
@@ -48,13 +47,9 @@ internal class KtFirKotlinPropertySymbol(
|
|||||||
override val name: Name get() = firRef.withFir { it.name }
|
override val name: Name get() = firRef.withFir { it.name }
|
||||||
override val type: KtType by firRef.withFirAndCache(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { fir -> builder.buildKtType(fir.returnTypeRef) }
|
override val type: KtType by firRef.withFirAndCache(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { fir -> builder.buildKtType(fir.returnTypeRef) }
|
||||||
|
|
||||||
override val receiverTypeAndAnnotations: ReceiverTypeAndAnnotations? by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir ->
|
override val receiverType: KtTypeAndAnnotations? by firRef.withFirAndCache { fir ->
|
||||||
fir.receiverTypeRef?.let { typeRef ->
|
fir.receiverTypeRef?.let { typeRef ->
|
||||||
val type = builder.buildKtType(typeRef)
|
KtFirTypeAndAnnotations(fir, typeRef, resolveState, token, builder)
|
||||||
val annotations = typeRef.annotations.mapNotNull {
|
|
||||||
convertAnnotation(it, fir.session)
|
|
||||||
}
|
|
||||||
ReceiverTypeAndAnnotations(type, annotations)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,9 +66,8 @@ internal class KtFirKotlinPropertySymbol(
|
|||||||
|
|
||||||
override val visibility: KtSymbolVisibility get() = getVisibility()
|
override val visibility: KtSymbolVisibility get() = getVisibility()
|
||||||
|
|
||||||
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
convertAnnotation(it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val callableIdIfNonLocal: FqName?
|
override val callableIdIfNonLocal: FqName?
|
||||||
|
|||||||
+2
-5
@@ -8,14 +8,11 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
||||||
@@ -54,8 +51,8 @@ internal class KtFirPropertyGetterSymbol(
|
|||||||
override val type: KtType by firRef.withFirAndCache { builder.buildKtType(it.returnTypeRef) }
|
override val type: KtType by firRef.withFirAndCache { builder.buildKtType(it.returnTypeRef) }
|
||||||
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
||||||
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
||||||
|
|||||||
+2
-5
@@ -8,12 +8,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
||||||
@@ -23,7 +21,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
|
||||||
|
|
||||||
internal class KtFirPropertySetterSymbol(
|
internal class KtFirPropertySetterSymbol(
|
||||||
fir: FirPropertyAccessor,
|
fir: FirPropertyAccessor,
|
||||||
@@ -45,8 +42,8 @@ internal class KtFirPropertySetterSymbol(
|
|||||||
|
|
||||||
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
||||||
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
override val parameter: KtSetterParameterSymbol by firRef.withFirAndCache { fir ->
|
override val parameter: KtSetterParameterSymbol by firRef.withFirAndCache { fir ->
|
||||||
builder.buildFirSetterParameter(fir.valueParameters.single())
|
builder.buildFirSetterParameter(fir.valueParameters.single())
|
||||||
|
|||||||
+3
-4
@@ -11,14 +11,13 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
|||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal class KtFirSetterParameterSymbol(
|
internal class KtFirSetterParameterSymbol(
|
||||||
@@ -37,8 +36,8 @@ internal class KtFirSetterParameterSymbol(
|
|||||||
|
|
||||||
override val isVararg: Boolean = false
|
override val isVararg: Boolean = false
|
||||||
|
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
convertAnnotation(it)
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtSetterParameterSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtSetterParameterSymbol> {
|
||||||
|
|||||||
+4
-10
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
||||||
@@ -42,13 +41,9 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
|||||||
override val isVal: Boolean get() = firRef.withFir { it.isVal }
|
override val isVal: Boolean get() = firRef.withFir { it.isVal }
|
||||||
override val name: Name get() = firRef.withFir { it.name }
|
override val name: Name get() = firRef.withFir { it.name }
|
||||||
override val type: KtType by firRef.withFirAndCache(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { fir -> builder.buildKtType(fir.returnTypeRef) }
|
override val type: KtType by firRef.withFirAndCache(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { fir -> builder.buildKtType(fir.returnTypeRef) }
|
||||||
override val receiverTypeAndAnnotations: ReceiverTypeAndAnnotations? by firRef.withFirAndCache(FirResolvePhase.TYPES) { fir ->
|
override val receiverType: KtTypeAndAnnotations? by firRef.withFirAndCache { fir ->
|
||||||
fir.receiverTypeRef?.let { typeRef ->
|
fir.receiverTypeRef?.let { typeRef ->
|
||||||
val type = builder.buildKtType(typeRef)
|
KtFirTypeAndAnnotations(fir, typeRef, resolveState, token, builder)
|
||||||
val annotations = typeRef.annotations.mapNotNull {
|
|
||||||
convertAnnotation(it, fir.session)
|
|
||||||
}
|
|
||||||
ReceiverTypeAndAnnotations(type, annotations)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
|
override val isExtension: Boolean get() = firRef.withFir { it.receiverTypeRef != null }
|
||||||
@@ -59,9 +54,8 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
|||||||
|
|
||||||
override val visibility: KtSymbolVisibility get() = getVisibility()
|
override val visibility: KtSymbolVisibility get() = getVisibility()
|
||||||
|
|
||||||
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache { fir ->
|
||||||
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
fir.annotations.map { KtFirAnnotationCall(fir, it, resolveState, token) }
|
||||||
convertAnnotation(it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val callableIdIfNonLocal: FqName?
|
override val callableIdIfNonLocal: FqName?
|
||||||
|
|||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.idea.frontend.api.fir.symbols
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
|
|
||||||
|
internal class KtFirTypeAndAnnotations(
|
||||||
|
containingDeclaration: FirDeclaration,
|
||||||
|
receiverTypeRef: FirTypeRef,
|
||||||
|
resolveState: FirModuleResolveState,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
private val builder: KtSymbolByFirBuilder
|
||||||
|
) : KtTypeAndAnnotations() {
|
||||||
|
|
||||||
|
private val containingDeclarationRef = firRef(containingDeclaration, resolveState)
|
||||||
|
private val receiverWeakTypeRef by weakRef(receiverTypeRef)
|
||||||
|
|
||||||
|
override val type: KtType by containingDeclarationRef.withFirAndCache(FirResolvePhase.TYPES) {
|
||||||
|
builder.buildKtType(receiverWeakTypeRef)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val annotations: List<KtAnnotationCall> by containingDeclarationRef.withFirAndCache { fir ->
|
||||||
|
receiverWeakTypeRef.annotations.map {
|
||||||
|
KtFirAnnotationCall(fir, it, resolveState, token)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
-33
@@ -55,37 +55,4 @@ internal fun FirExpression.convertConstantExpression(): KtConstantValue =
|
|||||||
when (this) {
|
when (this) {
|
||||||
is FirConstExpression<*> -> KtSimpleConstantValue(value)
|
is FirConstExpression<*> -> KtSimpleConstantValue(value)
|
||||||
else -> KtUnsupportedConstantValue
|
else -> KtUnsupportedConstantValue
|
||||||
}
|
|
||||||
|
|
||||||
private fun ConeClassLikeType.expandTypeAliasIfNeeded(session: FirSession): ConeClassLikeType {
|
|
||||||
val firTypeAlias = lookupTag.toSymbol(session) as? FirTypeAliasSymbol ?: return this
|
|
||||||
val expandedType = firTypeAlias.fir.expandedTypeRef.coneType
|
|
||||||
return expandedType.fullyExpandedType(session) as? ConeClassLikeType
|
|
||||||
?: return this
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun convertAnnotation(
|
|
||||||
annotationCall: FirAnnotationCall,
|
|
||||||
session: FirSession
|
|
||||||
): KtFirAnnotationCall? {
|
|
||||||
|
|
||||||
val declaredCone = annotationCall.annotationTypeRef.coneType as? ConeClassLikeType ?: return null
|
|
||||||
|
|
||||||
val classId = declaredCone.expandTypeAliasIfNeeded(session).classId ?: return null
|
|
||||||
|
|
||||||
val resultList = mapAnnotationParameters(annotationCall, session).map {
|
|
||||||
KtNamedConstantValue(it.key, it.value.convertConstantExpression())
|
|
||||||
}
|
|
||||||
|
|
||||||
return KtFirAnnotationCall(
|
|
||||||
classId = classId,
|
|
||||||
useSiteTarget = annotationCall.useSiteTarget,
|
|
||||||
psi = annotationCall.psi as? KtCallElement,
|
|
||||||
arguments = resultList
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun convertAnnotation(declaration: FirAnnotatedDeclaration): List<KtFirAnnotationCall> =
|
|
||||||
declaration.annotations.mapNotNull {
|
|
||||||
convertAnnotation(it, declaration.session)
|
|
||||||
}
|
}
|
||||||
+1
-1
@@ -95,7 +95,7 @@ private fun KtCall.stringRepresentation(): String {
|
|||||||
is KtFunctionLikeSymbol -> buildString {
|
is KtFunctionLikeSymbol -> buildString {
|
||||||
append(if (this@stringValue is KtFunctionSymbol) callableIdIfNonLocal ?: name else "<constructor>")
|
append(if (this@stringValue is KtFunctionSymbol) callableIdIfNonLocal ?: name else "<constructor>")
|
||||||
append("(")
|
append("(")
|
||||||
(this@stringValue as? KtFunctionSymbol)?.receiverTypeAndAnnotations?.let { receiver ->
|
(this@stringValue as? KtFunctionSymbol)?.receiverType?.let { receiver ->
|
||||||
append("<receiver>: ${receiver.type.render()}")
|
append("<receiver>: ${receiver.type.render()}")
|
||||||
if (valueParameters.isNotEmpty()) append(", ")
|
if (valueParameters.isNotEmpty()) append(", ")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user