[FIR] Branch delegating constructor call resolve by isInner from start

This commit is contained in:
Mikhail Glukhikh
2020-05-08 14:32:44 +03:00
parent 28c0dac36f
commit f48ff2679e
2 changed files with 9 additions and 9 deletions
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
class FirTowerResolver(
@@ -206,20 +206,21 @@ class FirTowerResolverSession internal constructor(
private suspend fun runResolverForDelegatingConstructorCall(info: CallInfo, constructorClassSymbol: FirClassSymbol<*>) {
val scope = constructorClassSymbol.fir.unsubstitutedScope(session, components.scopeSession)
// Search for non-inner constructors only
processLevel(
scope.toScopeTowerLevel(),
info, TowerGroup.Implicit(0)
)
// Search for inner constructors only
if (constructorClassSymbol is FirRegularClassSymbol) {
if (constructorClassSymbol is FirRegularClassSymbol && constructorClassSymbol.fir.isInner) {
// Search for inner constructors only
// 1 because we search for inner constructor in outer class
implicitReceiversUsableAsValues.getOrNull(1)?.let { (implicitReceiverValue) ->
processLevel(
implicitReceiverValue.toMemberScopeTowerLevel(),
info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Implicit(1)
info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Member
)
}
} else {
// Search for non-inner constructors only
processLevel(
scope.toScopeTowerLevel(),
info, TowerGroup.Member
)
}
}