[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() {
inner class InnerDerived : Inner() {
inner class VeryInner : <!UNRESOLVED_REFERENCE!>Inner<!>() {
inner class VeryVeryInner : <!UNRESOLVED_REFERENCE!>Inner<!>()
inner class VeryInner : Inner() {
inner class VeryVeryInner : Inner()
}
}
}
@@ -24,12 +24,12 @@ FILE: innerClassHierarchy.kt
public final inner class VeryInner : R|Base.Inner| {
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 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)
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) ->
for ((implicitReceiverValue, depth) in implicitReceiversUsableAsValues.drop(1)) {
processLevel(
implicitReceiverValue.toMemberScopeTowerLevel(),
info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Member
info.copy(name = constructorClassSymbol.fir.name), TowerGroup.Implicit(depth)
)
}
} else {