FIR IDE: specify behaviour of HL API getOverriddenSymbols

- Split it into two functions getAllOverriddenSymbols and getDirectlyOverriddenSymbols
- Implement tests for getOverriddenSymbols
- temporary mute inheritance.kt light classes test
This commit is contained in:
Ilya Kirillov
2021-02-18 20:27:39 +01:00
parent 804df1aec2
commit b08eb6cf4c
16 changed files with 435 additions and 43 deletions
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import kotlin.reflect.KClass
/**
* The entry point into all frontend-related work. Has the following contracts:
@@ -59,12 +58,30 @@ abstract class KtAnalysisSession(final override val token: ValidityToken) : Vali
abstract fun createContextDependentCopy(originalKtFile: KtFile, fakeKtElement: KtElement): KtAnalysisSession
//TODO get rid of it
fun KtCallableSymbol.getOverriddenSymbols(containingDeclaration: KtClassOrObjectSymbol): List<KtCallableSymbol> =
symbolDeclarationOverridesProvider.getOverriddenSymbols(this, containingDeclaration)
fun KtCallableSymbol.getOverriddenSymbols(): List<KtCallableSymbol> =
symbolDeclarationOverridesProvider.getOverriddenSymbols(this)
/**
* Return a list of **all** symbols which are overridden by symbol
*
* E.g, if we have `A.foo` overrides `B.foo` overrides `C.foo`, all two super declarations `B.foo`, `C.foo` will be returned
*
* Unwraps substituted overridden symbols (see [org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin.INTERSECTION_OVERRIDE])
*
* @see getDirectlyOverriddenSymbols
*/
fun KtCallableSymbol.getAllOverriddenSymbols(): List<KtCallableSymbol> =
symbolDeclarationOverridesProvider.getAllOverriddenSymbols(this)
/**
* Return a list of symbols which are **directly** overridden by symbol
**
* E.g, if we have `A.foo` overrides `B.foo` overrides `C.foo`, only declarations directly overriden `B.foo` will be returned
*
* Unwraps substituted overridden symbols (see [org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin.INTERSECTION_OVERRIDE])
*
* @see getAllOverriddenSymbols
*/
fun KtCallableSymbol.getDirectlyOverriddenSymbols(): List<KtCallableSymbol> =
symbolDeclarationOverridesProvider.getDirectlyOverriddenSymbols(this)
fun KtCallableSymbol.getIntersectionOverriddenSymbols(): Collection<KtCallableSymbol> =
symbolDeclarationOverridesProvider.getIntersectionOverriddenSymbols(this)
@@ -11,20 +11,20 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
abstract class KtSymbolDeclarationOverridesProvider : KtAnalysisSessionComponent() {
/**
* Returns symbols that overridden by requested
* Returns symbols that are overridden by requested
*/
abstract fun <T : KtSymbol> getOverriddenSymbols(
abstract fun <T : KtSymbol> getAllOverriddenSymbols(
callableSymbol: T,
containingDeclaration: KtClassOrObjectSymbol
): List<KtCallableSymbol>
/**
* Returns symbols that overridden by requested
* Returns symbols that are overridden by requested
*/
abstract fun <T : KtSymbol> getOverriddenSymbols(
abstract fun <T : KtSymbol> getDirectlyOverriddenSymbols(
callableSymbol: T,
): List<KtCallableSymbol>
/**
* If [symbol] origin is [org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin.INTERSECTION_OVERRIDE]
* Then returns the symbols which [symbol] overrides, otherwise empty collection