[FIR] Refactor effective visibility calculation

Before this commit, we had effective visibility as a part of FIR status,
so it was integrated into the full pipeline. In this commit,
we introduced "effective visibility as a service" which is now used
only by exposed visibility checker. This allows us to make the thing
universal for all FIR nodes, including nodes for Java / deserialized.
This commit is contained in:
Nick
2020-07-15 17:23:21 +03:00
committed by Mikhail Glukhikh
parent b15e32936e
commit 7145caca40
95 changed files with 713 additions and 484 deletions
@@ -1,23 +1,23 @@
FILE: implicitInAnonymous.kt
private final val x: R|<anonymous>| = object : R|kotlin/Any| {
private[local] constructor(): R|<anonymous>| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
public[local] final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
^foo this@R|/<anonymous>|.R|/<anonymous>.bar|(R|<local>/x|)
}
public[local] final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
^bar CMP(>, this@R|/<anonymous>|.R|kotlin/Any.hashCode|().R|kotlin/Int.plus|(R|<local>/y|).R|kotlin/Int.compareTo|(Int(0)))
}
public[local] final val w: R|kotlin/Boolean|
public final val w: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ this@R|/<anonymous>|.R|/<anonymous>.z|
}
public[local] final val z: R|kotlin/Boolean|
public final val z: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ ==(this@R|/<anonymous>|.R|kotlin/Any.hashCode|(), Int(0))
}
@@ -3,24 +3,24 @@ FILE: implicitInLocalClasses.kt
}
public final fun main(): R|kotlin/Unit| {
local final class A : R|kotlin/Any| {
public[local] constructor(): R|A| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
public[local] final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
^foo this@R|/A|.R|/A.bar|(R|<local>/x|)
}
public[local] final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
^bar CMP(>, this@R|/A|.R|kotlin/Any.hashCode|().R|kotlin/Int.plus|(R|<local>/y|).R|kotlin/Int.compareTo|(Int(0)))
}
public[local] final val w: R|kotlin/Boolean|
public final val w: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ this@R|/A|.R|/A.z|
}
public[local] final val z: R|kotlin/Boolean|
public final val z: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ ==(this@R|/A|.R|kotlin/Any.hashCode|(), Int(0))
}
@@ -33,32 +33,32 @@ FILE: implicitInLocalClasses.kt
R|/useBoolean|(R|<local>/a|.R|/A.w|)
R|/useBoolean|(R|<local>/a|.R|/A.z|)
local final class B : R|kotlin/Any| {
public[local] constructor(): R|B| {
public constructor(): R|B| {
super<R|kotlin/Any|>()
}
public[local] final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun foo(x: R|kotlin/Int|): R|kotlin/Boolean| {
^foo this@R|/B|.R|/B.inner|.R|/B.Inner.w|
}
public[local] final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
public final fun bar(y: R|kotlin/Int|): R|kotlin/Boolean| {
^bar CMP(>, this@R|/B|.R|kotlin/Any.hashCode|().R|kotlin/Int.plus|(R|<local>/y|).R|kotlin/Int.compareTo|(Int(0)))
}
public[local] final val inner: R|B.Inner| = this@R|/B|.R|/B.Inner.Inner|()
public final val inner: R|B.Inner| = this@R|/B|.R|/B.Inner.Inner|()
public get(): R|B.Inner|
local final inner class Inner : R|kotlin/Any| {
public[local] constructor(): R|B.Inner| {
public constructor(): R|B.Inner| {
super<R|kotlin/Any|>()
}
public[local] final val w: R|kotlin/Boolean|
public final val w: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ this@R|/B.Inner|.R|/B.Inner.z|
}
public[local] final val z: R|kotlin/Boolean|
public final val z: R|kotlin/Boolean|
public get(): R|kotlin/Boolean| {
^ this@R|/B|.R|/B.bar|(Int(1))
}
@@ -12,11 +12,11 @@ FILE: typesFromSuperClasses.kt
}
public final fun main(): R|kotlin/Unit| {
object : R|Outer| {
private[local] constructor(): R|<anonymous>| {
private constructor(): R|<anonymous>| {
super<R|Outer|>()
}
public[local] final fun foo(n: R|Outer.Nested|): R|kotlin/Unit| {
public final fun foo(n: R|Outer.Nested|): R|kotlin/Unit| {
R|<local>/n|.R|/Outer.Nested.bar|()
}