From accc0e3761969c2d50c3c14e1859cc33593a5a9c Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 3 May 2021 17:05:54 +0200 Subject: [PATCH] FIR IDE: make KtCallableSymbol to be always KtPossiblyExtensionSymbol --- .../kotlin/idea/fir/fe10/BaseDescriptorsWrappers.kt | 2 +- .../completion/KotlinFirCompletionContributor.kt | 1 - .../idea/core/overrideImplement/KtClassMember.kt | 3 +-- .../idea/frontend/api/symbols/KtCallableSymbol.kt | 4 ++++ .../frontend/api/symbols/KtFunctionLikeSymbol.kt | 5 +++-- .../idea/frontend/api/symbols/KtIconProvider.kt | 1 - .../frontend/api/symbols/KtPropertyAccessorSymbol.kt | 2 ++ .../frontend/api/symbols/KtVariableLikeSymbol.kt | 12 +++++++++++- ...bleExtensionSymbol.kt => KtTypeAndAnnotations.kt} | 10 +--------- .../parameters/FirLightParameterForReceiver.kt | 2 -- 10 files changed, 23 insertions(+), 19 deletions(-) rename idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/{KtPossibleExtensionSymbol.kt => KtTypeAndAnnotations.kt} (72%) diff --git a/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/BaseDescriptorsWrappers.kt b/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/BaseDescriptorsWrappers.kt index e844a7572fd..42927ecb06a 100644 --- a/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/BaseDescriptorsWrappers.kt +++ b/idea/idea-fir-fe10-binding/src/org/jetbrains/kotlin/idea/fir/fe10/BaseDescriptorsWrappers.kt @@ -436,7 +436,7 @@ private fun KtSymbolBasedDeclarationDescriptor.getDispatchReceiverParameter(ktSy } private fun T.getExtensionReceiverParameter( - ktSymbol: KtPossibleExtensionSymbol + ktSymbol: KtCallableSymbol, ): ReceiverParameterDescriptor? where T : KtSymbolBasedDeclarationDescriptor, T : CallableDescriptor { val receiverTypeAndAnnotation = ktSymbol.receiverType ?: return null val receiverValue = ExtensionReceiver(this, receiverTypeAndAnnotation.type.toKotlinType(context), null) diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt index 1744c42bcf2..6542c29967c 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithVisibility -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isExtension import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.references.mainReference diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/core/overrideImplement/KtClassMember.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/core/overrideImplement/KtClassMember.kt index 16dd6b77edb..d155a28f750 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/core/overrideImplement/KtClassMember.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/core/overrideImplement/KtClassMember.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySymbol 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.j2k.IdeaDocCommentConverter import org.jetbrains.kotlin.idea.kdoc.KDocElementFactory import org.jetbrains.kotlin.lexer.KtTokens @@ -85,7 +84,7 @@ internal fun KtAnalysisSession.generateMember( ): KtCallableDeclaration = with(ktClassMember) { val bodyType = when { targetClass?.hasExpectModifier() == true -> BodyType.NO_BODY - (symbol as? KtPossibleExtensionSymbol)?.isExtension == true && mode == MemberGenerateMode.OVERRIDE -> BodyType.FROM_TEMPLATE + symbol.isExtension && mode == MemberGenerateMode.OVERRIDE -> BodyType.FROM_TEMPLATE else -> bodyType } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtCallableSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtCallableSymbol.kt index 55e62b72eac..db9a43401bb 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtCallableSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtCallableSymbol.kt @@ -13,5 +13,9 @@ import org.jetbrains.kotlin.name.CallableId abstract class KtCallableSymbol : KtSymbol, KtSymbolWithKind { abstract val callableIdIfNonLocal: CallableId? abstract val annotatedType: KtTypeAndAnnotations + + abstract val receiverType: KtTypeAndAnnotations? + abstract val isExtension: Boolean + abstract override fun createPointer(): KtSymbolPointer } \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt index 1ffb32fb861..4298fef13a8 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtFunctionLikeSymbol.kt @@ -17,7 +17,7 @@ abstract class KtFunctionLikeSymbol : KtCallableSymbol(), KtSymbolWithKind { abstract override fun createPointer(): KtSymbolPointer } -abstract class KtAnonymousFunctionSymbol : KtFunctionLikeSymbol(), KtPossibleExtensionSymbol { +abstract class KtAnonymousFunctionSymbol : KtFunctionLikeSymbol() { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.LOCAL final override val callableIdIfNonLocal: CallableId? get() = null @@ -26,7 +26,6 @@ abstract class KtAnonymousFunctionSymbol : KtFunctionLikeSymbol(), KtPossibleExt abstract class KtFunctionSymbol : KtFunctionLikeSymbol(), KtNamedSymbol, - KtPossibleExtensionSymbol, KtPossibleMemberSymbol, KtSymbolWithTypeParameters, KtSymbolWithModality, @@ -52,6 +51,8 @@ abstract class KtConstructorSymbol : KtFunctionLikeSymbol(), final override val callableIdIfNonLocal: CallableId? get() = null final override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract override fun createPointer(): KtSymbolPointer } \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtIconProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtIconProvider.kt index 08d6b1ed7b4..fcefbb7b60e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtIconProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtIconProvider.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtPossibleMemberSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithModality import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithVisibility -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isExtension import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclaration import javax.swing.Icon diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtPropertyAccessorSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtPropertyAccessorSymbol.kt index 802a28d1e9e..05d466c4592 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtPropertyAccessorSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtPropertyAccessorSymbol.kt @@ -17,6 +17,8 @@ sealed class KtPropertyAccessorSymbol : KtCallableSymbol(), KtSymbolWithKind { final override val callableIdIfNonLocal: CallableId? get() = null + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract val isDefault: Boolean abstract val isInline: Boolean diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt index b21c8f02e55..2a4ac580418 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtVariableLikeSymbol.kt @@ -36,6 +36,8 @@ abstract class KtBackingFieldSymbol : KtVariableLikeSymbol() { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.LOCAL final override val origin: KtSymbolOrigin get() = KtSymbolOrigin.PROPERTY_BACKING_FIELD final override val callableIdIfNonLocal: CallableId? get() = null + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract override fun createPointer(): KtSymbolPointer @@ -47,8 +49,11 @@ abstract class KtBackingFieldSymbol : KtVariableLikeSymbol() { abstract class KtEnumEntrySymbol : KtVariableLikeSymbol(), KtSymbolWithMembers, KtSymbolWithKind { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract val containingEnumClassIdIfNonLocal: ClassId? + abstract override fun createPointer(): KtSymbolPointer } @@ -64,12 +69,13 @@ abstract class KtJavaFieldSymbol : KtSymbolWithVisibility, KtSymbolWithKind { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract override fun createPointer(): KtSymbolPointer } sealed class KtPropertySymbol : KtVariableSymbol(), - KtPossibleExtensionSymbol, KtPossibleMemberSymbol, KtSymbolWithModality, KtSymbolWithVisibility, @@ -114,6 +120,8 @@ abstract class KtSyntheticJavaPropertySymbol : KtPropertySymbol() { abstract class KtLocalVariableSymbol : KtVariableSymbol(), KtSymbolWithKind { final override val callableIdIfNonLocal: CallableId? get() = null + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract override fun createPointer(): KtSymbolPointer } @@ -121,6 +129,8 @@ abstract class KtLocalVariableSymbol : KtVariableSymbol(), KtSymbolWithKind { abstract class KtValueParameterSymbol : KtVariableLikeSymbol(), KtSymbolWithKind, KtAnnotatedSymbol { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.LOCAL final override val callableIdIfNonLocal: CallableId? get() = null + final override val isExtension: Boolean get() = false + final override val receiverType: KtTypeAndAnnotations? get() = null abstract val hasDefaultValue: Boolean abstract val isVararg: Boolean diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtPossibleExtensionSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtTypeAndAnnotations.kt similarity index 72% rename from idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtPossibleExtensionSymbol.kt rename to idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtTypeAndAnnotations.kt index 18fff49afc3..f2cd32de397 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtPossibleExtensionSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/KtTypeAndAnnotations.kt @@ -12,12 +12,4 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType abstract class KtTypeAndAnnotations : ValidityTokenOwner { abstract val type: KtType abstract val annotations: List -} - -interface KtPossibleExtensionSymbol { - val receiverType: KtTypeAndAnnotations? - val isExtension: Boolean -} - -val KtCallableSymbol.isExtension: Boolean - get() = (this as? KtPossibleExtensionSymbol)?.isExtension == true +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForReceiver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForReceiver.kt index 007a9a3f16d..4842c38d27b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForReceiver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForReceiver.kt @@ -17,7 +17,6 @@ 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.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtPossibleExtensionSymbol import org.jetbrains.kotlin.psi.KtParameter internal class FirLightParameterForReceiver private constructor( @@ -34,7 +33,6 @@ internal class FirLightParameterForReceiver private constructor( ): FirLightParameterForReceiver? { if (callableSymbol !is KtNamedSymbol) return null - if (callableSymbol !is KtPossibleExtensionSymbol) return null if (!callableSymbol.isExtension) return null val extensionTypeAndAnnotations = callableSymbol.receiverType ?: return null