[FIR] Add flexible default upper bound for java type parameters

This commit is contained in:
Dmitriy Novozhilov
2020-03-25 17:17:56 +03:00
parent c23a11a6fc
commit 3acb64c536
35 changed files with 63 additions and 53 deletions
@@ -1,4 +1,4 @@
public open class ConstructorWithNewTypeParams<T> : R|kotlin/Any| {
public constructor<T, U>(first: R|ft<U, U?>!|): R|test/ConstructorWithNewTypeParams<T>|
public open class ConstructorWithNewTypeParams<T : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/Any| {
public constructor<T : R|ft<kotlin/Any, kotlin/Any?>!|, U : R|ft<kotlin/Any, kotlin/Any?>!|>(first: R|ft<U, U?>!|): R|test/ConstructorWithNewTypeParams<T>|
}
@@ -1,4 +1,4 @@
public open class ConstructorWithParentTypeParams<T> : R|kotlin/Any| {
public constructor<T>(first: R|ft<T, T?>!|): R|test/ConstructorWithParentTypeParams<T>|
public open class ConstructorWithParentTypeParams<T : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/Any| {
public constructor<T : R|ft<kotlin/Any, kotlin/Any?>!|>(first: R|ft<T, T?>!|): R|test/ConstructorWithParentTypeParams<T>|
}
@@ -1,7 +1,7 @@
public open class MethodWithMappedClasses : R|kotlin/Any| {
public open fun <T> copy(dest: R|ft<kotlin/collections/MutableList<in ft<T, T?>!>, kotlin/collections/List<in ft<T, T?>!>?>!|, src: R|ft<kotlin/collections/MutableList<ft<T, T?>!>, kotlin/collections/List<ft<T, T?>!>?>!|): R|kotlin/Unit|
public open fun <T : R|ft<kotlin/Any, kotlin/Any?>!|> copy(dest: R|ft<kotlin/collections/MutableList<in ft<T, T?>!>, kotlin/collections/List<in ft<T, T?>!>?>!|, src: R|ft<kotlin/collections/MutableList<ft<T, T?>!>, kotlin/collections/List<ft<T, T?>!>?>!|): R|kotlin/Unit|
public open fun <T> copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>!, in ft<T, T?>!>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>!, in ft<T, T?>!>?>!|, src: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>!, ft<T, T?>!>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>!, ft<T, T?>!>?>!|): R|kotlin/Unit|
public open fun <T : R|ft<kotlin/Any, kotlin/Any?>!|> copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>!, in ft<T, T?>!>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>!, in ft<T, T?>!>?>!|, src: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>!, ft<T, T?>!>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>!, ft<T, T?>!>?>!|): R|kotlin/Unit|
public constructor(): R|test/MethodWithMappedClasses|
@@ -1,5 +1,5 @@
public open class MethodWithTypeParameters : R|kotlin/Any| {
public open fun <A, B : R|ft<java/lang/Runnable, java/lang/Runnable?>!|, R|ft<kotlin/collections/MutableList<ft<kotlin/Cloneable, kotlin/Cloneable?>!>, kotlin/collections/List<ft<kotlin/Cloneable, kotlin/Cloneable?>!>?>!|> foo(a: R|ft<A, A?>!|, b: R|ft<kotlin/collections/MutableList<out ft<B, B?>!>, kotlin/collections/List<out ft<B, B?>!>?>!|, list: R|ft<kotlin/collections/MutableList<in ft<kotlin/String, kotlin/String?>!>, kotlin/collections/List<in ft<kotlin/String, kotlin/String?>!>?>!|): R|kotlin/Unit|
public open fun <A : R|ft<kotlin/Any, kotlin/Any?>!|, B : R|ft<java/lang/Runnable, java/lang/Runnable?>!|, R|ft<kotlin/collections/MutableList<ft<kotlin/Cloneable, kotlin/Cloneable?>!>, kotlin/collections/List<ft<kotlin/Cloneable, kotlin/Cloneable?>!>?>!|> foo(a: R|ft<A, A?>!|, b: R|ft<kotlin/collections/MutableList<out ft<B, B?>!>, kotlin/collections/List<out ft<B, B?>!>?>!|, list: R|ft<kotlin/collections/MutableList<in ft<kotlin/String, kotlin/String?>!>, kotlin/collections/List<in ft<kotlin/String, kotlin/String?>!>?>!|): R|kotlin/Unit|
public constructor(): R|test/MethodWithTypeParameters|
@@ -1,10 +1,10 @@
public open class PropertyArrayTypes<T> : R|kotlin/Any| {
public open class PropertyArrayTypes<T : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/Any| {
public open field arrayOfArrays: R|ft<kotlin/Array<ft<kotlin/Array<ft<kotlin/String, kotlin/String?>!>, kotlin/Array<out ft<kotlin/String, kotlin/String?>!>?>!>, kotlin/Array<out ft<kotlin/Array<ft<kotlin/String, kotlin/String?>!>, kotlin/Array<out ft<kotlin/String, kotlin/String?>!>?>!>?>!|
public open field array: R|ft<kotlin/Array<ft<kotlin/String, kotlin/String?>!>, kotlin/Array<out ft<kotlin/String, kotlin/String?>!>?>!|
public open field genericArray: R|ft<kotlin/Array<ft<T, T?>!>, kotlin/Array<out ft<T, T?>!>?>!|
public constructor<T>(): R|test/PropertyArrayTypes<T>|
public constructor<T : R|ft<kotlin/Any, kotlin/Any?>!|>(): R|test/PropertyArrayTypes<T>|
}
@@ -1,4 +1,4 @@
public open class PropertyComplexTypes<T> : R|kotlin/Any| {
public open class PropertyComplexTypes<T : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/Any| {
public open field genericType: R|ft<T, T?>!|
public open field listDefinedGeneric: R|ft<java/util/ArrayList<ft<kotlin/String, kotlin/String?>!>, java/util/ArrayList<ft<kotlin/String, kotlin/String?>!>?>!|
@@ -7,6 +7,6 @@ public open class PropertyComplexTypes<T> : R|kotlin/Any| {
public open field listOfGenericList: R|ft<java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>!>, java/util/ArrayList<ft<T, T?>!>?>!>, java/util/ArrayList<ft<java/util/ArrayList<ft<T, T?>!>, java/util/ArrayList<ft<T, T?>!>?>!>?>!|
public constructor<T>(): R|test/PropertyComplexTypes<T>|
public constructor<T : R|ft<kotlin/Any, kotlin/Any?>!|>(): R|test/PropertyComplexTypes<T>|
}
@@ -1,5 +1,5 @@
public open class WrongTypeParameterBoundStructure1 : R|kotlin/Any| {
public open fun <A, B : R|ft<java/lang/Runnable, java/lang/Runnable?>!|, R|ft<kotlin/collections/MutableList<ft<kotlin/Cloneable, kotlin/Cloneable?>!>, kotlin/collections/List<ft<kotlin/Cloneable, kotlin/Cloneable?>!>?>!|> foo(a: R|ft<A, A?>!|, b: R|ft<kotlin/collections/MutableList<out ft<B, B?>!>, kotlin/collections/List<out ft<B, B?>!>?>!|): R|kotlin/Unit|
public open fun <A : R|ft<kotlin/Any, kotlin/Any?>!|, B : R|ft<java/lang/Runnable, java/lang/Runnable?>!|, R|ft<kotlin/collections/MutableList<ft<kotlin/Cloneable, kotlin/Cloneable?>!>, kotlin/collections/List<ft<kotlin/Cloneable, kotlin/Cloneable?>!>?>!|> foo(a: R|ft<A, A?>!|, b: R|ft<kotlin/collections/MutableList<out ft<B, B?>!>, kotlin/collections/List<out ft<B, B?>!>?>!|): R|kotlin/Unit|
public constructor(): R|test/WrongTypeParameterBoundStructure1|
@@ -1,4 +1,4 @@
public abstract interface SubclassOfCollection<E> : R|kotlin/collections/MutableCollection<ft<E, E?>!>| {
public abstract interface SubclassOfCollection<E : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/collections/MutableCollection<ft<E, E?>!>| {
public abstract operator fun iterator(): R|kotlin/collections/MutableIterator<ft<E, E?>!>|
}
@@ -1,4 +1,4 @@
public abstract interface SubclassOfMapEntry<K, V> : R|kotlin/collections/MutableMap.MutableEntry<ft<K, K?>!, ft<V, V?>!>| {
public abstract interface SubclassOfMapEntry<K : R|ft<kotlin/Any, kotlin/Any?>!|, V : R|ft<kotlin/Any, kotlin/Any?>!|> : R|kotlin/collections/MutableMap.MutableEntry<ft<K, K?>!, ft<V, V?>!>| {
public abstract operator fun setValue(value: R|ft<V, V?>!|): R|ft<V, V?>!|
}