FIR Java: fix creation & handling of type parameter symbols

Before this commit, we created type parameter symbols each time
when type parameter was referenced or created.
In this commit, we introduced class-bound Java type parameter stack
and use it to find referenced type parameter symbol.
So now they are created only when Java type parameter is created
This commit is contained in:
Mikhail Glukhikh
2019-04-18 20:02:31 +03:00
parent f8bb1d161a
commit 092d10b1a8
38 changed files with 249 additions and 130 deletions
@@ -1,4 +1,4 @@
public open class AllBoundsInWhen : R|java/lang/Object| {
public open operator fun foo(): R|kotlin/Unit|
public open operator fun <T : R|java/io/Serializable|> foo(): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class ConstructorWithNewTypeParams<T> : R|java/lang/Object| {
public constructor(first: R|ft<U, U?>|!): R|test/ConstructorWithNewTypeParams<T>|
public constructor<T, U>(first: R|ft<U, U?>|!): R|test/ConstructorWithNewTypeParams<T>|
}
@@ -1,4 +1,4 @@
public open class ConstructorWithParentTypeParams<T> : R|java/lang/Object| {
public constructor(first: R|ft<T, T?>|!): R|test/ConstructorWithParentTypeParams<T>|
public constructor<T>(first: R|ft<T, T?>|!): R|test/ConstructorWithParentTypeParams<T>|
}
@@ -1,6 +1,6 @@
public open class MethodWithMappedClasses : R|java/lang/Object| {
public open operator fun copy(dest: R|ft<kotlin/collections/MutableList<in T>, kotlin/collections/List<in T>?>|!, src: R|ft<kotlin/collections/MutableList<ft<T, T?>>, kotlin/collections/List<ft<T, T?>>?>|!): R|kotlin/Unit|
public open operator fun <T> copy(dest: R|ft<kotlin/collections/MutableList<in T>, kotlin/collections/List<in T>?>|!, src: R|ft<kotlin/collections/MutableList<ft<T, T?>>, kotlin/collections/List<ft<T, T?>>?>|!): R|kotlin/Unit|
public open operator fun copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>, in T>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>, in 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 operator fun <T> copyMap(dest: R|ft<kotlin/collections/MutableMap<ft<kotlin/String, kotlin/String?>, in T>, kotlin/collections/Map<ft<kotlin/String, kotlin/String?>, in 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|
}
@@ -1,4 +1,4 @@
public open class MethodWithTypeParameters : R|java/lang/Object| {
public open operator fun foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!, list: R|ft<kotlin/collections/MutableList<in java/lang/String>, kotlin/collections/List<in java/lang/String>?>|!): R|kotlin/Unit|
public open operator fun <A, B : R|java/lang/Runnable|, R|java/util/List<java/lang/Cloneable>|> foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!, list: R|ft<kotlin/collections/MutableList<in java/lang/String>, kotlin/collections/List<in java/lang/String>?>|!): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public open class WrongTypeParameterBoundStructure1 : R|java/lang/Object| {
public open operator fun foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!): R|kotlin/Unit|
public open operator fun <A, B : R|java/lang/Runnable|, R|java/util/List<java/lang/Cloneable>|> foo(a: R|ft<A, A?>|!, b: R|ft<kotlin/collections/MutableList<out B>, kotlin/collections/List<out B>?>|!): R|kotlin/Unit|
}