[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:
+1
-1
@@ -6,7 +6,7 @@ interface A extends C {
|
||||
|
||||
// FILE: B.kt
|
||||
|
||||
interface B : A {
|
||||
interface B : <!EXPOSED_SUPER_INTERFACE!>A<!> {
|
||||
fun bar()
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,6 @@ class J extends K {
|
||||
|
||||
// FILE: K.kt
|
||||
|
||||
class K : J() {
|
||||
class K : <!EXPOSED_SUPER_CLASS!>J<!>() {
|
||||
fun bar() {}
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,6 +12,6 @@ class J extends I {
|
||||
|
||||
// FILE: K.kt
|
||||
|
||||
open class K : J() {
|
||||
open class K : <!EXPOSED_SUPER_CLASS!>J<!>() {
|
||||
fun baz() {}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// FILE: ExceptionTracker.kt
|
||||
|
||||
interface ExceptionTracker : LockBasedStorageManager.ExceptionHandlingStrategy {
|
||||
interface ExceptionTracker : <!EXPOSED_SUPER_INTERFACE!>LockBasedStorageManager.ExceptionHandlingStrategy<!> {
|
||||
}
|
||||
|
||||
// FILE: StorageManager.kt
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
abstract class Outer {
|
||||
protected open class My
|
||||
// Both valid: same way protected
|
||||
protected class Your: My()
|
||||
abstract protected fun foo(my: My): Your
|
||||
}
|
||||
|
||||
class OuterDerived: Outer() {
|
||||
// valid, My has better visibility
|
||||
protected class His: Outer.My()
|
||||
// valid, My and Your have better visibility
|
||||
override fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>(<!EXPOSED_PARAMETER_TYPE!>my: Outer.My<!>) = Outer.Your()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
abstract class Outer {
|
||||
protected open class My
|
||||
// Both valid: same way protected
|
||||
|
||||
@@ -16,29 +16,29 @@ class MyJavaClass {
|
||||
//FILE:a.kt
|
||||
package a
|
||||
|
||||
val mc = MyJavaClass()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc<!> = MyJavaClass()
|
||||
val x = MyJavaClass.staticMethod()
|
||||
val y = MyJavaClass.NestedClass.staticMethodOfNested()
|
||||
val z = MyJavaClass.NestedClass()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = MyJavaClass.NestedClass()
|
||||
|
||||
//FILE: b.kt
|
||||
package b
|
||||
|
||||
import a.MyJavaClass
|
||||
|
||||
val mc1 = <!HIDDEN!>MyJavaClass<!>()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc1<!> = <!HIDDEN!>MyJavaClass<!>()
|
||||
|
||||
val x = MyJavaClass.<!HIDDEN!>staticMethod<!>()
|
||||
val y = MyJavaClass.NestedClass.<!HIDDEN!>staticMethodOfNested<!>()
|
||||
val z = MyJavaClass.<!HIDDEN!>NestedClass<!>()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = MyJavaClass.<!HIDDEN!>NestedClass<!>()
|
||||
|
||||
//FILE: c.kt
|
||||
package a.c
|
||||
|
||||
import a.MyJavaClass
|
||||
|
||||
val mc1 = <!HIDDEN!>MyJavaClass<!>()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>mc1<!> = <!HIDDEN!>MyJavaClass<!>()
|
||||
|
||||
val x = MyJavaClass.<!HIDDEN!>staticMethod<!>()
|
||||
val y = MyJavaClass.NestedClass.<!HIDDEN!>staticMethodOfNested<!>()
|
||||
val z = MyJavaClass.<!HIDDEN!>NestedClass<!>()
|
||||
val <!EXPOSED_PROPERTY_TYPE!>z<!> = MyJavaClass.<!HIDDEN!>NestedClass<!>()
|
||||
|
||||
Reference in New Issue
Block a user