[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:
@@ -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)}<!>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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>() {
|
||||
|
||||
+2
-2
@@ -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<!>>() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -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("...")
|
||||
-29
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY
|
||||
|
||||
class Outer<TO> {
|
||||
|
||||
Reference in New Issue
Block a user