From 46e432df5407376e1dc4e295c9e7c360d163a60f Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 14 Mar 2019 17:57:31 +0300 Subject: [PATCH] FIR: Prevent failing on constructor substitution --- .../fir/scopes/impl/FirClassSubstitutionScope.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index 167aa09691b..3ce72f03d16 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -6,11 +6,14 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirNamedFunction import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump +import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.* @@ -77,6 +80,7 @@ class FirClassSubstitutionScope( is ConeFunctionType -> TODO("Substitute function type properly") is ConeClassLikeType -> error("Unknown class-like type to substitute: $this, ${this::class}") is ConeFlexibleType -> error("Trying to substitute arguments for flexible type") + is ConeCapturedType -> error("Not supported") } } return null @@ -104,7 +108,11 @@ class FirClassSubstitutionScope( original: ConeFunctionSymbol, name: Name ): FirFunctionSymbol { - val member = (original as FirBasedSymbol<*>).fir as? FirNamedFunction ?: error("Can't fake override for $original") + + val member = original.firUnsafe() + if (member is FirConstructor) return original as FirFunctionSymbol // TODO: substitution for constructors + member as FirNamedFunction + val receiverType = member.receiverTypeRef?.coneTypeUnsafe() val newReceiverType = receiverType?.substitute()