Refine type arguments resolution and rendering

In case of type constructors captured parameters from outer classes

 #KT-5510 Fixed
 #KT-3112 Fixed
 #KT-6325 Fixed
 #KT-408  Fixed
 #KT-6337 Fixed
This commit is contained in:
Denis Zharkov
2015-11-03 14:28:34 +03:00
parent 990bd7e71d
commit deea0643ad
72 changed files with 1450 additions and 94 deletions
@@ -1,5 +1,5 @@
// PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: public final inner class B<U : Data> where U : DataExEx defined in A
@@ -1,5 +1,5 @@
// PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: public final inner class B<U : Data> where U : DataExEx defined in A
@@ -17,4 +17,4 @@ class A<T: Data>(val t: T) where T: DataEx {
}
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V) where T : DataEx, U : DataExEx, V : DataEx = a.t.x + b.u.x + v.x
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A<T>.B<U>, v: V) where T : DataEx, U : DataExEx, V : DataEx = a.t.x + b.u.x + v.x
@@ -1,4 +1,4 @@
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
@@ -1,4 +1,4 @@
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
@@ -1,5 +1,5 @@
// PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final class A<T : Data> defined in root package
// PARAM_DESCRIPTOR: public final inner class B<U : Data> defined in A
@@ -1,5 +1,5 @@
// PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final class A<T : Data> defined in root package
// PARAM_DESCRIPTOR: public final inner class B<U : Data> defined in A
@@ -15,4 +15,4 @@ class A<T: Data>(val t: T) {
}
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V) = a.t.x + b.u.x + v.x
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A<T>.B<U>, v: V) = a.t.x + b.u.x + v.x
@@ -1,4 +1,4 @@
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final inner class B<U : Data> defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
@@ -1,4 +1,4 @@
// PARAM_TYPES: A.B<U>
// PARAM_TYPES: A<T>.B<U>
// PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: public final inner class B<U : Data> defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo