FIR resolve: support inferring property type from getter

This commit is contained in:
Mikhail Glukhikh
2019-05-27 17:46:49 +03:00
parent 16ead49967
commit 54078c4e9c
11 changed files with 193 additions and 116 deletions
@@ -13,10 +13,10 @@ FILE fqName:<root> fileName:/castToTypeParameter.kt
TYPE_OP type=T of <root>.castExtFun origin=CAST typeOperand=T of <root>.castExtFun
ERROR_CALL 'Unresolved reference: this#' type=kotlin.Any
PROPERTY name:castExtVal visibility:public modality:FINAL [val]
FUN name:<get-castExtVal> visibility:public modality:FINAL <> () returnType:IrErrorType
FUN name:<get-castExtVal> visibility:public modality:FINAL <> () returnType:T of <uninitialized parent>
correspondingProperty: PROPERTY name:castExtVal visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-castExtVal> (): IrErrorType declared in <root>'
RETURN type=kotlin.Nothing from='public final fun <get-castExtVal> (): T of <uninitialized parent> declared in <root>'
TYPE_OP type=T of <uninitialized parent> origin=CAST typeOperand=T of <uninitialized parent>
ERROR_CALL 'Unresolved reference: this#' type=IrErrorType
CLASS CLASS name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]
@@ -55,19 +55,19 @@ FILE fqName:<root> fileName:/castToTypeParameter.kt
TYPE_OP type=TF of <root>.Host.castGenericMemberExtFun origin=CAST typeOperand=TF of <root>.Host.castGenericMemberExtFun
ERROR_CALL 'Unresolved reference: this#' type=kotlin.Any
PROPERTY name:castMemberExtVal visibility:public modality:FINAL [val]
FUN name:<get-castMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:IrErrorType
FUN name:<get-castMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:T of <root>.Host
correspondingProperty: PROPERTY name:castMemberExtVal visibility:public modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.Host
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-castMemberExtVal> (): IrErrorType declared in <root>.Host'
RETURN type=kotlin.Nothing from='public final fun <get-castMemberExtVal> (): T of <root>.Host declared in <root>.Host'
TYPE_OP type=T of <root>.Host origin=CAST typeOperand=T of <root>.Host
ERROR_CALL 'Unresolved reference: this#' type=<root>.Host<T of <root>.Host>
PROPERTY name:castGenericMemberExtVal visibility:public modality:FINAL [val]
FUN name:<get-castGenericMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:IrErrorType
FUN name:<get-castGenericMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:TV of <uninitialized parent>
correspondingProperty: PROPERTY name:castGenericMemberExtVal visibility:public modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.Host
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-castGenericMemberExtVal> (): IrErrorType declared in <root>.Host'
RETURN type=kotlin.Nothing from='public final fun <get-castGenericMemberExtVal> (): TV of <uninitialized parent> declared in <root>.Host'
TYPE_OP type=TV of <uninitialized parent> origin=CAST typeOperand=TV of <uninitialized parent>
ERROR_CALL 'Unresolved reference: this#' type=<root>.Host<T of <root>.Host>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
@@ -27,12 +27,12 @@ FILE fqName:<root> fileName:/membersImportedFromObject.kt
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:bar type:kotlin.Int visibility:public [final] ' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.<get-bar>' type=<root>.A origin=null
PROPERTY name:barExt visibility:public modality:FINAL [val]
FUN name:<get-barExt> visibility:public modality:FINAL <> ($this:<root>.A) returnType:IrErrorType
FUN name:<get-barExt> visibility:public modality:FINAL <> ($this:<root>.A) returnType:kotlin.Int
correspondingProperty: PROPERTY name:barExt visibility:public modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-barExt> (): IrErrorType declared in <root>.A'
CONST Int type=IrErrorType value=43
RETURN type=kotlin.Nothing from='public final fun <get-barExt> (): kotlin.Int declared in <root>.A'
CONST Int type=kotlin.Int value=43
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any
@@ -75,13 +75,12 @@ FILE fqName:<root> fileName:/membersImportedFromObject.kt
RETURN type=kotlin.Nothing from='public final fun <get-test3> (): kotlin.Int declared in <root>'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test3 type:kotlin.Int visibility:public [final,static] ' type=kotlin.Int origin=null
PROPERTY name:test4 visibility:public modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:test4 type:IrErrorType visibility:public [final,static]
FIELD PROPERTY_BACKING_FIELD name:test4 type:kotlin.Int visibility:public [final,static]
EXPRESSION_BODY
CALL 'public final fun <get-barExt> (): IrErrorType declared in <root>.A' type=IrErrorType origin=null
CALL 'public final fun <get-barExt> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=null
$this: CONST Int type=kotlin.Int value=1
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test4> visibility:public modality:FINAL <> () returnType:IrErrorType
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test4> visibility:public modality:FINAL <> () returnType:kotlin.Int
correspondingProperty: PROPERTY name:test4 visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-test4> (): IrErrorType declared in <root>'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test4 type:IrErrorType visibility:public [final,static] ' type=IrErrorType origin=null
RETURN type=kotlin.Nothing from='public final fun <get-test4> (): kotlin.Int declared in <root>'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:test4 type:kotlin.Int visibility:public [final,static] ' type=kotlin.Int origin=null
@@ -12,10 +12,10 @@ FILE fqName:<root> fileName:/typeParameterClassLiteral.kt
GET_CLASS type=kotlin.reflect.KClass<IrErrorType>
ERROR_CALL 'Unresolved reference: <Unresolved name: T>#' type=IrErrorType
PROPERTY name:classRefExtVal visibility:public modality:FINAL [val]
FUN name:<get-classRefExtVal> visibility:public modality:FINAL <> () returnType:IrErrorType
FUN name:<get-classRefExtVal> visibility:public modality:FINAL <> () returnType:kotlin.reflect.KClass<IrErrorType>
correspondingProperty: PROPERTY name:classRefExtVal visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-classRefExtVal> (): IrErrorType declared in <root>'
RETURN type=kotlin.Nothing from='public final fun <get-classRefExtVal> (): kotlin.reflect.KClass<IrErrorType> declared in <root>'
GET_CLASS type=kotlin.reflect.KClass<IrErrorType>
ERROR_CALL 'Unresolved reference: <Unresolved name: T>#' type=IrErrorType
CLASS CLASS name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]
@@ -39,11 +39,11 @@ FILE fqName:<root> fileName:/typeParameterClassLiteral.kt
GET_CLASS type=kotlin.reflect.KClass<IrErrorType>
ERROR_CALL 'Unresolved reference: <Unresolved name: TF>#' type=IrErrorType
PROPERTY name:classRefGenericMemberExtVal visibility:public modality:FINAL [val]
FUN name:<get-classRefGenericMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:IrErrorType
FUN name:<get-classRefGenericMemberExtVal> visibility:public modality:FINAL <> ($this:<root>.Host) returnType:kotlin.reflect.KClass<IrErrorType>
correspondingProperty: PROPERTY name:classRefGenericMemberExtVal visibility:public modality:FINAL [val]
$this: VALUE_PARAMETER name:<this> type:<root>.Host
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-classRefGenericMemberExtVal> (): IrErrorType declared in <root>.Host'
RETURN type=kotlin.Nothing from='public final fun <get-classRefGenericMemberExtVal> (): kotlin.reflect.KClass<IrErrorType> declared in <root>.Host'
GET_CLASS type=kotlin.reflect.KClass<IrErrorType>
ERROR_CALL 'Unresolved reference: <Unresolved name: TV>#' type=IrErrorType
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean