FIR: set dispatch receiver for data class generated functions

This commit is contained in:
Mikhail Glukhikh
2019-08-28 14:50:40 +03:00
parent 0d5cfa97a5
commit 13d14df8ae
14 changed files with 89 additions and 23 deletions
@@ -406,7 +406,9 @@ class DeclarationsConverter(
//parse data class
if (modifiers.isDataClass() && firPrimaryConstructor != null) {
val zippedParameters = MutableList(properties.size) { null }.zip(properties)
zippedParameters.generateComponentFunctions(session, firClass, context.packageFqName, context.className)
zippedParameters.generateComponentFunctions(
session, firClass, context.packageFqName, context.className, firPrimaryConstructor
)
zippedParameters.generateCopyFunction(
session, null, firClass, context.packageFqName, context.className, firPrimaryConstructor
)
@@ -15,19 +15,19 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.expressions.impl.*
import org.jetbrains.kotlin.fir.references.FirImplicitThisReference
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtTypeReference
fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
session: FirSession, firClass: FirClassImpl, packageFqName: FqName, classFqName: FqName
session: FirSession, firClass: FirClassImpl, packageFqName: FqName, classFqName: FqName,
firPrimaryConstructor: FirConstructor
) {
var componentIndex = 1
for ((ktParameter, firProperty) in this) {
@@ -52,6 +52,9 @@ fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
ktParameter,
FirQualifiedAccessExpressionImpl(ktParameter).apply {
val parameterName = firProperty.name
dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply {
typeRef = firPrimaryConstructor.returnTypeRef
}
calleeReference = FirResolvedCallableReferenceImpl(
ktParameter,
parameterName, firProperty.symbol
@@ -83,15 +86,17 @@ fun List<Pair<KtParameter?, FirProperty>>.generateCopyFunction(
isInfix = false, isInline = false,
isTailRec = false, isExternal = false,
isSuspend = false, receiverTypeRef = null,
returnTypeRef = firPrimaryConstructor.returnTypeRef//FirImplicitTypeRefImpl(session, this)
returnTypeRef = firPrimaryConstructor.returnTypeRef
).apply {
val copyFunction = this
for ((ktParameter, firProperty) in this@generateCopyFunction) {
val name = firProperty.name
valueParameters += FirValueParameterImpl(
session, ktParameter, name,
firProperty.returnTypeRef,
FirQualifiedAccessExpressionImpl(ktParameter).apply {
dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply {
typeRef = firPrimaryConstructor.returnTypeRef
}
calleeReference = FirResolvedCallableReferenceImpl(ktParameter, name, firProperty.symbol)
},
isCrossinline = false, isNoinline = false, isVararg = false
@@ -491,7 +491,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
val zippedParameters = classOrObject.primaryConstructorParameters.zip(
firClass.declarations.filterIsInstance<FirProperty>()
)
zippedParameters.generateComponentFunctions(session, firClass, context.packageFqName, context.className)
zippedParameters.generateComponentFunctions(
session, firClass, context.packageFqName, context.className, firPrimaryConstructor)
zippedParameters.generateCopyFunction(
session, classOrObject, firClass, context.packageFqName, context.className, firPrimaryConstructor
)
@@ -14,18 +14,18 @@ FILE: destructuring.kt
public? get(): String
public final fun component1(): <implicit> {
^component1 R|/Some.first|
^component1 D|this@R|/Some||.R|/Some.first|
}
public final fun component2(): <implicit> {
^component2 R|/Some.second|
^component2 D|this@R|/Some||.R|/Some.second|
}
public final fun component3(): <implicit> {
^component3 R|/Some.third|
^component3 D|this@R|/Some||.R|/Some.third|
}
public final fun copy(first: Int = R|/Some.first|, second: Double = R|/Some.second|, third: String = R|/Some.third|): R|Some| {
public final fun copy(first: Int = D|this@R|/Some||.R|/Some.first|, second: Double = D|this@R|/Some||.R|/Some.second|, third: String = D|this@R|/Some||.R|/Some.third|): R|Some| {
}
}
@@ -36,14 +36,14 @@ FILE: for.kt
public? get(): Int
public final fun component1(): <implicit> {
^component1 R|/Some.x|
^component1 D|this@R|/Some||.R|/Some.x|
}
public final fun component2(): <implicit> {
^component2 R|/Some.y|
^component2 D|this@R|/Some||.R|/Some.y|
}
public final fun copy(x: Int = R|/Some.x|, y: Int = R|/Some.y|): R|Some| {
public final fun copy(x: Int = D|this@R|/Some||.R|/Some.x|, y: Int = D|this@R|/Some||.R|/Some.y|): R|Some| {
}
}
@@ -11,14 +11,14 @@ FILE: lambda.kt
public? get(): Int
public final fun component1(): <implicit> {
^component1 R|/Tuple.x|
^component1 D|this@R|/Tuple||.R|/Tuple.x|
}
public final fun component2(): <implicit> {
^component2 R|/Tuple.y|
^component2 D|this@R|/Tuple||.R|/Tuple.y|
}
public final fun copy(x: Int = R|/Tuple.x|, y: Int = R|/Tuple.y|): R|Tuple| {
public final fun copy(x: Int = D|this@R|/Tuple||.R|/Tuple.x|, y: Int = D|this@R|/Tuple||.R|/Tuple.y|): R|Tuple| {
}
}
+3 -3
View File
@@ -11,14 +11,14 @@ FILE: copy.kt
public get(): R|kotlin/String|
public final fun component1(): R|kotlin/Int| {
^component1 R|/Some.x|
^component1 D|this@R|/Some||.R|/Some.x|
}
public final fun component2(): R|kotlin/String| {
^component2 R|/Some.y|
^component2 D|this@R|/Some||.R|/Some.y|
}
public final fun copy(x: R|kotlin/Int| = R|/Some.x|, y: R|kotlin/String| = R|/Some.y|): R|Some| {
public final fun copy(x: R|kotlin/Int| = D|this@R|/Some||.R|/Some.x|, y: R|kotlin/String| = D|this@R|/Some||.R|/Some.y|): R|Some| {
}
}
@@ -11,14 +11,14 @@ FILE: components.kt
public get(): R|kotlin/String|
public final fun component1(): R|kotlin/Int| {
^component1 R|/D.x|
^component1 D|this@R|/D||.R|/D.x|
}
public final fun component2(): R|kotlin/String| {
^component2 R|/D.y|
^component2 D|this@R|/D||.R|/D.y|
}
public final fun copy(x: R|kotlin/Int| = R|/D.x|, y: R|kotlin/String| = R|/D.y|): R|D| {
public final fun copy(x: R|kotlin/Int| = D|this@R|/D||.R|/D.x|, y: R|kotlin/String| = D|this@R|/D||.R|/D.y|): R|D| {
}
}
@@ -118,75 +118,93 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Array<kotlin.String> declared in <root>.Test1'
CALL 'public final fun <get-stringArray> (): kotlin.Array<kotlin.String> declared in <root>.Test1' type=kotlin.Array<kotlin.String> origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component2 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.CharArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component2 (): kotlin.CharArray declared in <root>.Test1'
CALL 'public final fun <get-charArray> (): kotlin.CharArray declared in <root>.Test1' type=kotlin.CharArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component3 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.BooleanArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component3 (): kotlin.BooleanArray declared in <root>.Test1'
CALL 'public final fun <get-booleanArray> (): kotlin.BooleanArray declared in <root>.Test1' type=kotlin.BooleanArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component4 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.ByteArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component4 (): kotlin.ByteArray declared in <root>.Test1'
CALL 'public final fun <get-byteArray> (): kotlin.ByteArray declared in <root>.Test1' type=kotlin.ByteArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component5 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.ShortArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component5 (): kotlin.ShortArray declared in <root>.Test1'
CALL 'public final fun <get-shortArray> (): kotlin.ShortArray declared in <root>.Test1' type=kotlin.ShortArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component6 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.IntArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component6 (): kotlin.IntArray declared in <root>.Test1'
CALL 'public final fun <get-intArray> (): kotlin.IntArray declared in <root>.Test1' type=kotlin.IntArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component7 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.LongArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component7 (): kotlin.LongArray declared in <root>.Test1'
CALL 'public final fun <get-longArray> (): kotlin.LongArray declared in <root>.Test1' type=kotlin.LongArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component8 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.FloatArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component8 (): kotlin.FloatArray declared in <root>.Test1'
CALL 'public final fun <get-floatArray> (): kotlin.FloatArray declared in <root>.Test1' type=kotlin.FloatArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component9 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.DoubleArray
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component9 (): kotlin.DoubleArray declared in <root>.Test1'
CALL 'public final fun <get-doubleArray> (): kotlin.DoubleArray declared in <root>.Test1' type=kotlin.DoubleArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test1, stringArray:kotlin.Array<kotlin.String>, charArray:kotlin.CharArray, booleanArray:kotlin.BooleanArray, byteArray:kotlin.ByteArray, shortArray:kotlin.ShortArray, intArray:kotlin.IntArray, longArray:kotlin.LongArray, floatArray:kotlin.FloatArray, doubleArray:kotlin.DoubleArray) returnType:<root>.Test1
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
VALUE_PARAMETER name:stringArray index:0 type:kotlin.Array<kotlin.String>
EXPRESSION_BODY
CALL 'public final fun <get-stringArray> (): kotlin.Array<kotlin.String> declared in <root>.Test1' type=kotlin.Array<kotlin.String> origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:charArray index:1 type:kotlin.CharArray
EXPRESSION_BODY
CALL 'public final fun <get-charArray> (): kotlin.CharArray declared in <root>.Test1' type=kotlin.CharArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:booleanArray index:2 type:kotlin.BooleanArray
EXPRESSION_BODY
CALL 'public final fun <get-booleanArray> (): kotlin.BooleanArray declared in <root>.Test1' type=kotlin.BooleanArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:byteArray index:3 type:kotlin.ByteArray
EXPRESSION_BODY
CALL 'public final fun <get-byteArray> (): kotlin.ByteArray declared in <root>.Test1' type=kotlin.ByteArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:shortArray index:4 type:kotlin.ShortArray
EXPRESSION_BODY
CALL 'public final fun <get-shortArray> (): kotlin.ShortArray declared in <root>.Test1' type=kotlin.ShortArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:intArray index:5 type:kotlin.IntArray
EXPRESSION_BODY
CALL 'public final fun <get-intArray> (): kotlin.IntArray declared in <root>.Test1' type=kotlin.IntArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:longArray index:6 type:kotlin.LongArray
EXPRESSION_BODY
CALL 'public final fun <get-longArray> (): kotlin.LongArray declared in <root>.Test1' type=kotlin.LongArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:floatArray index:7 type:kotlin.FloatArray
EXPRESSION_BODY
CALL 'public final fun <get-floatArray> (): kotlin.FloatArray declared in <root>.Test1' type=kotlin.FloatArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:doubleArray index:8 type:kotlin.DoubleArray
EXPRESSION_BODY
CALL 'public final fun <get-doubleArray> (): kotlin.DoubleArray declared in <root>.Test1' type=kotlin.DoubleArray origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -225,11 +243,13 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Array<T of <root>.Test2> declared in <root>.Test2'
CALL 'public final fun <get-genericArray> (): kotlin.Array<T of <root>.Test2> declared in <root>.Test2' type=kotlin.Array<T of <root>.Test2> origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2<T of <uninitialized parent>> origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test2, genericArray:kotlin.Array<T of <root>.Test2>) returnType:<root>.Test2<T of <uninitialized parent>>
$this: VALUE_PARAMETER name:<this> type:<root>.Test2
VALUE_PARAMETER name:genericArray index:0 type:kotlin.Array<T of <root>.Test2>
EXPRESSION_BODY
CALL 'public final fun <get-genericArray> (): kotlin.Array<T of <root>.Test2> declared in <root>.Test2' type=kotlin.Array<T of <root>.Test2> origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2<T of <uninitialized parent>> origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -267,11 +287,13 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Array<kotlin.Any>? declared in <root>.Test3'
CALL 'public final fun <get-anyArrayN> (): kotlin.Array<kotlin.Any>? declared in <root>.Test3' type=kotlin.Array<kotlin.Any>? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test3, anyArrayN:kotlin.Array<kotlin.Any>?) returnType:<root>.Test3
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
VALUE_PARAMETER name:anyArrayN index:0 type:kotlin.Array<kotlin.Any>?
EXPRESSION_BODY
CALL 'public final fun <get-anyArrayN> (): kotlin.Array<kotlin.Any>? declared in <root>.Test3' type=kotlin.Array<kotlin.Any>? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
+16
View File
@@ -46,27 +46,33 @@ FILE fqName:<root> fileName:/dataClasses.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Int declared in <root>.Test1'
CALL 'public final fun <get-x> (): kotlin.Int declared in <root>.Test1' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component2 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.String
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component2 (): kotlin.String declared in <root>.Test1'
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test1' type=kotlin.String origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:component3 visibility:public modality:FINAL <> ($this:<root>.Test1) returnType:kotlin.Any
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component3 (): kotlin.Any declared in <root>.Test1'
CALL 'public final fun <get-z> (): kotlin.Any declared in <root>.Test1' type=kotlin.Any origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test1, x:kotlin.Int, y:kotlin.String, z:kotlin.Any) returnType:<root>.Test1
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
VALUE_PARAMETER name:x index:0 type:kotlin.Int
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.Int declared in <root>.Test1' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:y index:1 type:kotlin.String
EXPRESSION_BODY
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test1' type=kotlin.String origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
VALUE_PARAMETER name:z index:2 type:kotlin.Any
EXPRESSION_BODY
CALL 'public final fun <get-z> (): kotlin.Any declared in <root>.Test1' type=kotlin.Any origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -104,11 +110,13 @@ FILE fqName:<root> fileName:/dataClasses.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Any? declared in <root>.Test2'
CALL 'public final fun <get-x> (): kotlin.Any? declared in <root>.Test2' type=kotlin.Any? origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test2, x:kotlin.Any?) returnType:<root>.Test2
$this: VALUE_PARAMETER name:<this> type:<root>.Test2
VALUE_PARAMETER name:x index:0 type:kotlin.Any?
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.Any? declared in <root>.Test2' type=kotlin.Any? origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -182,35 +190,43 @@ FILE fqName:<root> fileName:/dataClasses.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Double declared in <root>.Test3'
CALL 'public final fun <get-d> (): kotlin.Double declared in <root>.Test3' type=kotlin.Double origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
FUN name:component2 visibility:public modality:FINAL <> ($this:<root>.Test3) returnType:kotlin.Double?
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component2 (): kotlin.Double? declared in <root>.Test3'
CALL 'public final fun <get-dn> (): kotlin.Double? declared in <root>.Test3' type=kotlin.Double? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
FUN name:component3 visibility:public modality:FINAL <> ($this:<root>.Test3) returnType:kotlin.Float
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component3 (): kotlin.Float declared in <root>.Test3'
CALL 'public final fun <get-f> (): kotlin.Float declared in <root>.Test3' type=kotlin.Float origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
FUN name:component4 visibility:public modality:FINAL <> ($this:<root>.Test3) returnType:kotlin.Float?
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component4 (): kotlin.Float? declared in <root>.Test3'
CALL 'public final fun <get-df> (): kotlin.Float? declared in <root>.Test3' type=kotlin.Float? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test3, d:kotlin.Double, dn:kotlin.Double?, f:kotlin.Float, df:kotlin.Float?) returnType:<root>.Test3
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
VALUE_PARAMETER name:d index:0 type:kotlin.Double
EXPRESSION_BODY
CALL 'public final fun <get-d> (): kotlin.Double declared in <root>.Test3' type=kotlin.Double origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
VALUE_PARAMETER name:dn index:1 type:kotlin.Double?
EXPRESSION_BODY
CALL 'public final fun <get-dn> (): kotlin.Double? declared in <root>.Test3' type=kotlin.Double? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
VALUE_PARAMETER name:f index:2 type:kotlin.Float
EXPRESSION_BODY
CALL 'public final fun <get-f> (): kotlin.Float declared in <root>.Test3' type=kotlin.Float origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
VALUE_PARAMETER name:df index:3 type:kotlin.Float?
EXPRESSION_BODY
CALL 'public final fun <get-df> (): kotlin.Float? declared in <root>.Test3' type=kotlin.Float? origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -23,11 +23,13 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): T of <root>.Test1 declared in <root>.Test1'
CALL 'public final fun <get-x> (): T of <root>.Test1 declared in <root>.Test1' type=T of <root>.Test1 origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1<T of <uninitialized parent>> origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test1, x:T of <root>.Test1) returnType:<root>.Test1<T of <uninitialized parent>>
$this: VALUE_PARAMETER name:<this> type:<root>.Test1
VALUE_PARAMETER name:x index:0 type:T of <root>.Test1
EXPRESSION_BODY
CALL 'public final fun <get-x> (): T of <root>.Test1 declared in <root>.Test1' type=T of <root>.Test1 origin=null
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1' type=<root>.Test1<T of <uninitialized parent>> origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -66,11 +68,13 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): T of <root>.Test2 declared in <root>.Test2'
CALL 'public final fun <get-x> (): T of <root>.Test2 declared in <root>.Test2' type=T of <root>.Test2 origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2<T of <uninitialized parent>> origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test2, x:T of <root>.Test2) returnType:<root>.Test2<T of <uninitialized parent>>
$this: VALUE_PARAMETER name:<this> type:<root>.Test2
VALUE_PARAMETER name:x index:0 type:T of <root>.Test2
EXPRESSION_BODY
CALL 'public final fun <get-x> (): T of <root>.Test2 declared in <root>.Test2' type=T of <root>.Test2 origin=null
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2' type=<root>.Test2<T of <uninitialized parent>> origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -109,11 +113,13 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.collections.List<T of <root>.Test3> declared in <root>.Test3'
CALL 'public final fun <get-x> (): kotlin.collections.List<T of <root>.Test3> declared in <root>.Test3' type=kotlin.collections.List<T of <root>.Test3> origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3<T of <uninitialized parent>> origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test3, x:kotlin.collections.List<T of <root>.Test3>) returnType:<root>.Test3<T of <uninitialized parent>>
$this: VALUE_PARAMETER name:<this> type:<root>.Test3
VALUE_PARAMETER name:x index:0 type:kotlin.collections.List<T of <root>.Test3>
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.collections.List<T of <root>.Test3> declared in <root>.Test3' type=kotlin.collections.List<T of <root>.Test3> origin=null
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3' type=<root>.Test3<T of <uninitialized parent>> origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -151,11 +157,13 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.collections.List<kotlin.String> declared in <root>.Test4'
CALL 'public final fun <get-x> (): kotlin.collections.List<kotlin.String> declared in <root>.Test4' type=kotlin.collections.List<kotlin.String> origin=null
$this: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4' type=<root>.Test4 origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test4, x:kotlin.collections.List<kotlin.String>) returnType:<root>.Test4
$this: VALUE_PARAMETER name:<this> type:<root>.Test4
VALUE_PARAMETER name:x index:0 type:kotlin.collections.List<kotlin.String>
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.collections.List<kotlin.String> declared in <root>.Test4' type=kotlin.collections.List<kotlin.String> origin=null
$this: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4' type=<root>.Test4 origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -27,11 +27,13 @@ FILE fqName:<root> fileName:/lambdaInDataClassDefaultParameter.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> declared in <root>.A'
CALL 'public final fun <get-runA> (): kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> declared in <root>.A' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.A, runA:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit>) returnType:<root>.A
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:runA index:0 type:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit>
EXPRESSION_BODY
CALL 'public final fun <get-runA> (): kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> declared in <root>.A' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -78,11 +80,13 @@ FILE fqName:<root> fileName:/lambdaInDataClassDefaultParameter.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Any declared in <root>.B'
CALL 'public final fun <get-x> (): kotlin.Any declared in <root>.B' type=kotlin.Any origin=null
$this: GET_VAR '<this>: <root>.B declared in <root>.B' type=<root>.B origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.B, x:kotlin.Any) returnType:<root>.B
$this: VALUE_PARAMETER name:<this> type:<root>.B
VALUE_PARAMETER name:x index:0 type:kotlin.Any
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.Any declared in <root>.B' type=kotlin.Any origin=null
$this: GET_VAR '<this>: <root>.B declared in <root>.B' type=<root>.B origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -37,19 +37,23 @@ FILE fqName:<root> fileName:/dataClassMembers.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): T of <root>.Test declared in <root>.Test'
CALL 'public final fun <get-x> (): T of <root>.Test declared in <root>.Test' type=T of <root>.Test origin=null
$this: GET_VAR '<this>: <root>.Test declared in <root>.Test' type=<root>.Test<T of <uninitialized parent>> origin=null
FUN name:component2 visibility:public modality:FINAL <> ($this:<root>.Test) returnType:kotlin.String
$this: VALUE_PARAMETER name:<this> type:<root>.Test
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component2 (): kotlin.String declared in <root>.Test'
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test' type=kotlin.String origin=null
$this: GET_VAR '<this>: <root>.Test declared in <root>.Test' type=<root>.Test<T of <uninitialized parent>> origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.Test, x:T of <root>.Test, y:kotlin.String) returnType:<root>.Test<T of <uninitialized parent>>
$this: VALUE_PARAMETER name:<this> type:<root>.Test
VALUE_PARAMETER name:x index:0 type:T of <root>.Test
EXPRESSION_BODY
CALL 'public final fun <get-x> (): T of <root>.Test declared in <root>.Test' type=T of <root>.Test origin=null
$this: GET_VAR '<this>: <root>.Test declared in <root>.Test' type=<root>.Test<T of <uninitialized parent>> origin=null
VALUE_PARAMETER name:y index:1 type:kotlin.String
EXPRESSION_BODY
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test' type=kotlin.String origin=null
$this: GET_VAR '<this>: <root>.Test declared in <root>.Test' type=<root>.Test<T of <uninitialized parent>> origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
@@ -34,19 +34,23 @@ FILE fqName:<root> fileName:/destructuringInLambda.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component1 (): kotlin.Int declared in <root>.A'
CALL 'public final fun <get-x> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
FUN name:component2 visibility:public modality:FINAL <> ($this:<root>.A) returnType:kotlin.Int
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun component2 (): kotlin.Int declared in <root>.A'
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
FUN name:copy visibility:public modality:FINAL <> ($this:<root>.A, x:kotlin.Int, y:kotlin.Int) returnType:<root>.A
$this: VALUE_PARAMETER name:<this> type:<root>.A
VALUE_PARAMETER name:x index:0 type:kotlin.Int
EXPRESSION_BODY
CALL 'public final fun <get-x> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
VALUE_PARAMETER name:y index:1 type:kotlin.Int
EXPRESSION_BODY
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.A declared in <root>.A' type=<root>.A origin=null
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden: