[Test] KT-61360: add tests for the IrFakeOverrideBuilder

Add tests for fake overrides with focus on java interoperability

Co-authored-by: Aleksandra Arsenteva <aleksandra.arsenteva@jetbrains.com>
This commit is contained in:
anzhela.sukhanova
2024-01-19 18:22:17 +02:00
committed by Space Team
parent 30aae741a6
commit 82255d5ee8
853 changed files with 269404 additions and 0 deletions
@@ -0,0 +1,157 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java1) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1 origin=null
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.C, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.C) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.C, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.C'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1 origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:a type:<root>.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=null
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.A' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int [val]
TYPE_OP type=kotlin.Int origin=IMPLICIT_NOTNULL typeOperand=kotlin.Int
CALL 'public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.A' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:b type:<root>.B [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.B' type=<root>.B origin=null
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=null
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:c type:<root>.C [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.C' type=<root>.C origin=null
VAR name:k6 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=null
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k7 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.C' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,63 @@
class A : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
}
class B : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 2
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return Java1()
}
}
class C : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 2
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return Java1()
}
}
fun test() {
val a: A = A()
val k: Unit = a.invoke()
val k1: Java1 = a.plus(i = 1) /*!! Java1 */
val k2: Int = a.get(i = 1) /*!! Int */
val b: B = B()
val k3: Unit = b.invoke()
val k4: Java1 = b.plus(i = 1)
val k5: Int = b.get(i = 1)
val c: C = C()
val k6: Unit = c.invoke()
val k7: Java1 = c.plus(i = 1)
val k8: Int = c.get(i = 1)
}
@@ -0,0 +1,157 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java1) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1 origin=null
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.C, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.C) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.C, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.C
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.C'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1 origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:a type:<root>.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.A' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int [val]
TYPE_OP type=kotlin.Int origin=IMPLICIT_NOTNULL typeOperand=kotlin.Int
CALL 'public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.A' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:b type:<root>.B [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.B' type=<root>.B origin=null
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:c type:<root>.C [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.C' type=<root>.C origin=null
VAR name:k6 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k7 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.C' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,47 @@
// TARGET_BACKEND: JVM
// FILE: Java1.java
public class Java1 {
public void invoke(){};
public Java1 plus(Integer i){ return this;};
public Integer get(Integer i){ return 1; }
}
// FILE: 1.kt
class A : Java1()
class B : Java1() {
override fun invoke() {}
override fun get(i: Int?): Int {
return 2
}
override fun plus(i: Int?): Java1 {
return Java1()
}
}
class C : Java1() {
override operator fun invoke() {}
override operator fun get(i: Int?): Int {
return 2
}
override operator fun plus(i: Int?): Java1 {
return Java1()
}
}
fun test() {
val a = A()
val k: Unit = a()
val k1: Java1 = a + 1
val k2: Int = a[1]
val b = B()
val k3: Unit = b()
val k4: Java1 = b + 1
val k5: Int = b[1]
val c = C()
val k6: Unit = c()
val k7: Java1 = c + 1
val k8: Int = c[1]
}
@@ -0,0 +1,63 @@
class A : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
}
class B : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 2
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return Java1()
}
}
class C : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 2
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return Java1()
}
}
fun test() {
val a: A = A()
val k: Unit = a.invoke()
val k1: Java1 = a.plus(i = 1) /*!! Java1 */
val k2: Int = a.get(i = 1) /*!! Int */
val b: B = B()
val k3: Unit = b.invoke()
val k4: Java1 = b.plus(i = 1)
val k5: Int = b.get(i = 1)
val c: C = C()
val k6: Unit = c.invoke()
val k7: Java1 = c.plus(i = 1)
val k8: Int = c.get(i = 1)
}
@@ -0,0 +1,95 @@
// CHECK:
// Mangled name: A
// Public signature: /A|null[0]
class A : Java1 {
// CHECK:
// Mangled name: A#<init>(){}
// Public signature: /A.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: A#get(kotlin.Int?){}kotlin.Int?
// Public signature: /A.get|7040689195092882450[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int?
/* fake */ override operator fun get(i: Int?): Int?
// CHECK:
// Mangled name: A#invoke(){}
// Public signature: /A.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
/* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: A#plus(kotlin.Int?){}Java1?
// Public signature: /A.plus|-7032856236956634841[0]
// Public signature debug description: plus(kotlin.Int?){}Java1?
/* fake */ override operator fun plus(i: Int?): Java1?
}
// CHECK:
// Mangled name: B
// Public signature: /B|null[0]
class B : Java1 {
// CHECK:
// Mangled name: B#<init>(){}
// Public signature: /B.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: B#get(kotlin.Int?){}kotlin.Int
// Public signature: /B.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: B#invoke(){}
// Public signature: /B.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: B#plus(kotlin.Int?){}Java1
// Public signature: /B.plus|5151435286051456288[0]
// Public signature debug description: plus(kotlin.Int?){}Java1
override operator fun plus(i: Int?): Java1
}
// CHECK:
// Mangled name: C
// Public signature: /C|null[0]
class C : Java1 {
// CHECK:
// Mangled name: C#<init>(){}
// Public signature: /C.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: C#get(kotlin.Int?){}kotlin.Int
// Public signature: /C.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: C#invoke(){}
// Public signature: /C.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: C#plus(kotlin.Int?){}Java1
// Public signature: /C.plus|5151435286051456288[0]
// Public signature debug description: plus(kotlin.Int?){}Java1
override operator fun plus(i: Int?): Java1
}
// CHECK:
// Mangled name: #test(){}
// Public signature: /test|6620506149988718649[0]
// Public signature debug description: test(){}
fun test(): Unit
@@ -0,0 +1,309 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any]'
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 declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.A'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Unit [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.A'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [fake_override,operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java2'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java2]'
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 declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java2) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [fake_override,operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.D
CONSTRUCTOR visibility:public <> () returnType:<root>.D [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D'
CONST Int type=kotlin.Int value=3
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.D) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:<root>.A [operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.D'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
CLASS CLASS name:E modality:ABSTRACT visibility:public superTypes:[<root>.Java4]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.E
CONSTRUCTOR visibility:public <> () returnType:<root>.E [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:E modality:ABSTRACT visibility:public superTypes:[<root>.Java4]'
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 declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java3) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java3? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:F modality:FINAL visibility:public superTypes:[<root>.Java4]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.F
CONSTRUCTOR visibility:public <> () returnType:<root>.F [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:F modality:FINAL visibility:public superTypes:[<root>.Java4]'
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 declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.F, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.F'
CONST Int type=kotlin.Int value=4
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.F) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.F, i:kotlin.Int?) returnType:<root>.Java3 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java3 declared in <root>.F'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS INTERFACE name:KotlinInterface modality:ABSTRACT visibility:public superTypes:[<root>.Java3]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.KotlinInterface
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 declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java3) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java3? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:test visibility:public modality:FINAL <> (b:<root>.B, c:<root>.C, d:<root>.D, e:<root>.E, f:<root>.F) returnType:kotlin.Unit
VALUE_PARAMETER name:b index:0 type:<root>.B
VALUE_PARAMETER name:c index:1 type:<root>.C
VALUE_PARAMETER name:d index:2 type:<root>.D
VALUE_PARAMETER name:e index:3 type:<root>.E
VALUE_PARAMETER name:f index:4 type:<root>.F
BLOCK_BODY
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=null
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.B' type=<root>.A origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=null
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.C' type=<root>.A origin=PLUS
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k6 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.D' type=kotlin.Unit origin=null
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=VARIABLE_AS_FUNCTION
VAR name:k7 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.D' type=<root>.A origin=PLUS
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k9 type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.E' type=kotlin.Unit origin=null
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=VARIABLE_AS_FUNCTION
VAR name:k10 type:<root>.Java3 [val]
TYPE_OP type=<root>.Java3 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java3
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.E' type=@[FlexibleNullability] <root>.Java3? origin=PLUS
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k11 type:kotlin.Int [val]
TYPE_OP type=kotlin.Int origin=IMPLICIT_NOTNULL typeOperand=kotlin.Int
CALL 'public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.E' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k12 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.F' type=kotlin.Unit origin=null
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=VARIABLE_AS_FUNCTION
VAR name:k13 type:<root>.Java3 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java3 declared in <root>.F' type=<root>.Java3 origin=PLUS
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k14 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.F' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,107 @@
open class A {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
open operator fun get(i: Int?): Int {
return 2
}
open operator fun invoke() {
}
open operator fun plus(i: Int?): A {
return A()
}
}
class B : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
}
class C : Java2 {
constructor() /* primary */ {
super/*Java2*/()
/* <init>() */
}
}
class D : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 3
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): A {
return A()
}
}
abstract class E : Java4 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class F : Java4 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 4
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java3 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
interface KotlinInterface : Java3 {
}
fun test(b: B, c: C, d: D, e: E, f: F) {
val k: Unit = b.invoke()
val k1: A = b.plus(i = 1)
val k2: Int = b.get(i = 1)
val k3: Unit = c.invoke()
val k4: A = c.plus(i = 1)
val k5: Int = c.get(i = 1)
val k6: Unit = d.invoke()
val k7: A = d.plus(i = 1)
val k8: Int = d.get(i = 1)
val k9: Unit = e.invoke()
val k10: Java3 = e.plus(i = 1) /*!! Java3 */
val k11: Int = e.get(i = 1) /*!! Int */
val k12: Unit = f.invoke()
val k13: Java3 = f.plus(i = 1)
val k14: Int = f.get(i = 1)
}
@@ -0,0 +1,309 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any]'
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 declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.A'
CONST Int type=kotlin.Int value=2
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Unit [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.A'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [fake_override,operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java2'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[<root>.Java2]'
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 declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java2) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.A, i:kotlin.Int?) returnType:<root>.A [fake_override,operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.D
CONSTRUCTOR visibility:public <> () returnType:<root>.D [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D'
CONST Int type=kotlin.Int value=3
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.D) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:<root>.A [operator]
overridden:
public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.D'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
CLASS CLASS name:E modality:ABSTRACT visibility:public superTypes:[<root>.Java4]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.E
CONSTRUCTOR visibility:public <> () returnType:<root>.E [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:E modality:ABSTRACT visibility:public superTypes:[<root>.Java4]'
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 declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java3) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java3? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:F modality:FINAL visibility:public superTypes:[<root>.Java4]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.F
CONSTRUCTOR visibility:public <> () returnType:<root>.F [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:F modality:FINAL visibility:public superTypes:[<root>.Java4]'
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 declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.F, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.F'
CONST Int type=kotlin.Int value=4
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.F) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.F, i:kotlin.Int?) returnType:<root>.Java3 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java4
$this: VALUE_PARAMETER name:<this> type:<root>.F
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java3 declared in <root>.F'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS INTERFACE name:KotlinInterface modality:ABSTRACT visibility:public superTypes:[<root>.Java3]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.KotlinInterface
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 declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java3) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java3, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java3? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:<root>.Java3
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java3
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:test visibility:public modality:FINAL <> (b:<root>.B, c:<root>.C, d:<root>.D, e:<root>.E, f:<root>.F) returnType:kotlin.Unit
VALUE_PARAMETER name:b index:0 type:<root>.B
VALUE_PARAMETER name:c index:1 type:<root>.C
VALUE_PARAMETER name:d index:2 type:<root>.D
VALUE_PARAMETER name:e index:3 type:<root>.E
VALUE_PARAMETER name:f index:4 type:<root>.F
BLOCK_BODY
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.B' type=<root>.A origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.C' type=<root>.A origin=PLUS
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k6 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.D' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=VARIABLE_AS_FUNCTION
VAR name:k7 type:<root>.A [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.A declared in <root>.D' type=<root>.A origin=PLUS
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k9 type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.E' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=VARIABLE_AS_FUNCTION
VAR name:k10 type:<root>.Java3 [val]
TYPE_OP type=<root>.Java3 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java3
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java3? declared in <root>.E' type=@[FlexibleNullability] <root>.Java3? origin=PLUS
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k11 type:kotlin.Int [val]
TYPE_OP type=kotlin.Int origin=IMPLICIT_NOTNULL typeOperand=kotlin.Int
CALL 'public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.E' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'e: <root>.E declared in <root>.test' type=<root>.E origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k12 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.F' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=VARIABLE_AS_FUNCTION
VAR name:k13 type:<root>.Java3 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java3 declared in <root>.F' type=<root>.Java3 origin=PLUS
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k14 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.F' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'f: <root>.F declared in <root>.test' type=<root>.F origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,76 @@
// TARGET_BACKEND: JVM
// FILE: Java1.java
public class Java1 extends A { }
// FILE: Java2.java
public class Java2 extends A {
public void invoke(){};
}
// FILE: Java3.java
public interface Java3 {
public void invoke();
public Java3 plus(Integer i);
public Integer get(Integer i);
}
// FILE: Java4.java
public interface Java4 extends KotlinInterface{ }
// FILE: 1.kt
open class A {
open operator fun invoke() {}
open operator fun get(i: Int?): Int {
return 2
}
open operator fun plus(i: Int?): A {
return A()
}
}
class B : Java1() //Kotlin ← Java ← Kotlin
class C : Java2() //Kotlin ← Java ← Kotlin with explicit override in java
class D: Java1() { //Kotlin ← Java ← Kotlin with explicit override
override fun invoke() { }
override fun get(i: Int?): Int {
return 3
}
override fun plus(i: Int?): A {
return A()
}
}
abstract class E : Java4 //Kotlin ← Java ← Kotlin ← Java
class F: Java4 { //Kotlin ← Java ← Kotlin ← Java with explicit override
override fun invoke() { }
override fun plus(i: Int?): Java3 {
return null!!
}
override fun get(i: Int?): Int {
return 4
}
}
interface KotlinInterface : Java3
fun test(b: B, c: C, d: D, e: E, f: F) {
val k: Unit = b()
val k1: A = b + 1
val k2: Int = b[1]
val k3: Unit = c()
val k4: A = c + 1
val k5: Int = c[1]
val k6: Unit = d()
val k7: A = d + 1
val k8: Int = d[1]
val k9: Unit = e()
val k10: Java3 = e + 1
val k11: Int = e[1]
val k12: Unit = f()
val k13: Java3 = f + 1
val k14: Int = f[1]
}
@@ -0,0 +1,107 @@
open class A {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
open operator fun get(i: Int?): Int {
return 2
}
open operator fun invoke() {
}
open operator fun plus(i: Int?): A {
return A()
}
}
class B : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
}
class C : Java2 {
constructor() /* primary */ {
super/*Java2*/()
/* <init>() */
}
}
class D : Java1 {
constructor() /* primary */ {
super/*Java1*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 3
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): A {
return A()
}
}
abstract class E : Java4 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class F : Java4 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 4
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java3 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
interface KotlinInterface : Java3 {
}
fun test(b: B, c: C, d: D, e: E, f: F) {
val k: Unit = b.invoke()
val k1: A = b.plus(i = 1)
val k2: Int = b.get(i = 1)
val k3: Unit = c.invoke()
val k4: A = c.plus(i = 1)
val k5: Int = c.get(i = 1)
val k6: Unit = d.invoke()
val k7: A = d.plus(i = 1)
val k8: Int = d.get(i = 1)
val k9: Unit = e.invoke()
val k10: Java3 = e.plus(i = 1) /*!! Java3 */
val k11: Int = e.get(i = 1) /*!! Int */
val k12: Unit = f.invoke()
val k13: Java3 = f.plus(i = 1)
val k14: Int = f.get(i = 1)
}
@@ -0,0 +1,209 @@
// CHECK:
// Mangled name: A
// Public signature: /A|null[0]
open class A {
// CHECK:
// Mangled name: A#<init>(){}
// Public signature: /A.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: A#get(kotlin.Int?){}kotlin.Int
// Public signature: /A.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
open operator fun get(i: Int?): Int
// CHECK:
// Mangled name: A#invoke(){}
// Public signature: /A.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
open operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: A#plus(kotlin.Int?){}A
// Public signature: /A.plus|-1795499796367270285[0]
// Public signature debug description: plus(kotlin.Int?){}A
open operator fun plus(i: Int?): A
}
// CHECK:
// Mangled name: B
// Public signature: /B|null[0]
class B : Java1 {
// CHECK:
// Mangled name: B#<init>(){}
// Public signature: /B.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: B#get(kotlin.Int?){}kotlin.Int
// Public signature: /B.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
/* fake */ override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: B#invoke(){}
// Public signature: /B.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
/* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: B#plus(kotlin.Int?){}A
// Public signature: /B.plus|-1795499796367270285[0]
// Public signature debug description: plus(kotlin.Int?){}A
/* fake */ override operator fun plus(i: Int?): A
}
// CHECK:
// Mangled name: C
// Public signature: /C|null[0]
class C : Java2 {
// CHECK:
// Mangled name: C#<init>(){}
// Public signature: /C.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: C#get(kotlin.Int?){}kotlin.Int
// Public signature: /C.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
/* fake */ override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: C#invoke(){}
// Public signature: /C.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
/* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: C#plus(kotlin.Int?){}A
// Public signature: /C.plus|-1795499796367270285[0]
// Public signature debug description: plus(kotlin.Int?){}A
/* fake */ override operator fun plus(i: Int?): A
}
// CHECK:
// Mangled name: D
// Public signature: /D|null[0]
class D : Java1 {
// CHECK:
// Mangled name: D#<init>(){}
// Public signature: /D.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: D#get(kotlin.Int?){}kotlin.Int
// Public signature: /D.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: D#invoke(){}
// Public signature: /D.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: D#plus(kotlin.Int?){}A
// Public signature: /D.plus|-1795499796367270285[0]
// Public signature debug description: plus(kotlin.Int?){}A
override operator fun plus(i: Int?): A
}
// CHECK:
// Mangled name: E
// Public signature: /E|null[0]
abstract class E : Java4 {
// CHECK:
// Mangled name: E#<init>(){}
// Public signature: /E.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: E#get(kotlin.Int?){}kotlin.Int?
// Public signature: /E.get|7040689195092882450[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int?
abstract /* fake */ override operator fun get(i: Int?): Int?
// CHECK:
// Mangled name: E#invoke(){}
// Public signature: /E.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
abstract /* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: E#plus(kotlin.Int?){}Java3?
// Public signature: /E.plus|-4867345056319774975[0]
// Public signature debug description: plus(kotlin.Int?){}Java3?
abstract /* fake */ override operator fun plus(i: Int?): Java3?
}
// CHECK:
// Mangled name: F
// Public signature: /F|null[0]
class F : Java4 {
// CHECK:
// Mangled name: F#<init>(){}
// Public signature: /F.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: F#get(kotlin.Int?){}kotlin.Int
// Public signature: /F.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: F#invoke(){}
// Public signature: /F.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: F#plus(kotlin.Int?){}Java3
// Public signature: /F.plus|-1134082592939971042[0]
// Public signature debug description: plus(kotlin.Int?){}Java3
override operator fun plus(i: Int?): Java3
}
// CHECK:
// Mangled name: KotlinInterface
// Public signature: /KotlinInterface|null[0]
interface KotlinInterface : Java3 {
// CHECK JVM_IR:
// Mangled name: KotlinInterface#get(kotlin.Int?){}kotlin.Int?
// Public signature: /KotlinInterface.get|7040689195092882450[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int?
abstract /* fake */ override operator fun get(i: Int?): Int?
// CHECK:
// Mangled name: KotlinInterface#invoke(){}
// Public signature: /KotlinInterface.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
abstract /* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: KotlinInterface#plus(kotlin.Int?){}Java3?
// Public signature: /KotlinInterface.plus|-4867345056319774975[0]
// Public signature debug description: plus(kotlin.Int?){}Java3?
abstract /* fake */ override operator fun plus(i: Int?): Java3?
}
// CHECK:
// Mangled name: #test(B;C;D;E;F){}
// Public signature: /test|-7946478318145452671[0]
// Public signature debug description: test(B;C;D;E;F){}
fun test(b: B, c: C, d: D, e: E, f: F): Unit
@@ -0,0 +1,293 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:ABSTRACT visibility:public superTypes:[<root>.Java1; <root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:ABSTRACT visibility:public superTypes:[<root>.Java1; <root>.Java2]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java2, i:@[FlexibleNullability] kotlin.Any?) returnType:@[FlexibleNullability] kotlin.Any? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] kotlin.Any? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java1) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java2, i:@[FlexibleNullability] kotlin.Any?) returnType:@[FlexibleNullability] <root>.Java2? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] <root>.Java2? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Any?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.Java2]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:kotlin.Any [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] kotlin.Any? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B'
CONST Int type=kotlin.Int value=2
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B'
CONST Int type=kotlin.Int value=3
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:<root>.Java2 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] <root>.Java2? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Any?): <root>.Java2 declared in <root>.B'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS CLASS name:C modality:ABSTRACT visibility:public superTypes:[<root>.KotlinInterface; <root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:ABSTRACT visibility:public superTypes:[<root>.KotlinInterface; <root>.Java1]'
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 declared in <root>.KotlinInterface
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.KotlinInterface
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.KotlinInterface
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.KotlinInterface
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.KotlinInterface
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.KotlinInterface]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.D
CONSTRUCTOR visibility:public <> () returnType:<root>.D [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.KotlinInterface]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D'
CONST Int type=kotlin.Int value=4
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.D) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:<root>.D
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.D'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS INTERFACE name:KotlinInterface modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.KotlinInterface
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 declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface, i:kotlin.Int?) returnType:kotlin.Int [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface) returnType:kotlin.Unit [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
FUN name:test visibility:public modality:FINAL <> (a:<root>.A, b:<root>.B, c:<root>.C, d:<root>.D) returnType:kotlin.Unit
VALUE_PARAMETER name:a index:0 type:<root>.A
VALUE_PARAMETER name:b index:1 type:<root>.B
VALUE_PARAMETER name:c index:2 type:<root>.C
VALUE_PARAMETER name:d index:3 type:<root>.D
BLOCK_BODY
VAR name:k type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=null
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.A' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int? [val]
CALL 'public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.A' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=null
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k6 type:<root>.Java2 [val]
CALL 'public open fun plus (i: kotlin.Any?): <root>.Java2 declared in <root>.B' type=<root>.Java2 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST String type=kotlin.String value=""
VAR name:k7 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k9 type:kotlin.Any [val]
CALL 'public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST String type=kotlin.String value=""
VAR name:k10 type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=null
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k11 type:kotlin.Int [val]
CALL 'public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k12 type:kotlin.Int [val]
CALL 'public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k13 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.C' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k14 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.D' type=kotlin.Unit origin=null
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=VARIABLE_AS_FUNCTION
VAR name:k15 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k16 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k17 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.D' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,93 @@
abstract class A : Java1, Java2 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class B : Java1, Java2 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Any?): Any {
return 2
}
override operator fun get(i: Int?): Int {
return 3
}
override operator fun invoke() {
}
override operator fun plus(i: Any?): Java2 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
override operator fun plus(i: Int?): Java1 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
abstract class C : Java1, KotlinInterface {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class D : Java1, KotlinInterface {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 4
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
interface KotlinInterface {
abstract operator fun get(i: Int?): Int
abstract operator fun invoke()
}
fun test(a: A, b: B, c: C, d: D) {
val k: Unit = a.invoke()
val k1: Java1 = a.plus(i = 1) /*!! Java1 */
val k2: Int? = a.get(i = 1)
val k3: Unit = b.invoke()
val k4: Java1 = b.plus(i = 1)
val k5: Java1 = b.plus(i = null)
val k6: Java2 = b.plus(i = "")
val k7: Int = b.get(i = 1)
val k8: Int = b.get(i = null)
val k9: Any = b.get(i = "")
val k10: Unit = c.invoke()
val k11: Int = c.get(i = 1)
val k12: Int = c.get(i = null)
val k13: Java1 = c.plus(i = 1) /*!! Java1 */
val k14: Unit = d.invoke()
val k15: Int = d.get(i = 1)
val k16: Int = d.get(i = null)
val k17: Java1 = d.plus(i = 1)
}
@@ -0,0 +1,293 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:ABSTRACT visibility:public superTypes:[<root>.Java1; <root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:ABSTRACT visibility:public superTypes:[<root>.Java1; <root>.Java2]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.Java2, i:@[FlexibleNullability] kotlin.Any?) returnType:@[FlexibleNullability] kotlin.Any? [fake_override,operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] kotlin.Any? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.Java1) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java2, i:@[FlexibleNullability] kotlin.Any?) returnType:@[FlexibleNullability] <root>.Java2? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] <root>.Java2? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.Java2
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Any?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.Java2]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.Java2]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:kotlin.Any [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] kotlin.Any? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B'
CONST Int type=kotlin.Int value=2
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B'
CONST Int type=kotlin.Int value=3
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:<root>.Java2 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] <root>.Java2? declared in <root>.Java2
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Any?): <root>.Java2 declared in <root>.B'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS CLASS name:C modality:ABSTRACT visibility:public superTypes:[<root>.KotlinInterface; <root>.Java1]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:ABSTRACT visibility:public superTypes:[<root>.KotlinInterface; <root>.Java1]'
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 declared in <root>.KotlinInterface
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface, i:kotlin.Int?) returnType:kotlin.Int [fake_override,operator]
overridden:
public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.KotlinInterface
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.KotlinInterface
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface) returnType:kotlin.Unit [fake_override,operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.KotlinInterface
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
FUN FAKE_OVERRIDE name:plus visibility:public modality:ABSTRACT <> ($this:<root>.Java1, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] <root>.Java1? [fake_override,operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.KotlinInterface
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.KotlinInterface]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.D
CONSTRUCTOR visibility:public <> () returnType:<root>.D [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:D modality:FINAL visibility:public superTypes:[<root>.Java1; <root>.KotlinInterface]'
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 declared in <root>.Java1
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
public open fun hashCode (): kotlin.Int declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
public open fun toString (): kotlin.String declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:kotlin.Int [operator]
overridden:
public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.Java1
public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D'
CONST Int type=kotlin.Int value=4
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.D) returnType:kotlin.Unit [operator]
overridden:
public abstract fun invoke (): kotlin.Unit declared in <root>.Java1
public abstract fun invoke (): kotlin.Unit declared in <root>.KotlinInterface
$this: VALUE_PARAMETER name:<this> type:<root>.D
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.D, i:kotlin.Int?) returnType:<root>.Java1 [operator]
overridden:
public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.D
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.D'
CALL 'public final fun CHECK_NOT_NULL <T0> (arg0: T0 of kotlin.internal.ir.CHECK_NOT_NULL?): {T0 of kotlin.internal.ir.CHECK_NOT_NULL & Any} declared in kotlin.internal.ir' type=kotlin.Nothing origin=EXCLEXCL
<T0>: kotlin.Nothing
arg0: CONST Null type=kotlin.Nothing? value=null
CLASS INTERFACE name:KotlinInterface modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.KotlinInterface
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 declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface, i:kotlin.Int?) returnType:kotlin.Int [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN name:invoke visibility:public modality:ABSTRACT <> ($this:<root>.KotlinInterface) returnType:kotlin.Unit [operator]
$this: VALUE_PARAMETER name:<this> type:<root>.KotlinInterface
FUN name:test visibility:public modality:FINAL <> (a:<root>.A, b:<root>.B, c:<root>.C, d:<root>.D) returnType:kotlin.Unit
VALUE_PARAMETER name:a index:0 type:<root>.A
VALUE_PARAMETER name:b index:1 type:<root>.B
VALUE_PARAMETER name:c index:2 type:<root>.C
VALUE_PARAMETER name:d index:3 type:<root>.D
BLOCK_BODY
VAR name:k type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.A' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int? [val]
CALL 'public abstract fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.A' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.B' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k6 type:<root>.Java2 [val]
CALL 'public open fun plus (i: kotlin.Any?): <root>.Java2 declared in <root>.B' type=<root>.Java2 origin=PLUS
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST String type=kotlin.String value=""
VAR name:k7 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k8 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.B' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k9 type:kotlin.Any [val]
CALL 'public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST String type=kotlin.String value=""
VAR name:k10 type:kotlin.Unit [val]
CALL 'public abstract fun invoke (): kotlin.Unit declared in <root>.C' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=VARIABLE_AS_FUNCTION
VAR name:k11 type:kotlin.Int [val]
CALL 'public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k12 type:kotlin.Int [val]
CALL 'public abstract fun get (i: kotlin.Int?): kotlin.Int declared in <root>.C' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k13 type:<root>.Java1 [val]
TYPE_OP type=<root>.Java1 origin=IMPLICIT_NOTNULL typeOperand=<root>.Java1
CALL 'public abstract fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] <root>.Java1? declared in <root>.C' type=@[FlexibleNullability] <root>.Java1? origin=PLUS
$this: GET_VAR 'c: <root>.C declared in <root>.test' type=<root>.C origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k14 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.D' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=VARIABLE_AS_FUNCTION
VAR name:k15 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k16 type:kotlin.Int [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int declared in <root>.D' type=kotlin.Int origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Null type=kotlin.Nothing? value=null
VAR name:k17 type:<root>.Java1 [val]
CALL 'public open fun plus (i: kotlin.Int?): <root>.Java1 declared in <root>.D' type=<root>.Java1 origin=PLUS
$this: GET_VAR 'd: <root>.D declared in <root>.test' type=<root>.D origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,73 @@
// TARGET_BACKEND: JVM
// FILE: Java1.java
public interface Java1 {
public void invoke();
public Java1 plus(Integer i);
public Integer get(Integer i);
}
// FILE: Java2.java
public interface Java2 {
public void invoke();
public Java2 plus(Object i);
public Object get(Object i);
}
// FILE: 1.kt
abstract class A : Java1, Java2 //Kotlin ← Java1, Java2
class B : Java1, Java2 { //Kotlin ← Java1, Java2 with explicit override
override fun invoke() { }
override fun plus(i: Any?): Java2 {
return null!!
}
override fun get(i: Any?): Any {
return 2
}
override fun plus(i: Int?): Java1 {
return null!!
}
override fun get(i: Int?): Int {
return 3
}
}
abstract class C : KotlinInterface, Java1 //Kotlin ← Java, Kotlin2
class D: Java1, KotlinInterface { //Kotlin ← Java, Kotlin2 with explicit override
override fun invoke() { }
override fun plus(i: Int?): Java1 {
return null!!
}
override fun get(i: Int?): Int {
return 4
}
}
interface KotlinInterface {
operator fun invoke()
operator fun get(i: Int?): Int
}
fun test(a: A, b: B, c: C, d: D) {
val k: Unit = a()
val k1: Java1 = a + 1
val k2: Int? = a[1]
val k3: Unit = b()
val k4: Java1 = b + 1
val k5: Java1 = b + null
val k6: Java2 = b + ""
val k7: Int = b[1]
val k8: Int = b[null]
val k9: Any = b[""]
val k10: Unit = c()
val k11: Int = c[1]
val k12: Int = c[null]
val k13: Java1 = c + 1
val k14: Unit = d()
val k15: Int = d[1]
val k16: Int = d[null]
val k17: Java1 = d + 1
}
@@ -0,0 +1,93 @@
abstract class A : Java1, Java2 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class B : Java1, Java2 {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Any?): Any {
return 2
}
override operator fun get(i: Int?): Int {
return 3
}
override operator fun invoke() {
}
override operator fun plus(i: Any?): Java2 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
override operator fun plus(i: Int?): Java1 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
abstract class C : Java1, KotlinInterface {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
}
class D : Java1, KotlinInterface {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
override operator fun get(i: Int?): Int {
return 4
}
override operator fun invoke() {
}
override operator fun plus(i: Int?): Java1 {
return CHECK_NOT_NULL<Nothing>(arg0 = null)
}
}
interface KotlinInterface {
abstract operator fun get(i: Int?): Int
abstract operator fun invoke()
}
fun test(a: A, b: B, c: C, d: D) {
val k: Unit = a.invoke()
val k1: Java1 = a.plus(i = 1) /*!! Java1 */
val k2: Int? = a.get(i = 1)
val k3: Unit = b.invoke()
val k4: Java1 = b.plus(i = 1)
val k5: Java1 = b.plus(i = null)
val k6: Java2 = b.plus(i = "")
val k7: Int = b.get(i = 1)
val k8: Int = b.get(i = null)
val k9: Any = b.get(i = "")
val k10: Unit = c.invoke()
val k11: Int = c.get(i = 1)
val k12: Int = c.get(i = null)
val k13: Java1 = c.plus(i = 1) /*!! Java1 */
val k14: Unit = d.invoke()
val k15: Int = d.get(i = 1)
val k16: Int = d.get(i = null)
val k17: Java1 = d.plus(i = 1)
}
@@ -0,0 +1,167 @@
// CHECK:
// Mangled name: A
// Public signature: /A|null[0]
abstract class A : Java1, Java2 {
// CHECK:
// Mangled name: A#<init>(){}
// Public signature: /A.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: A#get(kotlin.Int?){}kotlin.Int?
// Public signature: /A.get|7040689195092882450[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int?
abstract /* fake */ override operator fun get(i: Int?): Int?
// CHECK JVM_IR:
// Mangled name: A#get(kotlin.Any?){}kotlin.Any?
// Public signature: /A.get|8710632129153264173[0]
// Public signature debug description: get(kotlin.Any?){}kotlin.Any?
abstract /* fake */ override operator fun get(i: Any?): Any?
// CHECK:
// Mangled name: A#invoke(){}
// Public signature: /A.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
abstract /* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: A#plus(kotlin.Int?){}Java1?
// Public signature: /A.plus|-7032856236956634841[0]
// Public signature debug description: plus(kotlin.Int?){}Java1?
abstract /* fake */ override operator fun plus(i: Int?): Java1?
// CHECK JVM_IR:
// Mangled name: A#plus(kotlin.Any?){}Java2?
// Public signature: /A.plus|-7463288905288082942[0]
// Public signature debug description: plus(kotlin.Any?){}Java2?
abstract /* fake */ override operator fun plus(i: Any?): Java2?
}
// CHECK:
// Mangled name: B
// Public signature: /B|null[0]
class B : Java1, Java2 {
// CHECK:
// Mangled name: B#<init>(){}
// Public signature: /B.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: B#get(kotlin.Any?){}kotlin.Any
// Public signature: /B.get|-2113546338636552698[0]
// Public signature debug description: get(kotlin.Any?){}kotlin.Any
override operator fun get(i: Any?): Any
// CHECK JVM_IR:
// Mangled name: B#get(kotlin.Int?){}kotlin.Int
// Public signature: /B.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: B#invoke(){}
// Public signature: /B.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: B#plus(kotlin.Any?){}Java2
// Public signature: /B.plus|7623942856736290743[0]
// Public signature debug description: plus(kotlin.Any?){}Java2
override operator fun plus(i: Any?): Java2
// CHECK JVM_IR:
// Mangled name: B#plus(kotlin.Int?){}Java1
// Public signature: /B.plus|5151435286051456288[0]
// Public signature debug description: plus(kotlin.Int?){}Java1
override operator fun plus(i: Int?): Java1
}
// CHECK:
// Mangled name: C
// Public signature: /C|null[0]
abstract class C : Java1, KotlinInterface {
// CHECK:
// Mangled name: C#<init>(){}
// Public signature: /C.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: C#get(kotlin.Int?){}kotlin.Int
// Public signature: /C.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
abstract /* fake */ override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: C#invoke(){}
// Public signature: /C.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
abstract /* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: C#plus(kotlin.Int?){}Java1?
// Public signature: /C.plus|-7032856236956634841[0]
// Public signature debug description: plus(kotlin.Int?){}Java1?
abstract /* fake */ override operator fun plus(i: Int?): Java1?
}
// CHECK:
// Mangled name: D
// Public signature: /D|null[0]
class D : Java1, KotlinInterface {
// CHECK:
// Mangled name: D#<init>(){}
// Public signature: /D.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: D#get(kotlin.Int?){}kotlin.Int
// Public signature: /D.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
override operator fun get(i: Int?): Int
// CHECK:
// Mangled name: D#invoke(){}
// Public signature: /D.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: D#plus(kotlin.Int?){}Java1
// Public signature: /D.plus|5151435286051456288[0]
// Public signature debug description: plus(kotlin.Int?){}Java1
override operator fun plus(i: Int?): Java1
}
// CHECK:
// Mangled name: KotlinInterface
// Public signature: /KotlinInterface|null[0]
interface KotlinInterface {
// CHECK JVM_IR:
// Mangled name: KotlinInterface#get(kotlin.Int?){}kotlin.Int
// Public signature: /KotlinInterface.get|6449384512088502848[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int
abstract operator fun get(i: Int?): Int
// CHECK:
// Mangled name: KotlinInterface#invoke(){}
// Public signature: /KotlinInterface.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
abstract operator fun invoke(): Unit
}
// CHECK:
// Mangled name: #test(A;B;C;D){}
// Public signature: /test|7656439746344069424[0]
// Public signature debug description: test(A;B;C;D){}
fun test(a: A, b: B, c: C, d: D): Unit
@@ -0,0 +1,107 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Int?>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
<T>: kotlin.Int?
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Int?>]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] kotlin.Int? [fake_override,operator]
overridden:
public open fun get (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] T of <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>, i:@[FlexibleNullability] kotlin.Int?) returnType:@[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? [fake_override,operator]
overridden:
public open fun plus (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
VALUE_PARAMETER name:i index:0 type:@[FlexibleNullability] kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Any>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
<T>: kotlin.Any
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Any>]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:kotlin.Any [operator]
overridden:
public open fun get (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] T of <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B'
CONST Int type=kotlin.Int value=1
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:<root>.Java1<kotlin.Any> [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Any?): <root>.Java1<kotlin.Any> declared in <root>.B'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1<kotlin.Any> origin=null
<class: T>: kotlin.Any
FUN name:test visibility:public modality:FINAL <> (a:<root>.A, b:<root>.B) returnType:kotlin.Unit
VALUE_PARAMETER name:a index:0 type:<root>.A
VALUE_PARAMETER name:b index:1 type:<root>.B
BLOCK_BODY
VAR name:a type:<root>.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=null
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1<*>? [val]
CALL 'public open fun plus (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.A' type=@[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? origin=PLUS
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int? [val]
CALL 'public open fun get (i: @[FlexibleNullability] kotlin.Int?): @[FlexibleNullability] kotlin.Int? declared in <root>.A' type=@[FlexibleNullability] kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:b type:<root>.B [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.B' type=<root>.B origin=null
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=null
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1<*> [val]
CALL 'public open fun plus (i: kotlin.Any?): <root>.Java1<kotlin.Any> declared in <root>.B' type=<root>.Java1<kotlin.Any> origin=PLUS
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Any [val]
CALL 'public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,39 @@
class A : Java1<Int?> {
constructor() /* primary */ {
super/*Java1*/<Int?>()
/* <init>() */
}
}
class B : Java1<Any> {
constructor() /* primary */ {
super/*Java1*/<Any>()
/* <init>() */
}
override operator fun get(i: Any?): Any {
return 1
}
override operator fun invoke() {
}
override operator fun plus(i: Any?): Java1<Any> {
return Java1<Any>()
}
}
fun test(a: A, b: B) {
val a: A = A()
val k: Unit = a.invoke()
val k1: Java1<*>? = a.plus(i = 1)
val k2: Int? = a.get(i = 1)
val b: B = B()
val k3: Unit = b.invoke()
val k4: Java1<*> = b.plus(i = 1)
val k5: Any = b.get(i = 1)
}
@@ -0,0 +1,107 @@
FILE fqName:<root> fileName:/1.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Int?>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.A
CONSTRUCTOR visibility:public <> () returnType:<root>.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
<T>: @[FlexibleNullability] kotlin.Int?
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Int?>]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>, i:kotlin.Int?) returnType:kotlin.Int? [fake_override,operator]
overridden:
public open fun get (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] T of <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:invoke visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>) returnType:kotlin.Unit [fake_override,operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
FUN FAKE_OVERRIDE name:plus visibility:public modality:OPEN <> ($this:<root>.Java1<kotlin.Int?>, i:kotlin.Int?) returnType:@[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? [fake_override,operator]
overridden:
public open fun plus (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.Java1<kotlin.Int?>
VALUE_PARAMETER name:i index:0 type:kotlin.Int?
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Any>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
CONSTRUCTOR visibility:public <> () returnType:<root>.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1'
<T>: @[FlexibleNullability] kotlin.Any?
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:FINAL visibility:public superTypes:[<root>.Java1<kotlin.Any>]'
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 declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:get visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:kotlin.Any [operator]
overridden:
public open fun get (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] T of <root>.Java1? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B'
CONST Int type=kotlin.Int value=1
FUN name:invoke visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [operator]
overridden:
public open fun invoke (): kotlin.Unit declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
BLOCK_BODY
FUN name:plus visibility:public modality:OPEN <> ($this:<root>.B, i:kotlin.Any?) returnType:<root>.Java1<kotlin.Any> [operator]
overridden:
public open fun plus (i: @[FlexibleNullability] T of <root>.Java1?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.Java1
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:i index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun plus (i: kotlin.Any?): <root>.Java1<kotlin.Any> declared in <root>.B'
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Java1' type=<root>.Java1<kotlin.Any> origin=null
<class: T>: @[FlexibleNullability] kotlin.Any?
FUN name:test visibility:public modality:FINAL <> (a:<root>.A, b:<root>.B) returnType:kotlin.Unit
VALUE_PARAMETER name:a index:0 type:<root>.A
VALUE_PARAMETER name:b index:1 type:<root>.B
BLOCK_BODY
VAR name:a type:<root>.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.A' type=<root>.A origin=null
VAR name:k type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.A' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=VARIABLE_AS_FUNCTION
VAR name:k1 type:<root>.Java1<*>? [val]
CALL 'public open fun plus (i: kotlin.Int?): @[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? declared in <root>.A' type=@[FlexibleNullability] @[RawType] <root>.Java1<@[FlexibleNullability] kotlin.Any?>? origin=PLUS
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k2 type:kotlin.Int? [val]
CALL 'public open fun get (i: kotlin.Int?): kotlin.Int? declared in <root>.A' type=kotlin.Int? origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val a: <root>.A declared in <root>.test' type=<root>.A origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:b type:<root>.B [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.B' type=<root>.B origin=null
VAR name:k3 type:kotlin.Unit [val]
CALL 'public open fun invoke (): kotlin.Unit declared in <root>.B' type=kotlin.Unit origin=INVOKE
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=VARIABLE_AS_FUNCTION
VAR name:k4 type:<root>.Java1<*> [val]
CALL 'public open fun plus (i: kotlin.Any?): <root>.Java1<kotlin.Any> declared in <root>.B' type=<root>.Java1<kotlin.Any> origin=PLUS
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
VAR name:k5 type:kotlin.Any [val]
CALL 'public open fun get (i: kotlin.Any?): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_ARRAY_ELEMENT
$this: GET_VAR 'val b: <root>.B declared in <root>.test' type=<root>.B origin=null
i: CONST Int type=kotlin.Int value=1
@@ -0,0 +1,31 @@
// TARGET_BACKEND: JVM
// FILE: Java1.java
public class Java1<T> {
public void invoke(){};
public Java1 plus(T i){ return this;};
public T get(T i){return null;}
}
// FILE: 1.kt
class A : Java1<Int?>()
class B : Java1<Any>() {
override fun invoke() {}
override fun get(i: Any?): Any {
return 1
}
override fun plus(i: Any?): Java1<Any> {
return Java1<Any>()
}
}
fun test(a: A, b: B) {
val a = A()
val k: Unit = a()
val k1: Java1<*>? = a + 1
val k2: Int? = a[1]
val b = B()
val k3: Unit = b()
val k4: Java1<*> = b + 1
val k5: Any = b[1]
}
@@ -0,0 +1,39 @@
class A : Java1<Int?> {
constructor() /* primary */ {
super/*Java1*/<@FlexibleNullability Int?>()
/* <init>() */
}
}
class B : Java1<Any> {
constructor() /* primary */ {
super/*Java1*/<@FlexibleNullability Any?>()
/* <init>() */
}
override operator fun get(i: Any?): Any {
return 1
}
override operator fun invoke() {
}
override operator fun plus(i: Any?): Java1<Any> {
return Java1<@FlexibleNullability Any?>()
}
}
fun test(a: A, b: B) {
val a: A = A()
val k: Unit = a.invoke()
val k1: Java1<*>? = a.plus(i = 1)
val k2: Int? = a.get(i = 1)
val b: B = B()
val k3: Unit = b.invoke()
val k4: Java1<*> = b.plus(i = 1)
val k5: Any = b.get(i = 1)
}
@@ -0,0 +1,65 @@
// CHECK:
// Mangled name: A
// Public signature: /A|null[0]
class A : Java1<Int?> {
// CHECK:
// Mangled name: A#<init>(){}
// Public signature: /A.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: A#get(kotlin.Int?){}kotlin.Int?
// Public signature: /A.get|7040689195092882450[0]
// Public signature debug description: get(kotlin.Int?){}kotlin.Int?
/* fake */ override operator fun get(i: Int?): Int?
// CHECK:
// Mangled name: A#invoke(){}
// Public signature: /A.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
/* fake */ override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: A#plus(kotlin.Int?){}Java1<kotlin.Any?>?
// Public signature: /A.plus|9053177338193059553[0]
// Public signature debug description: plus(kotlin.Int?){}Java1<kotlin.Any?>?
/* fake */ override operator fun plus(i: Int?): Java1<Any?>?
}
// CHECK:
// Mangled name: B
// Public signature: /B|null[0]
class B : Java1<Any> {
// CHECK:
// Mangled name: B#<init>(){}
// Public signature: /B.<init>|-5645683436151566731[0]
// Public signature debug description: <init>(){}
constructor() /* primary */
// CHECK JVM_IR:
// Mangled name: B#get(kotlin.Any?){}kotlin.Any
// Public signature: /B.get|-2113546338636552698[0]
// Public signature debug description: get(kotlin.Any?){}kotlin.Any
override operator fun get(i: Any?): Any
// CHECK:
// Mangled name: B#invoke(){}
// Public signature: /B.invoke|-4663091332620260873[0]
// Public signature debug description: invoke(){}
override operator fun invoke(): Unit
// CHECK JVM_IR:
// Mangled name: B#plus(kotlin.Any?){}Java1<kotlin.Any>
// Public signature: /B.plus|954734645001127487[0]
// Public signature debug description: plus(kotlin.Any?){}Java1<kotlin.Any>
override operator fun plus(i: Any?): Java1<Any>
}
// CHECK:
// Mangled name: #test(A;B){}
// Public signature: /test|-2533013708701322011[0]
// Public signature debug description: test(A;B){}
fun test(a: A, b: B): Unit