diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt index ebbe126936f..fe0a8083d59 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt @@ -12,12 +12,10 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.withArguments import org.jetbrains.kotlin.fir.resolve.withNullability import org.jetbrains.kotlin.fir.service -import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol -import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol -import org.jetbrains.kotlin.fir.symbols.StandardClassIds -import org.jetbrains.kotlin.fir.symbols.invoke +import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl +import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeCheckerContext import org.jetbrains.kotlin.types.model.* @@ -59,12 +57,16 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, nullable: Boolean ): SimpleTypeMarker { require(constructor is ConeClassifierSymbol) - when (constructor) { - is ConeClassLikeSymbol -> return ConeClassTypeImpl( + return when (constructor) { + is ConeClassLikeSymbol -> ConeClassTypeImpl( constructor.toLookupTag(), (arguments as List).toTypedArray(), nullable ) + is ConeTypeParameterSymbol -> ConeTypeParameterTypeImpl( + constructor.toLookupTag(), + nullable + ) else -> error("!") } diff --git a/compiler/fir/resolve/testData/resolve/stdlib/typeParameterDerived.txt b/compiler/fir/resolve/testData/resolve/stdlib/typeParameterDerived.txt new file mode 100644 index 00000000000..1cac6c9ed6c --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/typeParameterDerived.txt @@ -0,0 +1,16 @@ +FILE: typeParameterDerived.kt + public final inline fun R|kotlin/collections/MutableMap|.getOrPut(key: R|K|, defaultValue: R|kotlin/Function1|, postCompute: R|kotlin/Function1|): R|V| { + lval value: R|V| = R|FakeOverride|(R|/key|) + ^getOrPut when () { + ==(R|/value|, Null(null)) -> { + lval answer: R|VA| = R|/defaultValue|.R|FakeOverride|(R|/key|) + R|FakeOverride|(R|/key|, R|/answer|) + R|/postCompute|.R|FakeOverride|(R|/answer|) + R|/answer| + } + else -> { + R|/value| + } + } + + }