[FIR] Fix calculating arguments of bare type with intersection type as base

This commit is contained in:
Dmitriy Novozhilov
2021-02-19 14:01:44 +03:00
committed by TeamCityServer
parent 56f9e3360f
commit d40777c28f
6 changed files with 87 additions and 16 deletions
@@ -0,0 +1,21 @@
FILE: castToBareType.kt
public abstract interface FirDeclaration : R|kotlin/Any| {
}
public abstract interface FirSymbolOwner<E : R|FirSymbolOwner<E>|> : R|kotlin/Any| {
public abstract val symbol: R|AbstractFirBasedSymbol<E>|
public get(): R|AbstractFirBasedSymbol<E>|
}
public abstract interface FirFunction<F : R|FirFunction<F>|> : R|FirSymbolOwner<F>|, R|FirDeclaration| {
}
public abstract interface AbstractFirBasedSymbol<E : R|FirSymbolOwner<E>|, R|FirDeclaration|> : R|kotlin/Any| {
public abstract val fir: R|E|
public get(): R|E|
}
public final fun foo(firAdaptee: R|FirFunction<*>|): R|kotlin/Unit| {
}
public final fun test(symbol: R|AbstractFirBasedSymbol<*>|): R|kotlin/Unit| {
lval firAdaptee: R|FirFunction<out it(FirSymbolOwner<out it(FirSymbolOwner<out it(FirSymbolOwner<out it(FirSymbolOwner<out kotlin/Any?> & FirDeclaration)> & FirDeclaration)> & FirDeclaration)> & FirDeclaration)>| = (R|<local>/symbol|.R|SubstitutionOverride</AbstractFirBasedSymbol.fir: R|CapturedType(*)|>| as R|FirFunction<out it(FirSymbolOwner<out it(FirSymbolOwner<out it(FirSymbolOwner<out it(FirSymbolOwner<out kotlin/Any?> & FirDeclaration)> & FirDeclaration)> & FirDeclaration)> & FirDeclaration)>|)
R|/foo|(R|<local>/firAdaptee|)
}
@@ -0,0 +1,17 @@
interface FirDeclaration
interface FirSymbolOwner<E : FirSymbolOwner<E>> {
val symbol: AbstractFirBasedSymbol<E>
}
interface FirFunction<F : FirFunction<F>> : FirSymbolOwner<F>, FirDeclaration
interface AbstractFirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
val fir: E
}
fun foo(firAdaptee: FirFunction<*>) {}
fun test(symbol: AbstractFirBasedSymbol<*>) {
val firAdaptee = symbol.fir as FirFunction
foo(firAdaptee)
}