[FIR] Report errors about invisible types from type resolution

This commit is contained in:
Dmitriy Novozhilov
2021-11-23 15:18:40 +03:00
committed by teamcityserver
parent f2c319c4ae
commit 8707be51c9
39 changed files with 217 additions and 122 deletions
@@ -17,7 +17,7 @@ FILE: exposedFunctionParameterType.kt
super<R|kotlin/Any|>()
}
public final fun foo(value: R|A.AInner|): R|kotlin/Unit| {
public final fun foo(value: <ERROR TYPE REF: HIDDEN: A.AInner is invisible>): R|kotlin/Unit| {
}
}
@@ -3,7 +3,7 @@ class A {
}
class B {
fun foo(<!EXPOSED_PARAMETER_TYPE!>value: A.AInner<!>) {
fun foo(<!EXPOSED_PARAMETER_TYPE!>value: <!INVISIBLE_REFERENCE!>A.AInner<!><!>) {
}
}
@@ -17,7 +17,7 @@ FILE: exposedFunctionReturnType.kt
super<R|kotlin/Any|>()
}
public final fun foo(str: R|kotlin/String|): R|A.InnerA|
public final fun foo(str: R|kotlin/String|): <ERROR TYPE REF: HIDDEN: A.InnerA is invisible>
}
private final enum class Some : R|kotlin/Enum<Some>| {
@@ -5,7 +5,7 @@ class A {
}
abstract class B {
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>(str: String): A.InnerA<!>
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>fun <!EXPOSED_FUNCTION_RETURN_TYPE!>foo<!>(str: String): <!INVISIBLE_REFERENCE!>A.InnerA<!><!>
}
private enum class Some {
@@ -57,16 +57,16 @@ FILE: exposedPropertyType.kt
public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
public final var var4: R|A.AInnerPrivate|
public get(): R|A.AInnerPrivate|
public set(value: R|A.AInnerPrivate|): R|kotlin/Unit|
public final var var4: <ERROR TYPE REF: HIDDEN: A.AInnerPrivate is invisible>
public get(): <ERROR TYPE REF: HIDDEN: A.AInnerPrivate is invisible>
public set(value: <ERROR TYPE REF: HIDDEN: A.AInnerPrivate is invisible>): R|kotlin/Unit|
public final var var5: R|A.AInnerPublic|
public get(): R|A.AInnerPublic|
public set(value: R|A.AInnerPublic|): R|kotlin/Unit|
public final var var6: R|A.AInnerProtectedEnum|
public get(): R|A.AInnerProtectedEnum|
public set(value: R|A.AInnerProtectedEnum|): R|kotlin/Unit|
public final var var6: <ERROR TYPE REF: HIDDEN: A.AInnerProtectedEnum is invisible>
public get(): <ERROR TYPE REF: HIDDEN: A.AInnerProtectedEnum is invisible>
public set(value: <ERROR TYPE REF: HIDDEN: A.AInnerProtectedEnum is invisible>): R|kotlin/Unit|
}
@@ -17,7 +17,7 @@ class Property {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var var1: String<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var var2: String<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var var3: Int<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var <!EXPOSED_PROPERTY_TYPE!>var4<!>: A.AInnerPrivate<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var <!EXPOSED_PROPERTY_TYPE!>var4<!>: <!INVISIBLE_REFERENCE!>A.AInnerPrivate<!><!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var var5: A.AInnerPublic<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var <!EXPOSED_PROPERTY_TYPE!>var6<!>: A.AInnerProtectedEnum<!>
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var <!EXPOSED_PROPERTY_TYPE!>var6<!>: <!INVISIBLE_REFERENCE!>A.AInnerProtectedEnum<!><!>
}
@@ -74,7 +74,7 @@ FILE: exposedSupertype.kt
}
}
public final class Test4 : R|E|, R|A.AProtectedI| {
public final class Test4 : R|E|, <ERROR TYPE REF: HIDDEN: A.AProtectedI is invisible> {
public constructor(): R|Test4| {
super<R|kotlin/Any|>()
}
@@ -46,7 +46,7 @@ class Test3 : C.CPublicI, <!EXPOSED_SUPER_CLASS, FINAL_SUPERTYPE, SUPERTYPE_NOT_
}
class Test4 : E, A.AProtectedI {
class Test4 : E, <!INVISIBLE_REFERENCE!>A.AProtectedI<!> {
}
@@ -17,7 +17,7 @@ FILE: exposedTypeAlias.kt
super<R|kotlin/Any|>()
}
public final typealias AInner = R|A.Inner|
public final typealias AInner = <ERROR TYPE REF: HIDDEN: A.Inner is invisible>
public final inner class Inner : R|kotlin/Any| {
public B.constructor(): R|B.Inner| {
@@ -35,7 +35,7 @@ FILE: exposedTypeAlias.kt
public final typealias BInner = R|B.Inner|
}
public final typealias AInner0 = R|A.Inner|
public final typealias AInner0 = <ERROR TYPE REF: HIDDEN: A.Inner is invisible>
public final typealias BInner0 = R|B.Inner|
private final typealias MyString = R|kotlin/String|
public final fun foo(): R|MyString| {
@@ -2,7 +2,7 @@ class A {
private inner class Inner
}
class B {
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias <!EXPOSED_TYPEALIAS_EXPANDED_TYPE!>AInner<!> = A.Inner<!>
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias <!EXPOSED_TYPEALIAS_EXPANDED_TYPE!>AInner<!> = <!INVISIBLE_REFERENCE!>A.Inner<!><!>
inner class Inner
}
@@ -10,9 +10,9 @@ class C {
<!TOPLEVEL_TYPEALIASES_ONLY!>typealias BInner = B.Inner<!>
}
typealias <!EXPOSED_TYPEALIAS_EXPANDED_TYPE!>AInner0<!> = A.Inner
typealias <!EXPOSED_TYPEALIAS_EXPANDED_TYPE!>AInner0<!> = <!INVISIBLE_REFERENCE!>A.Inner<!>
typealias BInner0 = B.Inner
private typealias MyString = String
fun foo(): MyString = ""
fun foo(): MyString = ""
@@ -42,8 +42,8 @@ FILE: exposedTypeParameters.kt
}
}
public final class Test3<T : R|E|, P : R|C.D|> : R|kotlin/Any| {
public constructor<T : R|E|, P : R|C.D|>(): R|Test3<T, P>| {
public final class Test3<T : R|E|, P : <ERROR TYPE REF: HIDDEN: C.D is invisible>> : R|kotlin/Any| {
public constructor<T : R|E|, P : <ERROR TYPE REF: HIDDEN: C.D is invisible>>(): R|Test3<T, P>| {
super<R|kotlin/Any|>()
}
@@ -80,5 +80,5 @@ FILE: exposedTypeParameters.kt
}
}
public abstract interface Test8<T : R|A|, P : R|B|, F : R|C|, N : R|C.D|, M : R|E|> : R|kotlin/Any| {
public abstract interface Test8<T : R|A|, P : R|B|, F : R|C|, N : <ERROR TYPE REF: HIDDEN: C.D is invisible>, M : R|E|> : R|kotlin/Any| {
}
@@ -15,7 +15,7 @@ public class Test1<T: <!EXPOSED_TYPE_PARAMETER_BOUND!>A<!>>
public class Test2<T: C, P: E>
// invalid, D is protected
public class Test3<T: E, P: <!EXPOSED_TYPE_PARAMETER_BOUND!>C.D<!>>
public class Test3<T: E, P: <!EXPOSED_TYPE_PARAMETER_BOUND, INVISIBLE_REFERENCE!>C.D<!>>
// valid, B is internal
internal class Test4<T: B>
@@ -32,4 +32,4 @@ public class Container : <!SUPERTYPE_NOT_INITIALIZED!>C<!> {
}
// invalid, A is private, B is internal, D is protected
public interface Test8<T: <!EXPOSED_TYPE_PARAMETER_BOUND!>A<!>, P: <!EXPOSED_TYPE_PARAMETER_BOUND!>B<!>, F: C, N: <!EXPOSED_TYPE_PARAMETER_BOUND!>C.D<!>, M: E>
public interface Test8<T: <!EXPOSED_TYPE_PARAMETER_BOUND!>A<!>, P: <!EXPOSED_TYPE_PARAMETER_BOUND!>B<!>, F: C, N: <!EXPOSED_TYPE_PARAMETER_BOUND, INVISIBLE_REFERENCE!>C.D<!>, M: E>
@@ -1,5 +1,5 @@
FILE: lowPriorityInResolution.kt
@R|kotlin/Suppress|(names = vararg(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE))) @R|kotlin/internal/LowPriorityInOverloadResolution|() public final fun foo(): R|kotlin/Int| {
@R|kotlin/Suppress|(names = vararg(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE))) @<ERROR TYPE REF: HIDDEN: kotlin/internal/LowPriorityInOverloadResolution is invisible>() public final fun foo(): R|kotlin/Int| {
^foo Int(1)
}
public final fun foo(): R|kotlin/String| {