[FIR] Use all implicit receivers for del. constructors, not just one

This commit is contained in:
Mikhail Glukhikh
2020-05-12 11:50:07 +03:00
parent 535b4434a8
commit 22e7264460
3 changed files with 6 additions and 7 deletions
@@ -4,8 +4,8 @@ open class Base {
class Derived : Base() { class Derived : Base() {
inner class InnerDerived : Inner() { inner class InnerDerived : Inner() {
inner class VeryInner : <!UNRESOLVED_REFERENCE!>Inner<!>() { inner class VeryInner : Inner() {
inner class VeryVeryInner : <!UNRESOLVED_REFERENCE!>Inner<!>() inner class VeryVeryInner : Inner()
} }
} }
} }
@@ -24,12 +24,12 @@ FILE: innerClassHierarchy.kt
public final inner class VeryInner : R|Base.Inner| { public final inner class VeryInner : R|Base.Inner| {
public constructor(): R|Derived.InnerDerived.VeryInner| { public constructor(): R|Derived.InnerDerived.VeryInner| {
super<R|Base.Inner|>() this@R|/Derived|.super<R|Base.Inner|>()
} }
public final inner class VeryVeryInner : R|Base.Inner| { public final inner class VeryVeryInner : R|Base.Inner| {
public constructor(): R|Derived.InnerDerived.VeryInner.VeryVeryInner| { public constructor(): R|Derived.InnerDerived.VeryInner.VeryVeryInner| {
super<R|Base.Inner|>() this@R|/Derived|.super<R|Base.Inner|>()
} }
} }
@@ -208,11 +208,10 @@ class FirTowerResolverSession internal constructor(
val scope = constructorClassSymbol.fir.unsubstitutedScope(session, components.scopeSession) val scope = constructorClassSymbol.fir.unsubstitutedScope(session, components.scopeSession)
if (constructorClassSymbol is FirRegularClassSymbol && constructorClassSymbol.fir.isInner) { if (constructorClassSymbol is FirRegularClassSymbol && constructorClassSymbol.fir.isInner) {
// Search for inner constructors only // Search for inner constructors only
// 1 because we search for inner constructor in outer class for ((implicitReceiverValue, depth) in implicitReceiversUsableAsValues.drop(1)) {
implicitReceiversUsableAsValues.getOrNull(1)?.let { (implicitReceiverValue) ->
processLevel( processLevel(
implicitReceiverValue.toMemberScopeTowerLevel(), implicitReceiverValue.toMemberScopeTowerLevel(),
info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Member info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Implicit(depth)
) )
} }
} else { } else {