LTDA: Make supertypes in lazy type parameters be recorded in order of declaration

This commit is contained in:
Nikolay Krasko
2014-09-11 16:18:01 +04:00
parent 261d4293ae
commit 365319a8e6
7 changed files with 10 additions and 10 deletions
@@ -65,13 +65,13 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
JetTypeParameter jetTypeParameter = this.jetTypeParameter; JetTypeParameter jetTypeParameter = this.jetTypeParameter;
resolveUpperBoundsFromWhereClause(upperBounds);
JetTypeReference extendsBound = jetTypeParameter.getExtendsBound(); JetTypeReference extendsBound = jetTypeParameter.getExtendsBound();
if (extendsBound != null) { if (extendsBound != null) {
upperBounds.add(resolveBoundType(extendsBound)); upperBounds.add(resolveBoundType(extendsBound));
} }
resolveUpperBoundsFromWhereClause(upperBounds);
if (upperBounds.isEmpty()) { if (upperBounds.isEmpty()) {
upperBounds.add(KotlinBuiltIns.getInstance().getDefaultBound()); upperBounds.add(KotlinBuiltIns.getInstance().getDefaultBound());
} }
@@ -1,8 +1,8 @@
// PARAM_TYPES: A<T> // PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U> // PARAM_TYPES: A.B<U>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final class A<T : DataEx> where T : Data defined in root package // PARAM_DESCRIPTOR: internal final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: internal final inner class B<U : DataExEx> where U : Data defined in A // PARAM_DESCRIPTOR: internal final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx
@@ -1,8 +1,8 @@
// PARAM_TYPES: A<T> // PARAM_TYPES: A<T>
// PARAM_TYPES: A.B<U> // PARAM_TYPES: A.B<U>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final class A<T : DataEx> where T : Data defined in root package // PARAM_DESCRIPTOR: internal final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: internal final inner class B<U : DataExEx> where U : Data defined in A // PARAM_DESCRIPTOR: internal final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx
@@ -1,6 +1,6 @@
// PARAM_TYPES: A.B<U> // PARAM_TYPES: A.B<U>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final inner class B<U : DataExEx> where U : Data defined in A // PARAM_DESCRIPTOR: internal final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx
@@ -1,6 +1,6 @@
// PARAM_TYPES: A.B<U> // PARAM_TYPES: A.B<U>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final inner class B<U : DataExEx> where U : Data defined in A // PARAM_DESCRIPTOR: internal final inner class B<U : Data> where U : DataExEx defined in A
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.B.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx
@@ -1,6 +1,6 @@
// PARAM_TYPES: A<T> // PARAM_TYPES: A<T>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final class A<T : DataEx> where T : Data defined in root package // PARAM_DESCRIPTOR: internal final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx
@@ -1,6 +1,6 @@
// PARAM_TYPES: A<T> // PARAM_TYPES: A<T>
// PARAM_TYPES: V, Data // PARAM_TYPES: V, Data
// PARAM_DESCRIPTOR: internal final class A<T : DataEx> where T : Data defined in root package // PARAM_DESCRIPTOR: internal final class A<T : Data> where T : DataEx defined in root package
// PARAM_DESCRIPTOR: value-parameter val v: V defined in A.foo // PARAM_DESCRIPTOR: value-parameter val v: V defined in A.foo
open class Data(val x: Int) open class Data(val x: Int)
trait DataEx trait DataEx