[FIR] Only inherit class type parameters if inner class

Nested classes which are not inner class should not be able to access
type parameters of the outer class. Make sure access is not available
when resolving super types.

#KT-54748 Fixed
This commit is contained in:
Brian Norman
2023-05-26 09:19:09 -05:00
committed by Space Team
parent dfae730d0f
commit e10a9263d0
15 changed files with 79 additions and 47 deletions
@@ -4,6 +4,6 @@ open class ToResolve<SomeClass>(f : (Int) -> Int)
fun testFun(a : Int) = 12
class TestSome<P> {
companion object : ToResolve<P>({testFun(it)}) {
companion object : ToResolve<<!UNRESOLVED_REFERENCE!>P<!>>(<!ARGUMENT_TYPE_MISMATCH!>{testFun(it)}<!>) {
}
}
}
@@ -9,7 +9,7 @@ private fun <E> foobar() = {
fun a() = A<E, X, Y, Z>()
}
typealias LocalAlias<W> = A<E, <!UNRESOLVED_REFERENCE!>X<!>, <!UNRESOLVED_REFERENCE!>Y<!>, W>
typealias LocalAlias<W> = A<E, X, Y, W>
}
class Derived : LocalOuter<Double, Short>() {
@@ -26,7 +26,7 @@ private fun noParameters() = {
fun a() = A<Any, X, Y, Z>()
}
typealias LocalAlias2<W> = A<Any, <!UNRESOLVED_REFERENCE!>X<!>, <!UNRESOLVED_REFERENCE!>Y<!>, W>
typealias LocalAlias2<W> = A<Any, X, Y, W>
}
class Derived2 : LocalOuter2<Double, Short>() {
@@ -11,7 +11,7 @@ class Outer<T> {
fun a() = A<T, F, E, X, Y, Z>()
}
typealias LocalAlias<W> = A<T, F, E, <!UNRESOLVED_REFERENCE!>X<!>, <!UNRESOLVED_REFERENCE!>Y<!>, W>
typealias LocalAlias<W> = A<T, F, E, X, Y, W>
}
class Derived : LocalOuter<Double, Short>() {
@@ -28,7 +28,7 @@ class Outer<T> {
fun a() = A<T, F, Any, X, Y, Z>()
}
typealias LocalAlias2<W> = A<T, F, Any, <!UNRESOLVED_REFERENCE!>X<!>, <!UNRESOLVED_REFERENCE!>Y<!>, W>
typealias LocalAlias2<W> = A<T, F, Any, X, Y, W>
}
class Derived2 : LocalOuter2<Double, Short>() {
@@ -1,6 +1,6 @@
open class SomeClass<T>
class TestSome<P> {
companion object : SomeClass<P>() {
companion object : SomeClass<<!UNRESOLVED_REFERENCE!>P<!>>() {
}
}
@@ -1,6 +1,6 @@
open class SomeClass<T>
class TestSome<P> {
object Some : SomeClass<P>() {
object Some : SomeClass<<!UNRESOLVED_REFERENCE!>P<!>>() {
}
}
@@ -0,0 +1,9 @@
// FIR_IDENTICAL
// KT-54748
sealed class Result<String> {
data class Success(val value: String) : Result<String>()
class Failure(val cause: Throwable) : Result<String>()
}
fun foo(): Result<String> = Result.Success("...")
@@ -1,29 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY
class Outer<TO> {
typealias LTO = List<TO>
class Nested<TN> {
typealias LTO = List<TO>
typealias LTN = List<TN>
inner class Inner<TI> {
typealias LTO = List<TO>
typealias LTN = List<TN>
typealias LTI = List<TI>
}
}
}
fun <TF> foo() {
class Local<TL> {
typealias LTF = List<TF>
typealias LTL = List<<!UNRESOLVED_REFERENCE!>TL<!>>
}
fun <TLF> localfun() =
object {
typealias LTF = List<TF>
typealias LTLF = List<TLF>
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY
class Outer<TO> {