JVM IR: support mutability-flexible types

This commit is contained in:
Alexander Udalov
2021-06-02 20:02:07 +02:00
parent 0cb905a4b1
commit 7306256127
21 changed files with 149 additions and 87 deletions
@@ -159,9 +159,6 @@ open class JvmGeneratorExtensionsImpl(private val generateFacades: Boolean = tru
override val shouldPreventDeprecatedIntegerValueTypeLiteralConversion: Boolean
get() = true
private val flexibleNullabilityAnnotationClass =
createSpecialAnnotationClass(JvmSymbols.FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME, kotlinIrInternalPackage)
private val rawTypeAnnotationClass =
createSpecialAnnotationClass(JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME, kotlinIrInternalPackage)
@@ -170,7 +167,10 @@ open class JvmGeneratorExtensionsImpl(private val generateFacades: Boolean = tru
createSpecialAnnotationClass(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION, kotlinJvmInternalPackage)
override val flexibleNullabilityAnnotationConstructor: IrConstructor =
flexibleNullabilityAnnotationClass.constructors.single()
createSpecialAnnotationClass(JvmSymbols.FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME, kotlinIrInternalPackage).constructors.single()
override val flexibleMutabilityAnnotationConstructor: IrConstructor =
createSpecialAnnotationClass(JvmSymbols.FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME, kotlinIrInternalPackage).constructors.single()
override val enhancedNullabilityAnnotationConstructor: IrConstructor =
enhancedNullabilityAnnotationClass.constructors.single()
@@ -899,6 +899,9 @@ class JvmSymbols(
val FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME =
IrBuiltIns.KOTLIN_INTERNAL_IR_FQN.child(Name.identifier("FlexibleNullability"))
val FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME =
IrBuiltIns.KOTLIN_INTERNAL_IR_FQN.child(Name.identifier("FlexibleMutability"))
val RAW_TYPE_ANNOTATION_FQ_NAME =
IrBuiltIns.KOTLIN_INTERNAL_IR_FQN.child(Name.identifier("RawType"))
}
@@ -362,6 +362,7 @@ abstract class AnnotationCodegen(
internal val internalAnnotations = setOf(
JvmSymbols.FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME,
JvmSymbols.FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME,
JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION,
JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME
)
@@ -236,7 +236,14 @@ class IrBuiltIns(
val stringType = string.toIrType()
val stringClass = builtIns.string.toIrSymbol()
val iterableClass = builtIns.iterable.toIrSymbol()
val iteratorClass = builtIns.iterator.toIrSymbol()
val listIteratorClass = builtIns.listIterator.toIrSymbol()
val listClass = builtIns.list.toIrSymbol()
val collectionClass = builtIns.collection.toIrSymbol()
val setClass = builtIns.set.toIrSymbol()
val mapClass = builtIns.map.toIrSymbol()
val mapEntryClass = builtIns.mapEntry.toIrSymbol()
val arrayClass = builtIns.array.toIrSymbol()
@@ -36,15 +36,10 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon
override fun KotlinTypeMarker.asSimpleType() = this as? SimpleTypeMarker
override fun KotlinTypeMarker.asFlexibleType(): FlexibleTypeMarker? {
if (this is FlexibleTypeMarker) return this
if (this is IrType) {
val jvmFlexibleType = this.asJvmFlexibleType()
if (jvmFlexibleType != null) return jvmFlexibleType
}
return null
override fun KotlinTypeMarker.asFlexibleType(): FlexibleTypeMarker? = when (this) {
is FlexibleTypeMarker -> this
is IrType -> asJvmFlexibleType(irBuiltIns)
else -> null
}
override fun KotlinTypeMarker.isError() = this is IrErrorType
@@ -5,35 +5,80 @@
package org.jetbrains.kotlin.ir.types
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.types.impl.buildSimpleType
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
import org.jetbrains.kotlin.ir.util.hasAnnotation
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.FlexibleTypeBoundsChecker
import org.jetbrains.kotlin.types.model.FlexibleTypeMarker
import org.jetbrains.kotlin.types.model.SimpleTypeMarker
// TODO: extract properly to JVM-specific modules
internal interface IrJvmFlexibleType : FlexibleTypeMarker {
val lowerBound: SimpleTypeMarker
val upperBound: SimpleTypeMarker
val lowerBound: IrSimpleType
val upperBound: IrSimpleType
}
internal class IrJvmFlexibleNullabilityType(val irType: IrSimpleType) : IrJvmFlexibleType {
override val lowerBound get() = irType.withHasQuestionMark(false)
override val upperBound get() = irType.withHasQuestionMark(true)
private class IrJvmFlexibleTypeImpl(
val irType: IrSimpleType,
val builtIns: IrBuiltIns,
val nullability: Boolean,
val mutability: Boolean
) : IrJvmFlexibleType {
override val lowerBound: IrSimpleType
get() = irType.buildSimpleType {
if (nullability) hasQuestionMark = false
// No change in classifier is needed for mutability because type's classifier is set to the lower bound anyway
// (see TypeTranslator.translateType).
kotlinType = null
}
override val upperBound: IrSimpleType
get() = irType.buildSimpleType {
if (nullability) hasQuestionMark = true
if (mutability) {
val klass = classifier?.owner as? IrClass
?: error("Mutability-flexible type's classifier is not a class: ${irType.render()}")
val readonlyClassFqName = FlexibleTypeBoundsChecker.getBaseBoundFqNameByMutability(klass.fqNameWhenAvailable!!)
classifier = when (readonlyClassFqName) {
StandardNames.FqNames.iterable -> builtIns.iterableClass
StandardNames.FqNames.iterator -> builtIns.iteratorClass
StandardNames.FqNames.listIterator -> builtIns.listIteratorClass
StandardNames.FqNames.list -> builtIns.listClass
StandardNames.FqNames.collection -> builtIns.collectionClass
StandardNames.FqNames.set -> builtIns.setClass
StandardNames.FqNames.map -> builtIns.mapClass
StandardNames.FqNames.mapEntry -> builtIns.mapEntryClass
else -> error("Mutability-flexible type with unknown classifier: ${irType.render()}, FQ name: $readonlyClassFqName")
}
}
kotlinType = null
}
}
internal val FLEXIBLE_NULLABILITY_FQN = FqName("kotlin.internal.ir").child(Name.identifier("FlexibleNullability"))
internal val FLEXIBLE_NULLABILITY_FQN = FqName("kotlin.internal.ir.FlexibleNullability")
internal val FLEXIBLE_MUTABILITY_FQN = FqName("kotlin.internal.ir.FlexibleMutability")
internal fun IrType.isWithFlexibleNullability() =
internal fun IrType.isWithFlexibleNullability(): Boolean =
hasAnnotation(FLEXIBLE_NULLABILITY_FQN)
internal fun IrType.asJvmFlexibleType() =
when {
this is IrSimpleType && isWithFlexibleNullability() ->
IrJvmFlexibleNullabilityType(
this.removeAnnotations { irCtorCall ->
irCtorCall.type.classFqName == FLEXIBLE_NULLABILITY_FQN
} as IrSimpleType
)
else ->
null
}
internal fun IrType.isWithFlexibleMutability(): Boolean =
hasAnnotation(FLEXIBLE_MUTABILITY_FQN)
internal fun IrType.asJvmFlexibleType(builtIns: IrBuiltIns): FlexibleTypeMarker? {
if (this !is IrSimpleType || annotations.isEmpty()) return null
val nullability = isWithFlexibleNullability()
val mutability = isWithFlexibleMutability()
if (!nullability && !mutability) return null
val baseType = this.removeAnnotations { irCtorCall ->
val fqName = irCtorCall.type.classFqName
fqName == FLEXIBLE_NULLABILITY_FQN || fqName == FLEXIBLE_MUTABILITY_FQN
} as IrSimpleType
return IrJvmFlexibleTypeImpl(baseType, builtIns, nullability, mutability)
}
@@ -38,6 +38,9 @@ open class StubGeneratorExtensions {
open val flexibleNullabilityAnnotationConstructor: IrConstructor?
get() = null
open val flexibleMutabilityAnnotationConstructor: IrConstructor?
get() = null
open val enhancedNullabilityAnnotationConstructor: IrConstructor?
get() = null
@@ -231,6 +231,9 @@ abstract class TypeTranslator(
if (flexibleType.isNullabilityFlexible()) {
irAnnotations.addSpecialAnnotation(extensions.flexibleNullabilityAnnotationConstructor)
}
if (flexibleType.isMutabilityFlexible()) {
irAnnotations.addSpecialAnnotation(extensions.flexibleMutabilityAnnotationConstructor)
}
if (flexibleType is RawType) {
irAnnotations.addSpecialAnnotation(extensions.rawTypeAnnotationConstructor)
@@ -239,6 +242,13 @@ abstract class TypeTranslator(
return irAnnotations
}
private fun KotlinType.isMutabilityFlexible(): Boolean {
val flexibility = unwrap()
return flexibility is FlexibleType && flexibility.lowerBound.constructor != flexibility.upperBound.constructor &&
FlexibleTypeBoundsChecker.getBaseBoundFqNameByMutability(flexibility.lowerBound) ==
FlexibleTypeBoundsChecker.getBaseBoundFqNameByMutability(flexibility.upperBound)
}
private fun MutableList<IrConstructorCall>.addSpecialAnnotation(irConstructor: IrConstructor?) {
if (irConstructor != null) {
add(
@@ -1,7 +1,6 @@
// !API_VERSION: LATEST
// !USE_EXPERIMENTAL: kotlin.ExperimentalStdlibApi
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_REFLECT
// FILE: box.kt
+1 -1
View File
@@ -63,7 +63,7 @@ FILE fqName:<root> fileName:/AllCandidates.kt
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> ($receiver:@[FlexibleNullability] <root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?>?) returnType:kotlin.Unit
$receiver: VALUE_PARAMETER name:$this$apply type:@[FlexibleNullability] <root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?>?
BLOCK_BODY
CALL 'public open fun setAllCandidates (allCandidates: @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] <root>.ResolvedCall<@[FlexibleNullability] D of <root>.OverloadResolutionResultsImpl?>?>?): kotlin.Unit declared in <root>.OverloadResolutionResultsImpl' type=kotlin.Unit origin=EQ
CALL 'public open fun setAllCandidates (allCandidates: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] <root>.ResolvedCall<@[FlexibleNullability] D of <root>.OverloadResolutionResultsImpl?>?>?): kotlin.Unit declared in <root>.OverloadResolutionResultsImpl' type=kotlin.Unit origin=EQ
<1>: @[FlexibleNullability] A of <root>.allCandidatesResult?
$this: TYPE_OP type=<root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?> origin=IMPLICIT_NOTNULL typeOperand=<root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?>
GET_VAR '$this$apply: @[FlexibleNullability] <root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?>? declared in <root>.allCandidatesResult.<anonymous>' type=@[FlexibleNullability] <root>.OverloadResolutionResultsImpl<@[FlexibleNullability] A of <root>.allCandidatesResult?>? origin=null
@@ -2,7 +2,7 @@ FILE fqName:<root> fileName:/SyntheticSetterType.kt
FUN name:foo visibility:public modality:FINAL <> (descriptor:<root>.PropertyDescriptorImpl) returnType:kotlin.Unit
VALUE_PARAMETER name:descriptor index:0 type:<root>.PropertyDescriptorImpl
BLOCK_BODY
CALL 'public open fun setOverriddenDescriptors (overriddenDescriptors: @[EnhancedNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] <root>.CallableMemberDescriptor?>): kotlin.Unit declared in <root>.PropertyDescriptorImpl' type=kotlin.Unit origin=EQ
CALL 'public open fun setOverriddenDescriptors (overriddenDescriptors: @[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] <root>.CallableMemberDescriptor?>): kotlin.Unit declared in <root>.PropertyDescriptorImpl' type=kotlin.Unit origin=EQ
$this: GET_VAR 'descriptor: <root>.PropertyDescriptorImpl declared in <root>.foo' type=<root>.PropertyDescriptorImpl origin=null
overriddenDescriptors: CALL 'public final fun emptyList <T> (): kotlin.collections.List<T of kotlin.collections.CollectionsKt.emptyList> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.List<@[FlexibleNullability] <root>.PropertyDescriptor?> origin=null
<T>: @[FlexibleNullability] <root>.PropertyDescriptor?
@@ -1,5 +1,5 @@
fun <T : Any?> problematic(lss: List<List<T>>): List<T> {
return lss.flatMap<List<T>, @FlexibleNullability T?>(transform = local fun <anonymous>(it: List<T>): @EnhancedNullability MutableList<@FlexibleNullability T?> {
return lss.flatMap<List<T>, @FlexibleNullability T?>(transform = local fun <anonymous>(it: List<T>): @EnhancedNullability @FlexibleMutability MutableList<@FlexibleNullability T?> {
return id<@FlexibleNullability T?>(v = it) /*!! List<@FlexibleNullability T?> */
}
)
@@ -8,12 +8,12 @@ FILE fqName:<root> fileName:/typeParametersInImplicitCast.kt
<T>: kotlin.collections.List<T of <root>.problematic>
<R>: @[FlexibleNullability] T of <root>.problematic?
$receiver: GET_VAR 'lss: kotlin.collections.List<kotlin.collections.List<T of <root>.problematic>> declared in <root>.problematic' type=kotlin.collections.List<kotlin.collections.List<T of <root>.problematic>> origin=null
transform: FUN_EXPR type=kotlin.Function1<kotlin.collections.List<T of <root>.problematic>, @[EnhancedNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?>> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.collections.List<T of <root>.problematic>) returnType:@[EnhancedNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?>
transform: FUN_EXPR type=kotlin.Function1<kotlin.collections.List<T of <root>.problematic>, @[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?>> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.collections.List<T of <root>.problematic>) returnType:@[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?>
VALUE_PARAMETER name:it index:0 type:kotlin.collections.List<T of <root>.problematic>
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: kotlin.collections.List<T of <root>.problematic>): @[EnhancedNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?> declared in <root>.problematic'
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: kotlin.collections.List<T of <root>.problematic>): @[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?> declared in <root>.problematic'
TYPE_OP type=kotlin.collections.List<@[FlexibleNullability] T of <root>.problematic?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[FlexibleNullability] T of <root>.problematic?>
CALL 'public/*package*/ open fun id <T> (v: @[FlexibleNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.ListId.id?>?): @[EnhancedNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.ListId.id?> declared in <root>.ListId' type=@[EnhancedNullability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?> origin=null
CALL 'public/*package*/ open fun id <T> (v: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.ListId.id?>?): @[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.ListId.id?> declared in <root>.ListId' type=@[EnhancedNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[FlexibleNullability] T of <root>.problematic?> origin=null
<T>: @[FlexibleNullability] T of <root>.problematic?
v: GET_VAR 'it: kotlin.collections.List<T of <root>.problematic> declared in <root>.problematic.<anonymous>' type=kotlin.collections.List<T of <root>.problematic> origin=null
+1 -1
View File
@@ -18,7 +18,7 @@ FILE fqName:<root> fileName:/builtinMap.kt
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun apply <T> (block: @[ExtensionFunctionType] kotlin.Function1<T of kotlin.StandardKt.apply, kotlin.Unit>): T of kotlin.StandardKt.apply [inline] declared in kotlin.StandardKt' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?>{ kotlin.collections.TypeAliasesKt.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?> } origin=null
<T>: java.util.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?>{ kotlin.collections.TypeAliasesKt.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?> }
$receiver: CONSTRUCTOR_CALL 'public constructor <init> (p0: @[FlexibleNullability] kotlin.collections.MutableMap<out @[FlexibleNullability] K of java.util.LinkedHashMap?, out @[FlexibleNullability] V of java.util.LinkedHashMap?>?) declared in java.util.LinkedHashMap' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?> origin=null
$receiver: CONSTRUCTOR_CALL 'public constructor <init> (p0: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableMap<out @[FlexibleNullability] K of java.util.LinkedHashMap?, out @[FlexibleNullability] V of java.util.LinkedHashMap?>?) declared in java.util.LinkedHashMap' type=java.util.LinkedHashMap<@[FlexibleNullability] K1 of <root>.plus?, @[FlexibleNullability] V1 of <root>.plus?> origin=null
<class: K>: @[FlexibleNullability] K1 of <root>.plus?
<class: V>: @[FlexibleNullability] V1 of <root>.plus?
p0: GET_VAR '<this>: kotlin.collections.Map<out K1 of <root>.plus, V1 of <root>.plus> declared in <root>.plus' type=kotlin.collections.Map<out K1 of <root>.plus, V1 of <root>.plus> origin=null
+4 -4
View File
@@ -14,19 +14,19 @@ class C : J, K {
}
private /* final field */ val $$delegate_0: J = j
override fun jf1(): @FlexibleNullability MutableCollection<out @FlexibleNullability CharSequence?>? {
override fun jf1(): @FlexibleNullability @FlexibleMutability MutableCollection<out @FlexibleNullability CharSequence?>? {
return <this>.#$$delegate_0.jf1()
}
override fun jf2(): @FlexibleNullability MutableCollection<@FlexibleNullability CharSequence?>? {
override fun jf2(): @FlexibleNullability @FlexibleMutability MutableCollection<@FlexibleNullability CharSequence?>? {
return <this>.#$$delegate_0.jf2()
}
override fun jg1(c: @FlexibleNullability MutableCollection<out @FlexibleNullability CharSequence?>?) {
override fun jg1(c: @FlexibleNullability @FlexibleMutability MutableCollection<out @FlexibleNullability CharSequence?>?) {
<this>.#$$delegate_0.jg1(c = c)
}
override fun jg2(c: @FlexibleNullability MutableCollection<@FlexibleNullability CharSequence?>?) {
override fun jg2(c: @FlexibleNullability @FlexibleMutability MutableCollection<@FlexibleNullability CharSequence?>?) {
<this>.#$$delegate_0.jg2(c = c)
}
+18 -18
View File
@@ -35,44 +35,44 @@ FILE fqName:<root> fileName:/javaWildcardType.kt
FIELD DELEGATE name:$$delegate_0 type:<root>.J visibility:private [final]
EXPRESSION_BODY
GET_VAR 'j: <root>.J declared in <root>.C.<init>' type=<root>.J origin=null
FUN DELEGATED_MEMBER name:jf1 visibility:public modality:OPEN <> ($this:<root>.C) returnType:@[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?
FUN DELEGATED_MEMBER name:jf1 visibility:public modality:OPEN <> ($this:<root>.C) returnType:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?
overridden:
public abstract fun jf1 (): @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J
public abstract fun jf1 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun jf1 (): @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C'
CALL 'public abstract fun jf1 (): @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? origin=null
RETURN type=kotlin.Nothing from='public open fun jf1 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C'
CALL 'public abstract fun jf1 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.J visibility:private [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.C declared in <root>.C.jf1' type=<root>.C origin=null
FUN DELEGATED_MEMBER name:jf2 visibility:public modality:OPEN <> ($this:<root>.C) returnType:@[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?
FUN DELEGATED_MEMBER name:jf2 visibility:public modality:OPEN <> ($this:<root>.C) returnType:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?
overridden:
public abstract fun jf2 (): @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J
public abstract fun jf2 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun jf2 (): @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C'
CALL 'public abstract fun jf2 (): @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? origin=null
RETURN type=kotlin.Nothing from='public open fun jf2 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C'
CALL 'public abstract fun jf2 (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.J visibility:private [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.C declared in <root>.C.jf2' type=<root>.C origin=null
FUN DELEGATED_MEMBER name:jg1 visibility:public modality:OPEN <> ($this:<root>.C, c:@[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?) returnType:kotlin.Unit
FUN DELEGATED_MEMBER name:jg1 visibility:public modality:OPEN <> ($this:<root>.C, c:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?) returnType:kotlin.Unit
overridden:
public abstract fun jg1 (c: @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J
public abstract fun jg1 (c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:c index:0 type:@[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?
VALUE_PARAMETER name:c index:0 type:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?
BLOCK_BODY
CALL 'public abstract fun jg1 (c: @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public abstract fun jg1 (c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.J visibility:private [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.C declared in <root>.C.jg1' type=<root>.C origin=null
c: GET_VAR 'c: @[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C.jg1' type=@[FlexibleNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? origin=null
FUN DELEGATED_MEMBER name:jg2 visibility:public modality:OPEN <> ($this:<root>.C, c:@[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?) returnType:kotlin.Unit
c: GET_VAR 'c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C.jg1' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<out @[FlexibleNullability] kotlin.CharSequence?>? origin=null
FUN DELEGATED_MEMBER name:jg2 visibility:public modality:OPEN <> ($this:<root>.C, c:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?) returnType:kotlin.Unit
overridden:
public abstract fun jg2 (c: @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J
public abstract fun jg2 (c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:c index:0 type:@[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?
VALUE_PARAMETER name:c index:0 type:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?
BLOCK_BODY
CALL 'public abstract fun jg2 (c: @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public abstract fun jg2 (c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.J visibility:private [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.C declared in <root>.C.jg2' type=<root>.C origin=null
c: GET_VAR 'c: @[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C.jg2' type=@[FlexibleNullability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? origin=null
c: GET_VAR 'c: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? declared in <root>.C.jg2' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] kotlin.CharSequence?>? origin=null
FIELD DELEGATE name:$$delegate_1 type:<root>.K visibility:private [final]
EXPRESSION_BODY
GET_VAR 'k: <root>.K declared in <root>.C.<init>' type=<root>.K origin=null
@@ -193,7 +193,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
$receiver: CALL 'public final fun withIndex <T> (): kotlin.collections.Iterable<kotlin.collections.IndexedValue<T of kotlin.collections.CollectionsKt.withIndex>> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.Iterable<kotlin.collections.IndexedValue<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>> origin=null
<T>: @[NotNull(value = <null>)] @[EnhancedNullability] <root>.P
$receiver: TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in kotlin.collections.IndexedValue' type=kotlin.Int origin=COMPONENT_N(index=1)
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
@@ -9,7 +9,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
@@ -25,7 +25,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
@@ -48,7 +48,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=WHILE_LOOP
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
@@ -82,7 +82,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableList<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] @[EnhancedNullability] <root>.P> origin=null
@@ -57,7 +57,7 @@ class KRaw : JRaw {
return <this>.#$$delegate_0.returnsRawGenericOut()
}
override fun returnsRawList(): @FlexibleNullability @RawType MutableList<Any?>? {
override fun returnsRawList(): @FlexibleNullability @FlexibleMutability @RawType MutableList<Any?>? {
return <this>.#$$delegate_0.returnsRawList()
}
@@ -73,7 +73,7 @@ class KRaw : JRaw {
<this>.#$$delegate_0.takesRawGenericOut(g = g)
}
override fun takesRawList(list: @FlexibleNullability @RawType MutableList<Any?>?) {
override fun takesRawList(list: @FlexibleNullability @FlexibleMutability @RawType MutableList<Any?>?) {
<this>.#$$delegate_0.takesRawList(list = list)
}
+9 -9
View File
@@ -114,13 +114,13 @@ FILE fqName:<root> fileName:/rawTypeInSignature.kt
CALL 'public abstract fun returnsRawGenericOut (): @[FlexibleNullability] @[RawType] <root>.GenericOut<kotlin.Number>? declared in <root>.JRaw' type=@[FlexibleNullability] @[RawType] <root>.GenericOut<kotlin.Number>? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.JRaw visibility:private [final]' type=<root>.JRaw origin=null
receiver: GET_VAR '<this>: <root>.KRaw declared in <root>.KRaw.returnsRawGenericOut' type=<root>.KRaw origin=null
FUN DELEGATED_MEMBER name:returnsRawList visibility:public modality:OPEN <> ($this:<root>.KRaw) returnType:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?
FUN DELEGATED_MEMBER name:returnsRawList visibility:public modality:OPEN <> ($this:<root>.KRaw) returnType:@[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?
overridden:
public abstract fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.JRaw
public abstract fun returnsRawList (): @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.JRaw
$this: VALUE_PARAMETER name:<this> type:<root>.KRaw
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.KRaw'
CALL 'public abstract fun returnsRawList (): @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.JRaw' type=@[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? origin=null
RETURN type=kotlin.Nothing from='public open fun returnsRawList (): @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.KRaw'
CALL 'public abstract fun returnsRawList (): @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.JRaw' type=@[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.JRaw visibility:private [final]' type=<root>.JRaw origin=null
receiver: GET_VAR '<this>: <root>.KRaw declared in <root>.KRaw.returnsRawList' type=<root>.KRaw origin=null
FUN DELEGATED_MEMBER name:takesRawGenericIn visibility:public modality:OPEN <> ($this:<root>.KRaw, g:@[FlexibleNullability] @[RawType] <root>.GenericIn<kotlin.Number>?) returnType:kotlin.Unit
@@ -153,16 +153,16 @@ FILE fqName:<root> fileName:/rawTypeInSignature.kt
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.JRaw visibility:private [final]' type=<root>.JRaw origin=null
receiver: GET_VAR '<this>: <root>.KRaw declared in <root>.KRaw.takesRawGenericOut' type=<root>.KRaw origin=null
g: GET_VAR 'g: @[FlexibleNullability] @[RawType] <root>.GenericOut<kotlin.Number>? declared in <root>.KRaw.takesRawGenericOut' type=@[FlexibleNullability] @[RawType] <root>.GenericOut<kotlin.Number>? origin=null
FUN DELEGATED_MEMBER name:takesRawList visibility:public modality:OPEN <> ($this:<root>.KRaw, list:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?) returnType:kotlin.Unit
FUN DELEGATED_MEMBER name:takesRawList visibility:public modality:OPEN <> ($this:<root>.KRaw, list:@[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?) returnType:kotlin.Unit
overridden:
public abstract fun takesRawList (list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?): kotlin.Unit declared in <root>.JRaw
public abstract fun takesRawList (list: @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?): kotlin.Unit declared in <root>.JRaw
$this: VALUE_PARAMETER name:<this> type:<root>.KRaw
VALUE_PARAMETER name:list index:0 type:@[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?
VALUE_PARAMETER name:list index:0 type:@[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?
BLOCK_BODY
CALL 'public abstract fun takesRawList (list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?): kotlin.Unit declared in <root>.JRaw' type=kotlin.Unit origin=null
CALL 'public abstract fun takesRawList (list: @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>?): kotlin.Unit declared in <root>.JRaw' type=kotlin.Unit origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.JRaw visibility:private [final]' type=<root>.JRaw origin=null
receiver: GET_VAR '<this>: <root>.KRaw declared in <root>.KRaw.takesRawList' type=<root>.KRaw origin=null
list: GET_VAR 'list: @[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.KRaw.takesRawList' type=@[FlexibleNullability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? origin=null
list: GET_VAR 'list: @[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? declared in <root>.KRaw.takesRawList' type=@[FlexibleNullability] @[FlexibleMutability] @[RawType] kotlin.collections.MutableList<kotlin.Any?>? origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in <root>.JRaw
@@ -174,12 +174,11 @@ object FlexibleTypeBoundsChecker {
return possiblePairBound == b.constructor.declarationDescriptor?.fqNameSafe
}
// We consider base bounds as not mutable collections
fun getBaseBoundFqNameByMutability(a: KotlinType): FqName? {
val fqName = a.constructor.declarationDescriptor?.fqNameSafe ?: return null
// We consider base bounds as readonly collection interfaces (e.g. kotlin.collections.Iterable).
fun getBaseBoundFqNameByMutability(type: KotlinType): FqName? =
type.constructor.declarationDescriptor?.fqNameSafe?.let(::getBaseBoundFqNameByMutability)
if (fqName in baseTypesToMutableEquivalent) return fqName
return mutableToBaseMap[fqName]
}
fun getBaseBoundFqNameByMutability(fqName: FqName): FqName? =
if (fqName in baseTypesToMutableEquivalent) fqName
else mutableToBaseMap[fqName]
}