diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt index 0aaa30bd31a..d57c4b63e97 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt @@ -16,7 +16,7 @@ interface KtScope : ValidityOwner { fun getAllSymbols(): Sequence - fun getCallableSymbols(): Sequence + fun getCallableSymbols(): Sequence fun getClassClassLikeSymbols(): Sequence fun containsName(name: Name): Boolean 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 new file mode 100644 index 00000000000..19288e840b3 --- /dev/null +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtCallableSymbol.kt @@ -0,0 +1,8 @@ +/* + * 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.symbols + +abstract class KtCallableSymbol : KtSymbol \ 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 fdcafadfeb2..97311dd72cd 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 @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.symbols import org.jetbrains.kotlin.name.FqName -sealed class KtFunctionLikeSymbol : KtTypedSymbol, KtSymbolWithKind { +sealed class KtFunctionLikeSymbol : KtCallableSymbol(), KtTypedSymbol, KtSymbolWithKind { abstract val valueParameters: List } 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 d6956b5531e..08225f7616d 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 @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.symbols import org.jetbrains.kotlin.name.FqName -abstract class KtVariableLikeSymbol : KtTypedSymbol, KtNamedSymbol, KtSymbolWithKind +abstract class KtVariableLikeSymbol : KtCallableSymbol(), KtTypedSymbol, KtNamedSymbol, KtSymbolWithKind abstract class KtEnumEntrySymbol : KtVariableLikeSymbol() { final override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers.kt index 3c0f23877b7..a9cdc9d14ad 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers.kt @@ -29,6 +29,9 @@ interface KtPossibleExtensionSymbol { val receiverType: KtType? } +val KtCallableSymbol.isExtension: Boolean + get() = (this as? KtPossibleExtensionSymbol)?.isExtension == true + interface KtSymbolWithTypeParameters { val typeParameters: List } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index 3eab7fdcc91..959df7bb52c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -32,10 +32,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirIntersectionType import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirTypeArgumentWithVariance import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirTypeParameterType import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.name.FqName @@ -72,6 +69,9 @@ internal class KtSymbolByFirBuilder( } } + // TODO Handle all relevant cases + fun buildCallableSymbol(fir: FirCallableDeclaration<*>): KtCallableSymbol = buildSymbol(fir) as KtCallableSymbol + fun buildClassLikeSymbol(fir: FirClassLikeDeclaration<*>): KtClassLikeSymbol = when (fir) { is FirRegularClass -> buildClassSymbol(fir) is FirTypeAlias -> buildTypeAliasSymbol(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt index 351033544ba..b7ca03f7e14 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion @@ -45,7 +46,7 @@ class KtFirCompositeScope( } } - override fun getCallableSymbols(): Sequence = withValidityAssertion { + override fun getCallableSymbols(): Sequence = withValidityAssertion { sequence { subScopes.forEach { yieldAll(it.getCallableSymbols()) } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt index 26ae774ef78..0420b2ccaac 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion @@ -48,10 +49,10 @@ internal abstract class KtFirDelegatingScope(private val builder: KtSymbolByFirB } } - override fun getCallableSymbols(): Sequence = withValidityAssertion { + override fun getCallableSymbols(): Sequence = withValidityAssertion { sequence { firScope.getCallableNames().forEach { name -> - val callables = mutableListOf() + val callables = mutableListOf() firScope.processFunctionsByName(name) { firSymbol -> (firSymbol.fir as? FirSimpleFunction)?.let { fir -> callables.add(builder.buildFunctionSymbol(fir, firSymbol.realDeclarationOrigin())) @@ -62,7 +63,7 @@ internal abstract class KtFirDelegatingScope(private val builder: KtSymbolByFirB firSymbol is FirPropertySymbol && firSymbol.isFakeOverride -> { builder.buildVariableSymbol(firSymbol.fir, firSymbol.realDeclarationOrigin()) } - else -> builder.buildSymbol(firSymbol.fir) + else -> builder.buildCallableSymbol(firSymbol.fir) } callables.add(symbol) }