FIR deserializer: load type-parameters correctly

This commit is contained in:
Simon Ogorodnik
2019-04-08 15:44:09 +03:00
committed by Mikhail Glukhikh
parent 853167a24d
commit 649c2f6bcc
54 changed files with 164 additions and 118 deletions
@@ -47,7 +47,7 @@ class FirDeserializationContext(
): FirDeserializationContext = FirDeserializationContext(
nameResolver, typeTable, versionRequirementTable, session, packageFqName, relativeClassName,
FirTypeDeserializer(
nameResolver, typeTable, typeParameterProtos, typeDeserializer
session, nameResolver, typeTable, typeParameterProtos, typeDeserializer
),
components
)
@@ -98,6 +98,7 @@ class FirDeserializationContext(
packageFqName,
relativeClassName,
FirTypeDeserializer(
session,
nameResolver,
typeTable,
typeParameterProtos,
@@ -5,22 +5,29 @@
package org.jetbrains.kotlin.fir.deserialization
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
import org.jetbrains.kotlin.fir.resolve.toTypeProjection
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
import org.jetbrains.kotlin.serialization.deserialization.getClassId
import org.jetbrains.kotlin.serialization.deserialization.getName
import org.jetbrains.kotlin.types.Variance
import java.util.*
class FirTypeDeserializer(
val session: FirSession,
val nameResolver: NameResolver,
val typeTable: TypeTable,
typeParameterProtos: List<ProtoBuf.TypeParameter>,
@@ -52,17 +59,51 @@ class FirTypeDeserializer(
private fun typeParameterSymbol(typeParameterId: Int): ConeTypeParameterLookupTag? =
typeParameterDescriptors[typeParameterId] ?: parent?.typeParameterSymbol(typeParameterId)
private fun ProtoBuf.TypeParameter.Variance.convertVariance(): Variance {
return when (this) {
ProtoBuf.TypeParameter.Variance.IN -> Variance.IN_VARIANCE
ProtoBuf.TypeParameter.Variance.OUT -> Variance.OUT_VARIANCE
ProtoBuf.TypeParameter.Variance.INV -> Variance.INVARIANT
}
}
private val typeParameterDescriptors =
if (typeParameterProtos.isEmpty()) {
mapOf<Int, ConeTypeParameterSymbol>()
} else {
val result = LinkedHashMap<Int, ConeTypeParameterSymbol>()
for ((index, proto) in typeParameterProtos.withIndex()) {
result[proto.id] = LibraryTypeParameterSymbol(nameResolver.getName(proto.name))
if (!proto.hasId()) continue
val name = nameResolver.getName(proto.name)
val symbol = FirTypeParameterSymbol()
FirTypeParameterImpl(
session,
null,
symbol,
name,
proto.variance.convertVariance(),
proto.reified
)
result[proto.id] = symbol
}
result
}
init {
for ((index, proto) in typeParameterProtos.withIndex()) {
if (!proto.hasId()) continue
val symbol = typeParameterDescriptors[proto.id] as FirTypeParameterSymbol
val declaration = symbol.firUnsafe<FirTypeParameterImpl>()
declaration.apply {
proto.upperBoundList.mapTo(bounds) {
FirResolvedTypeRefImpl(session, null, type(it), false, emptyList())
}
}
}
}
val ownTypeParameters: List<ConeTypeParameterSymbol>
get() = typeParameterDescriptors.values.toList()
+10 -10
View File
@@ -25,7 +25,7 @@ public abstract class CharIterator : R|kotlin/collections/Iterator<kotlin/Char>|
}
public abstract interface Collection<E> : R|kotlin/collections/Iterable<E>| {
public abstract interface Collection<out E> : R|kotlin/collections/Iterable<E>| {
public abstract operator fun contains(element: R|E|): R|kotlin/Boolean|
public abstract fun containsAll(elements: R|kotlin/collections/Collection<E>|): R|kotlin/Boolean|
@@ -63,19 +63,19 @@ public abstract class IntIterator : R|kotlin/collections/Iterator<kotlin/Int>| {
}
public abstract interface Iterable<T> : R|kotlin/Any| {
public abstract interface Iterable<out T> : R|kotlin/Any| {
public abstract operator fun iterator(): R|kotlin/collections/Iterator<T>|
}
public abstract interface Iterator<T> : R|kotlin/Any| {
public abstract interface Iterator<out T> : R|kotlin/Any| {
public abstract operator fun hasNext(): R|kotlin/Boolean|
public abstract operator fun next(): R|T|
}
public abstract interface List<E> : R|kotlin/collections/Collection<E>| {
public abstract interface List<out E> : R|kotlin/collections/Collection<E>| {
public abstract operator fun contains(element: R|E|): R|kotlin/Boolean|
public abstract fun containsAll(elements: R|kotlin/collections/Collection<E>|): R|kotlin/Boolean|
@@ -98,7 +98,7 @@ public abstract interface List<E> : R|kotlin/collections/Collection<E>| {
}
public abstract interface ListIterator<T> : R|kotlin/collections/Iterator<T>| {
public abstract interface ListIterator<out T> : R|kotlin/collections/Iterator<T>| {
public abstract operator fun hasNext(): R|kotlin/Boolean|
public abstract fun hasPrevious(): R|kotlin/Boolean|
@@ -122,7 +122,7 @@ public abstract class LongIterator : R|kotlin/collections/Iterator<kotlin/Long>|
}
public abstract interface Map<K, V> : R|kotlin/Any| {
public abstract interface Map<K, out V> : R|kotlin/Any| {
public abstract fun containsKey(key: R|K|): R|kotlin/Boolean|
public abstract fun containsValue(value: R|V|): R|kotlin/Boolean|
@@ -133,7 +133,7 @@ public abstract interface Map<K, V> : R|kotlin/Any| {
public abstract fun isEmpty(): R|kotlin/Boolean|
public abstract interface Entry<K, V> : R|kotlin/Any| {
public abstract interface Entry<out K, out V> : R|kotlin/Any| {
}
}
@@ -155,12 +155,12 @@ public abstract interface MutableCollection<E> : R|kotlin/collections/Collection
}
public abstract interface MutableIterable<T> : R|kotlin/collections/Iterable<T>| {
public abstract interface MutableIterable<out T> : R|kotlin/collections/Iterable<T>| {
public abstract operator fun iterator(): R|kotlin/collections/MutableIterator<T>|
}
public abstract interface MutableIterator<T> : R|kotlin/collections/Iterator<T>| {
public abstract interface MutableIterator<out T> : R|kotlin/collections/Iterator<T>| {
public abstract fun remove(): R|kotlin/Unit|
}
@@ -242,7 +242,7 @@ public abstract interface MutableSet<E> : R|kotlin/collections/Set<E>|, R|kotlin
}
public abstract interface Set<E> : R|kotlin/collections/Collection<E>| {
public abstract interface Set<out E> : R|kotlin/collections/Collection<E>| {
public abstract operator fun contains(element: R|E|): R|kotlin/Boolean|
public abstract fun containsAll(elements: R|kotlin/collections/Collection<E>|): R|kotlin/Boolean|
+7 -7
View File
@@ -1,6 +1,6 @@
public final inline fun <T> arrayOf(vararg elements: R|kotlin/Array<out T>|): R|kotlin/Array<T>|
public final inline fun <reified T> arrayOf(vararg elements: R|kotlin/Array<out T>|): R|kotlin/Array<T>|
public final fun <T> arrayOfNulls(size: R|kotlin/Int|): R|kotlin/Array<T>|
public final fun <reified T> arrayOfNulls(size: R|kotlin/Int|): R|kotlin/Array<T>|
public final fun booleanArrayOf(vararg elements: R|kotlin/BooleanArray|): R|kotlin/BooleanArray|
@@ -10,11 +10,11 @@ public final fun charArrayOf(vararg elements: R|kotlin/CharArray|): R|kotlin/Cha
public final fun doubleArrayOf(vararg elements: R|kotlin/DoubleArray|): R|kotlin/DoubleArray|
public final inline fun <T> emptyArray(): R|kotlin/Array<T>|
public final inline fun <reified T> emptyArray(): R|kotlin/Array<T>|
public final inline fun <T> enumValueOf(name: R|kotlin/String|): R|T|
public final inline fun <reified T> enumValueOf(name: R|kotlin/String|): R|T|
public final inline fun <T> enumValues(): R|kotlin/Array<T>|
public final inline fun <reified T> enumValues(): R|kotlin/Array<T>|
public final fun floatArrayOf(vararg elements: R|kotlin/FloatArray|): R|kotlin/FloatArray|
@@ -286,7 +286,7 @@ public abstract interface Cloneable : R|kotlin/Any| {
}
public abstract interface Comparable<T> : R|kotlin/Any| {
public abstract interface Comparable<in T> : R|kotlin/Any| {
public abstract operator fun compareTo(other: R|T|): R|kotlin/Int|
}
@@ -589,7 +589,7 @@ public final class FloatArray : R|kotlin/Any| {
}
public abstract interface Function<R> : R|kotlin/Any| {
public abstract interface Function<out R> : R|kotlin/Any| {
}
public final class Int : R|kotlin/Number|, R|kotlin/Comparable<kotlin/Int>| {
@@ -24,7 +24,7 @@ public final class Generic<T> : R|kotlin/Any| {
public final class InnerGeneric<A, B> : R|kotlin/Any| {
public constructor(): R|test/InnerGeneric<A, B>|
public final inner class Inner<C, D> : R|kotlin/Any| {
public final inner class Inner<in C, D : R|A|> : R|kotlin/Any| {
public constructor(): R|test/InnerGeneric.Inner<C, D>|
}
@@ -3,7 +3,7 @@ public final annotation class A : R|kotlin/Annotation| {
}
public abstract interface Foo<T> : R|java/io/Serializable| {
public abstract fun <E, F> bar(): R|kotlin/Unit|
public abstract interface Foo<T : R|kotlin/Number|> : R|java/io/Serializable| {
public abstract fun <E, F : R|E|> bar(): R|kotlin/Unit|
}
@@ -1,4 +1,4 @@
public final class Wine<T> : R|kotlin/Any| {
public final class Wine<in T> : R|kotlin/Any| {
public constructor(): R|test/Wine<T>|
}
@@ -1,4 +1,4 @@
public final class Juice<T> : R|kotlin/Any| {
public final class Juice<out T> : R|kotlin/Any| {
public constructor(): R|test/Juice<T>|
}
@@ -1,4 +1,4 @@
public final class ClassParamReferencesParam<A, B> : R|kotlin/Any| {
public final class ClassParamReferencesParam<A, B : R|A|> : R|kotlin/Any| {
public constructor(): R|test/ClassParamReferencesParam<A, B>|
}
@@ -1,4 +1,4 @@
public final class ClassParamReferencesParam<A, B> : R|kotlin/Any| {
public final class ClassParamReferencesParam<A, in B : R|A|> : R|kotlin/Any| {
public constructor(): R|test/ClassParamReferencesParam<A, B>|
}
@@ -1,4 +1,4 @@
public final class ClassParamReferencesSelf<A> : R|kotlin/Any| {
public final class ClassParamReferencesSelf<A : R|test/TraitWithP<A>|> : R|kotlin/Any| {
public constructor(): R|test/ClassParamReferencesSelf<A>|
}
@@ -1,4 +1,4 @@
public final class Clock<A> : R|kotlin/Any| {
public final class Clock<A : R|java/lang/Number|> : R|kotlin/Any| {
public constructor(): R|test/Clock<A>|
}
@@ -1,4 +1,4 @@
public final class Clock<A> : R|kotlin/Any| {
public final class Clock<A : R|java/lang/Number|, R|java/io/Serializable|> : R|kotlin/Any| {
public constructor(): R|test/Clock<A>|
}
@@ -1,4 +1,4 @@
public final class Clock<A> : R|kotlin/Any| {
public final class Clock<A : R|java/io/Serializable|> : R|kotlin/Any| {
public constructor(): R|test/Clock<A>|
}
@@ -1,4 +1,4 @@
public final class ClassTwoParams<P, Q> : R|kotlin/Any| {
public final class ClassTwoParams<out P, Q> : R|kotlin/Any| {
public constructor(): R|test/ClassTwoParams<P, Q>|
}
@@ -1,4 +1,4 @@
public abstract interface Rec<R, T> : R|kotlin/Any| {
public abstract interface Rec<R, out T : R|test/Rec<R, T>|> : R|kotlin/Any| {
public abstract fun t(): R|T|
}
@@ -1,4 +1,4 @@
public final class ClassParamUsedInFun<T> : R|kotlin/Any| {
public final class ClassParamUsedInFun<in T> : R|kotlin/Any| {
public final fun f(t: R|T|): R|kotlin/Int|
public constructor(): R|test/ClassParamUsedInFun<T>|
@@ -1,4 +1,4 @@
public final class ClassWithTypePP<P, Q> : R|kotlin/Any| {
public final class ClassWithTypePP<P, Q : R|P|> : R|kotlin/Any| {
public constructor(): R|test/ClassWithTypePP<P, Q>|
}
@@ -1,4 +1,4 @@
public open class ClassWithTypePRefNext<R, P> : R|kotlin/Any| {
public open class ClassWithTypePRefNext<R : R|kotlin/collections/Iterable<P>|?, P> : R|kotlin/Any| {
public constructor(): R|test/ClassWithTypePRefNext<R, P>|
}
@@ -1,4 +1,4 @@
public final class ClassWithTypePRefSelf<P> : R|kotlin/Any| {
public final class ClassWithTypePRefSelf<P : R|kotlin/Enum<P>|> : R|kotlin/Any| {
public constructor(): R|test/ClassWithTypePRefSelf<P>|
}
@@ -1,4 +1,4 @@
public final class ClassWithTypePRefSelfAndClass<P> : R|kotlin/Any| {
public final class ClassWithTypePRefSelfAndClass<P : R|test/ClassWithTypePRefSelfAndClass<P>|?> : R|kotlin/Any| {
public constructor(): R|test/ClassWithTypePRefSelfAndClass<P>|
}
@@ -1,5 +1,5 @@
public open class MethodTypePOneUpperBound : R|kotlin/Any| {
public open fun <T> bar(): R|kotlin/Unit|
public open fun <T : R|kotlin/Cloneable|?> bar(): R|kotlin/Unit|
public constructor(): R|test/MethodTypePOneUpperBound|
@@ -1,5 +1,5 @@
public open class MethodTypePTwoUpperBounds : R|kotlin/Any| {
public open fun <T> foo(): R|kotlin/Unit|
public open fun <T : R|kotlin/Cloneable|?, R|java/lang/Runnable|?> foo(): R|kotlin/Unit|
public constructor(): R|test/MethodTypePTwoUpperBounds|
@@ -1,5 +1,5 @@
public final class MethodWithTypePP : R|kotlin/Any| {
public final fun <P, Q> f(): R|kotlin/Unit|
public final fun <P, Q : R|P|> f(): R|kotlin/Unit|
public constructor(): R|test/MethodWithTypePP|
@@ -1,5 +1,5 @@
public open class MethodWithTypePRefClassP<P> : R|kotlin/Any| {
public final fun <Q> f(): R|kotlin/Unit|
public final fun <Q : R|P|> f(): R|kotlin/Unit|
public constructor(): R|test/MethodWithTypePRefClassP<P>|
@@ -3,7 +3,7 @@ public final class UnboundWildcard : R|kotlin/Any| {
public constructor(): R|test/UnboundWildcard|
public abstract interface MyClass<T> : R|kotlin/Any| {
public abstract interface MyClass<T : R|kotlin/CharSequence|?> : R|kotlin/Any| {
}
}
@@ -1,5 +1,5 @@
public open class AllBoundsInWhen : R|kotlin/Any| {
public open fun <T> foo(): R|kotlin/Unit|
public open fun <T : R|java/io/Serializable|> foo(): R|kotlin/Unit|
public constructor(): R|test/AllBoundsInWhen|
@@ -1,5 +1,5 @@
public open class MethodWithTypeParameters : R|kotlin/Any| {
public open fun <A, B> foo(a: R|A|, b: R|kotlin/collections/List<B>|, c: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
public open fun <A, B : R|java/lang/Runnable|, R|kotlin/collections/List<kotlin/Cloneable>|> foo(a: R|A|, b: R|kotlin/collections/List<B>|, c: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
public constructor(): R|test/MethodWithTypeParameters|
@@ -3,7 +3,7 @@ public final class StarProjection : R|kotlin/Any| {
public constructor(): R|test/StarProjection|
public abstract interface MyClass<T> : R|kotlin/Any| {
public abstract interface MyClass<T : R|kotlin/CharSequence|?> : R|kotlin/Any| {
}
}
@@ -1,5 +1,5 @@
public open class ExtraUpperBound : R|kotlin/Any| {
public open fun <A> foo(): R|kotlin/String|?
public open fun <A : R|java/lang/Runnable|?> foo(): R|kotlin/String|?
public constructor(): R|test/ExtraUpperBound|
@@ -1,5 +1,5 @@
public open class MissingUpperBound : R|kotlin/Any| {
public open fun <A> foo(): R|kotlin/String|?
public open fun <A : R|java/lang/Runnable|?, R|kotlin/Cloneable|?> foo(): R|kotlin/String|?
public constructor(): R|test/MissingUpperBound|
@@ -1,5 +1,5 @@
public open class WrongTypeParameterBoundStructure1 : R|kotlin/Any| {
public open fun <A, B> foo(p0: R|A|, p1: R|kotlin/collections/List<B>|?): R|kotlin/Unit|
public open fun <A, B : R|java/lang/Runnable|?, R|kotlin/collections/List<kotlin/Cloneable>|?> foo(p0: R|A|, p1: R|kotlin/collections/List<B>|?): R|kotlin/Unit|
public constructor(): R|test/WrongTypeParameterBoundStructure1|
@@ -1,5 +1,5 @@
public open class WrongTypeParameterBoundStructure2 : R|kotlin/Any| {
public open fun <A, B> foo(p0: R|A|, p1: R|kotlin/collections/List<B>|?): R|kotlin/Unit|
public open fun <A, B : R|java/lang/Runnable|?, R|kotlin/collections/List<kotlin/Cloneable>|?> foo(p0: R|A|, p1: R|kotlin/collections/List<B>|?): R|kotlin/Unit|
public constructor(): R|test/WrongTypeParameterBoundStructure2|
@@ -1,11 +1,11 @@
public abstract interface InheritMutability : R|kotlin/Any| {
public abstract interface Sub : R|test/InheritMutability.Super| {
public abstract fun <B> foo(a: R|B|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/collections/MutableList<kotlin/String>|> foo(a: R|B|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A> foo(a: R|A|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/collections/MutableList<kotlin/String>|> foo(a: R|A|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface InheritNullability : R|kotlin/Any| {
public abstract interface Sub : R|test/InheritNullability.Super| {
public abstract fun <B> foo(a: R|B|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/CharSequence|> foo(a: R|B|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A> foo(a: R|A|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/CharSequence|> foo(a: R|A|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface InheritReadOnliness : R|kotlin/Any| {
public abstract interface Sub : R|test/InheritReadOnliness.Super| {
public abstract fun <B> foo(a: R|B|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/collections/List<kotlin/String>|> foo(a: R|B|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A> foo(a: R|A|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/collections/List<kotlin/String>|> foo(a: R|A|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface TwoBounds : R|kotlin/Any| {
public abstract interface Sub : R|test/TwoBounds.Super| {
public abstract fun <B> foo(a: R|B|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/CharSequence|, R|kotlin/Cloneable|> foo(a: R|B|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A> foo(a: R|A|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/CharSequence|, R|kotlin/Cloneable|> foo(a: R|A|): R|kotlin/Unit|
}
@@ -1,16 +1,16 @@
public abstract interface TwoSuperclasses : R|kotlin/Any| {
public abstract interface Sub : R|test/TwoSuperclasses.Super1|, R|test/TwoSuperclasses.Super2| {
public abstract fun <C> foo(a: R|C|): R|kotlin/Unit|
public abstract fun <C : R|kotlin/CharSequence|> foo(a: R|C|): R|kotlin/Unit|
}
public abstract interface Super1 : R|kotlin/Any| {
public abstract fun <A> foo(a: R|A|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/CharSequence|> foo(a: R|A|): R|kotlin/Unit|
}
public abstract interface Super2 : R|kotlin/Any| {
public abstract fun <B> foo(a: R|B|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/CharSequence|> foo(a: R|B|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface TwoTypeParameters : R|kotlin/Any| {
public abstract interface Sub : R|test/TwoTypeParameters.Super| {
public abstract fun <B, A> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
public abstract fun <B : R|kotlin/CharSequence|, A : R|kotlin/Cloneable|> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A, B> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
public abstract fun <A : R|kotlin/CharSequence|, B : R|kotlin/Cloneable|> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface UseParameterAsUpperBound : R|kotlin/Any| {
public abstract interface Sub : R|test/UseParameterAsUpperBound.Super| {
public abstract fun <B, A> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
public abstract fun <B, A : R|B|> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A, B> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
public abstract fun <A, B : R|A|> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface UseParameterInUpperBound : R|kotlin/Any| {
public abstract interface Sub : R|test/UseParameterInUpperBound.Super| {
public abstract fun <B, A> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
public abstract fun <B, A : R|kotlin/collections/List<B>|> foo(a: R|B|, b: R|A|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A, B> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
public abstract fun <A, B : R|kotlin/collections/List<A>|> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
}
@@ -1,11 +1,11 @@
public abstract interface UseParameterInUpperBoundWithKotlinSignature : R|kotlin/Any| {
public abstract interface Sub : R|test/UseParameterInUpperBoundWithKotlinSignature.Super| {
public abstract fun <B, A> foo(b: R|B|, a: R|A|): R|kotlin/Unit|
public abstract fun <B, A : R|kotlin/collections/List<B>|> foo(b: R|B|, a: R|A|): R|kotlin/Unit|
}
public abstract interface Super : R|kotlin/Any| {
public abstract fun <A, B> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
public abstract fun <A, B : R|kotlin/collections/List<A>|> foo(a: R|A|, b: R|B|): R|kotlin/Unit|
}
@@ -1,5 +1,5 @@
public open class Max : R|kotlin/Any| {
public open fun <T> max(p0: R|kotlin/collections/Collection<T>|?): R|T|
public open fun <T : R|kotlin/Any|?, R|kotlin/Comparable<T>|?> max(p0: R|kotlin/collections/Collection<T>|?): R|T|
public constructor(): R|test/Max|
@@ -1 +1,2 @@
public final fun <P, Q> funParamReferencesParam(): R|kotlin/Int|
public final fun <P, Q : R|P|> funParamReferencesParam(): R|kotlin/Int|
@@ -1,4 +1,4 @@
public final fun <T> foo(): R|kotlin/Unit|
public final fun <T : R|test/Foo|, R|test/Bar|> foo(): R|kotlin/Unit|
public abstract interface Bar : R|kotlin/Any| {
}
@@ -1 +1,2 @@
public final fun <A> uno(): R|kotlin/Int|
public final fun <A : R|java/lang/Number|> uno(): R|kotlin/Int|
@@ -1 +1,2 @@
public final fun <A> tres(): R|kotlin/Int|
public final fun <A : R|java/lang/Number|, R|java/io/Serializable|> tres(): R|kotlin/Int|
@@ -1 +1,2 @@
public final fun <A> dos(): R|kotlin/Int|
public final fun <A : R|java/io/Serializable|> dos(): R|kotlin/Int|
@@ -1,7 +1,7 @@
public final class InnerClassReferencesOuterTP<P> : R|kotlin/Any| {
public constructor(): R|test/InnerClassReferencesOuterTP<P>|
public final inner class Inner<Q> : R|kotlin/Any| {
public final inner class Inner<Q : R|P|> : R|kotlin/Any| {
public constructor(): R|test/InnerClassReferencesOuterTP.Inner<Q>|
}
@@ -2,7 +2,7 @@ public final class MembersReferenceOuterTP<P> : R|kotlin/Any| {
public constructor(): R|test/MembersReferenceOuterTP<P>|
public final inner class Inner : R|kotlin/Any| {
public final fun <Q> f(): R|kotlin/Unit|
public final fun <Q : R|P|> f(): R|kotlin/Unit|
public final fun g(p: R|P|): R|P|
@@ -1,4 +1,4 @@
public final class A<I> : R|kotlin/Any| {
public final class A<in I> : R|kotlin/Any| {
private/*private to this*/ final fun bas(): R|I|
public constructor(): R|test/A<I>|
@@ -4,7 +4,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
VALUE_PARAMETER name:y index:1 type:kotlin.Double
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test1d (x: kotlin.Double, y: kotlin.Double): IrErrorType declared in <root>'
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo]>#' type=IrErrorType
GET_VAR 'y: kotlin.Double declared in <root>.test1d' type=kotlin.Double origin=null
FUN name:test2d visibility:public modality:FINAL <> (x:kotlin.Double, y:kotlin.Any) returnType:kotlin.Boolean
VALUE_PARAMETER name:x index:0 type:kotlin.Double
@@ -16,7 +16,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'y: kotlin.Any declared in <root>.test2d' type=kotlin.Any origin=null
then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo, kotlin/Double.compareTo]>#' type=IrErrorType
GET_VAR 'y: kotlin.Any declared in <root>.test2d' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Boolean value=0
BRANCH
@@ -50,7 +50,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
VALUE_PARAMETER name:y index:1 type:kotlin.Float
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test1f (x: kotlin.Float, y: kotlin.Float): IrErrorType declared in <root>'
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
GET_VAR 'y: kotlin.Float declared in <root>.test1f' type=kotlin.Float origin=null
FUN name:test2f visibility:public modality:FINAL <> (x:kotlin.Float, y:kotlin.Any) returnType:kotlin.Boolean
VALUE_PARAMETER name:x index:0 type:kotlin.Float
@@ -62,7 +62,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'y: kotlin.Any declared in <root>.test2f' type=kotlin.Any origin=null
then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
GET_VAR 'y: kotlin.Any declared in <root>.test2f' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Boolean value=0
BRANCH
@@ -141,7 +141,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
VALUE_PARAMETER name:x index:0 type:kotlin.Float
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test1fr (x: kotlin.Float): IrErrorType declared in <root>'
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
GET_VAR 'x: kotlin.Float declared in <root>.test1fr' type=kotlin.Float origin=null
FUN name:test2fr visibility:public modality:FINAL <> (x:kotlin.Any) returnType:kotlin.Boolean
VALUE_PARAMETER name:x index:0 type:kotlin.Any
@@ -152,7 +152,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Float
GET_VAR 'x: kotlin.Any declared in <root>.test2fr' type=kotlin.Any origin=null
then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
GET_VAR 'x: kotlin.Any declared in <root>.test2fr' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Boolean value=0
BRANCH
@@ -167,7 +167,7 @@ FILE fqName:<root> fileName:/floatingPointCompareTo.kt
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Double
GET_VAR 'x: kotlin.Any declared in <root>.test3fr' type=kotlin.Any origin=null
then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Comparable.compareTo]>#' type=IrErrorType
arg0: ERROR_CALL 'Unresolved reference: <Ambiguity: compareTo, [kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo, kotlin/Float.compareTo]>#' type=IrErrorType
GET_VAR 'x: kotlin.Any declared in <root>.test3fr' type=kotlin.Any origin=null
arg1: CONST Int type=kotlin.Boolean value=0
BRANCH
+30 -30
View File
@@ -102,87 +102,87 @@ FILE fqName:<root> fileName:/kt30020.kt
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:add visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, element:E of <uninitialized parent>) returnType:kotlin.Boolean
FUN FAKE_OVERRIDE name:add visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, element:kotlin.Int) returnType:kotlin.Boolean
overridden:
public abstract fun add (element: E of <uninitialized parent>): kotlin.Boolean declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
FUN FAKE_OVERRIDE name:addAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int, elements:kotlin.collections.Collection<E of <uninitialized parent>>) returnType:kotlin.Boolean
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:addAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int, elements:kotlin.collections.Collection<kotlin.Int>) returnType:kotlin.Boolean
overridden:
public abstract fun addAll (index: kotlin.Int, elements: kotlin.collections.Collection<E of <uninitialized parent>>): kotlin.Boolean declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:index index:0 type:kotlin.Int
VALUE_PARAMETER name:elements index:1 type:kotlin.collections.Collection<E of <uninitialized parent>>
VALUE_PARAMETER name:elements index:1 type:kotlin.collections.Collection<kotlin.Int>
FUN FAKE_OVERRIDE name:clear visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList) returnType:kotlin.Unit
overridden:
public abstract fun clear (): kotlin.Unit declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
FUN FAKE_OVERRIDE name:listIterator visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList) returnType:kotlin.collections.MutableListIterator<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:listIterator visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList) returnType:kotlin.collections.MutableListIterator<kotlin.Int>
overridden:
public abstract fun listIterator (): kotlin.collections.MutableListIterator<E of <uninitialized parent>> declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
FUN FAKE_OVERRIDE name:remove visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, element:E of <uninitialized parent>) returnType:kotlin.Boolean
FUN FAKE_OVERRIDE name:remove visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, element:kotlin.Int) returnType:kotlin.Boolean
overridden:
public abstract fun remove (element: E of <uninitialized parent>): kotlin.Boolean declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
FUN FAKE_OVERRIDE name:removeAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, elements:kotlin.collections.Collection<E of <uninitialized parent>>) returnType:kotlin.Boolean
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:removeAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, elements:kotlin.collections.Collection<kotlin.Int>) returnType:kotlin.Boolean
overridden:
public abstract fun removeAll (elements: kotlin.collections.Collection<E of <uninitialized parent>>): kotlin.Boolean declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:removeAt visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int) returnType:E of <uninitialized parent>
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.Int>
FUN FAKE_OVERRIDE name:removeAt visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int) returnType:kotlin.Int
overridden:
public abstract fun removeAt (index: kotlin.Int): E of <uninitialized parent> declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:index index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:retainAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, elements:kotlin.collections.Collection<E of <uninitialized parent>>) returnType:kotlin.Boolean
FUN FAKE_OVERRIDE name:retainAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, elements:kotlin.collections.Collection<kotlin.Int>) returnType:kotlin.Boolean
overridden:
public abstract fun retainAll (elements: kotlin.collections.Collection<E of <uninitialized parent>>): kotlin.Boolean declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:set visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int, element:E of <uninitialized parent>) returnType:E of <uninitialized parent>
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.Int>
FUN FAKE_OVERRIDE name:set visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, index:kotlin.Int, element:kotlin.Int) returnType:kotlin.Int
overridden:
public abstract fun set (index: kotlin.Int, element: E of <uninitialized parent>): E of <uninitialized parent> declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:index index:0 type:kotlin.Int
VALUE_PARAMETER name:element index:1 type:E of <uninitialized parent>
FUN FAKE_OVERRIDE name:subList visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, fromIndex:kotlin.Int, toIndex:kotlin.Int) returnType:kotlin.collections.MutableList<E of <uninitialized parent>>
VALUE_PARAMETER name:element index:1 type:kotlin.Int
FUN FAKE_OVERRIDE name:subList visibility:public modality:ABSTRACT <> ($this:kotlin.collections.MutableList, fromIndex:kotlin.Int, toIndex:kotlin.Int) returnType:kotlin.collections.MutableList<kotlin.Int>
overridden:
public abstract fun subList (fromIndex: kotlin.Int, toIndex: kotlin.Int): kotlin.collections.MutableList<E of <uninitialized parent>> declared in kotlin.collections.MutableList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableList
VALUE_PARAMETER name:fromIndex index:0 type:kotlin.Int
VALUE_PARAMETER name:toIndex index:1 type:kotlin.Int
FUN FAKE_OVERRIDE name:contains visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:E of <uninitialized parent>) returnType:kotlin.Boolean
FUN FAKE_OVERRIDE name:contains visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:kotlin.Int) returnType:kotlin.Boolean
overridden:
public abstract fun contains (element: E of <uninitialized parent>): kotlin.Boolean declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
FUN FAKE_OVERRIDE name:contains visibility:public modality:ABSTRACT <> ($this:kotlin.collections.Collection, element:E of <uninitialized parent>) returnType:kotlin.Boolean
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:contains visibility:public modality:ABSTRACT <> ($this:kotlin.collections.Collection, element:kotlin.Int) returnType:kotlin.Boolean
overridden:
public abstract fun contains (element: E of <uninitialized parent>): kotlin.Boolean declared in kotlin.collections.Collection
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, elements:kotlin.collections.Collection<E of <uninitialized parent>>) returnType:kotlin.Boolean
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, elements:kotlin.collections.Collection<kotlin.Int>) returnType:kotlin.Boolean
overridden:
public abstract fun containsAll (elements: kotlin.collections.Collection<E of <uninitialized parent>>): kotlin.Boolean declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.Collection, elements:kotlin.collections.Collection<E of <uninitialized parent>>) returnType:kotlin.Boolean
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.Int>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:ABSTRACT <> ($this:kotlin.collections.Collection, elements:kotlin.collections.Collection<kotlin.Int>) returnType:kotlin.Boolean
overridden:
public abstract fun containsAll (elements: kotlin.collections.Collection<E of <uninitialized parent>>): kotlin.Boolean declared in kotlin.collections.Collection
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, index:kotlin.Int) returnType:E of <uninitialized parent>
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.Int>
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, index:kotlin.Int) returnType:kotlin.Int
overridden:
public abstract fun get (index: kotlin.Int): E of <uninitialized parent> declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
VALUE_PARAMETER name:index index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:E of <uninitialized parent>) returnType:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:kotlin.Int) returnType:kotlin.Int
overridden:
public abstract fun indexOf (element: E of <uninitialized parent>): kotlin.Int declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List) returnType:kotlin.Boolean
overridden:
public abstract fun isEmpty (): kotlin.Boolean declared in <no parent>.List
@@ -191,19 +191,19 @@ FILE fqName:<root> fileName:/kt30020.kt
overridden:
public abstract fun isEmpty (): kotlin.Boolean declared in kotlin.collections.Collection
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection
FUN FAKE_OVERRIDE name:iterator visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List) returnType:kotlin.collections.Iterator<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:iterator visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List) returnType:kotlin.collections.Iterator<kotlin.Int>
overridden:
public abstract fun iterator (): kotlin.collections.Iterator<E of <uninitialized parent>> declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
FUN FAKE_OVERRIDE name:iterator visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.MutableCollection) returnType:kotlin.collections.MutableIterator<E of <uninitialized parent>>
FUN FAKE_OVERRIDE name:iterator visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.MutableCollection) returnType:kotlin.collections.MutableIterator<kotlin.Int>
overridden:
public abstract fun iterator (): kotlin.collections.MutableIterator<E of <uninitialized parent>> declared in <no parent>.MutableCollection
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.MutableCollection
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:E of <uninitialized parent>) returnType:kotlin.Int
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:ABSTRACT <> ($this:<uninitialized parent>.List, element:kotlin.Int) returnType:kotlin.Int
overridden:
public abstract fun lastIndexOf (element: E of <uninitialized parent>): kotlin.Int declared in <no parent>.List
$this: VALUE_PARAMETER name:<this> type:<uninitialized parent>.List
VALUE_PARAMETER name:element index:0 type:E of <uninitialized parent>
VALUE_PARAMETER name:element index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any
+4 -4
View File
@@ -44,8 +44,8 @@ FILE fqName:<root> fileName:/when.kt
GET_VAR 'val tmp0_subject: kotlin.Any? [val] declared in <root>.testWithSubject' type=kotlin.Any? origin=null
then: CONST String type=kotlin.String value="!Number"
BRANCH
if: ERROR_CALL 'Unresolved reference: <Ambiguity: contains, [kotlin/collections/Set.contains, kotlin/collections/Collection.contains]>#' type=IrErrorType
GET_VAR 'val tmp0_subject: kotlin.Any? [val] declared in <root>.testWithSubject' type=kotlin.Any? origin=null
if: CALL 'public abstract fun contains (element: E of <uninitialized parent>): kotlin.Boolean declared in kotlin.collections.Set' type=kotlin.Boolean origin=null
element: GET_VAR 'val tmp0_subject: kotlin.Any? [val] declared in <root>.testWithSubject' type=kotlin.Any? origin=null
then: CONST String type=kotlin.String value="nothingness?"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -74,8 +74,8 @@ FILE fqName:<root> fileName:/when.kt
GET_VAR 'x: kotlin.Any? declared in <root>.test' type=kotlin.Any? origin=null
then: CONST String type=kotlin.String value="!Number"
BRANCH
if: ERROR_CALL 'Unresolved reference: <Ambiguity: contains, [kotlin/collections/Set.contains, kotlin/collections/Collection.contains]>#' type=IrErrorType
GET_VAR 'x: kotlin.Any? declared in <root>.test' type=kotlin.Any? origin=null
if: CALL 'public abstract fun contains (element: E of <uninitialized parent>): kotlin.Boolean declared in kotlin.collections.Set' type=kotlin.Boolean origin=null
element: GET_VAR 'x: kotlin.Any? declared in <root>.test' type=kotlin.Any? origin=null
then: CONST String type=kotlin.String value="nothingness?"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true