From 9ebefa3ba68c1de746114e325ed71cdbc2c0aae8 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 12 Feb 2019 14:04:31 +0300 Subject: [PATCH] FIR: make FunctionType class-like, refactor built-ins resolution This breaks total kotlin resolve test because of incorrect rendering of ConeClassErrorType (we are trying to read its symbol) --- .../jetbrains/kotlin/fir/types/ConeTypes.kt | 4 +- .../fir/types/impl/ConeFunctionTypeImpl.kt | 4 +- .../testData/rawBuilder/declarations/F.txt | 4 +- .../declarations/NestedOfAliasedType.txt | 4 +- .../declarations/NestedSuperType.txt | 2 +- .../rawBuilder/declarations/complexTypes.txt | 4 +- .../rawBuilder/declarations/derivedClass.txt | 2 +- .../rawBuilder/declarations/enums.txt | 20 +++++----- .../rawBuilder/declarations/enums2.txt | 6 +-- .../rawBuilder/declarations/expectActual.txt | 4 +- .../declarations/genericFunctions.txt | 2 +- .../rawBuilder/declarations/nestedClass.txt | 4 +- .../declarations/noPrimaryConstructor.txt | 2 +- .../rawBuilder/declarations/simpleClass.txt | 8 ++-- .../rawBuilder/declarations/simpleFun.txt | 4 +- .../declarations/simpleTypeAlias.txt | 2 +- .../declarations/typeAliasWithGeneric.txt | 4 +- .../declarations/typeParameterVsNested.txt | 6 +-- .../declarations/typeParameters.txt | 2 +- .../rawBuilder/declarations/where.txt | 2 +- .../rawBuilder/expressions/annotated.txt | 6 +-- .../rawBuilder/expressions/arrayAccess.txt | 2 +- .../expressions/arrayAssignment.txt | 4 +- .../expressions/callableReferences.txt | 8 ++-- .../testData/rawBuilder/expressions/calls.txt | 8 ++-- .../rawBuilder/expressions/classReference.txt | 4 +- .../expressions/collectionLiterals.txt | 14 +++---- .../rawBuilder/expressions/destructuring.txt | 4 +- .../testData/rawBuilder/expressions/for.txt | 8 ++-- .../rawBuilder/expressions/genericCalls.txt | 2 +- .../testData/rawBuilder/expressions/init.txt | 2 +- .../rawBuilder/expressions/lambda.txt | 4 +- .../rawBuilder/expressions/locals.txt | 2 +- .../rawBuilder/expressions/modifications.txt | 6 +-- .../rawBuilder/expressions/simpleReturns.txt | 2 +- .../testData/rawBuilder/expressions/super.txt | 12 +++--- .../testData/rawBuilder/expressions/these.txt | 2 +- .../testData/rawBuilder/expressions/try.txt | 2 +- .../testData/rawBuilder/expressions/unary.txt | 12 +++--- .../rawBuilder/expressions/variables.txt | 2 +- .../testData/rawBuilder/expressions/while.txt | 4 +- .../fir/resolve/impl/FirTypeResolverImpl.kt | 38 +++++++++++-------- .../resolve/fakeRecursiveTypealias.txt | 2 +- compiler/fir/resolve/testData/resolve/ft.txt | 2 +- .../testData/resolve/functionTypes.txt | 8 ++-- .../testData/resolve/genericFunctions.txt | 2 +- .../resolve/multifile/sealedStarImport.txt | 2 +- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 2 +- .../kotlin/fir/types/FirFunctionTypeRef.kt | 9 ++++- .../types/impl/FirImplicitBuiltinTypeRef.kt | 5 ++- 50 files changed, 144 insertions(+), 126 deletions(-) diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt index bc86a72f400..c058dfd2959 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/ConeTypes.kt @@ -92,7 +92,9 @@ abstract class ConeTypeParameterType : ConeSymbolBasedType() { } -abstract class ConeFunctionType : ConeKotlinType() { +abstract class ConeFunctionType : ConeClassLikeType() { + + abstract override val symbol: ConeClassLikeSymbol abstract val receiverType: ConeKotlinType? abstract val parameterTypes: List abstract val returnType: ConeKotlinType diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/impl/ConeFunctionTypeImpl.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/impl/ConeFunctionTypeImpl.kt index 50026291bb7..1a46c5d71a6 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/impl/ConeFunctionTypeImpl.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/types/impl/ConeFunctionTypeImpl.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.types.impl +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol import org.jetbrains.kotlin.fir.types.ConeFunctionType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection @@ -12,7 +13,8 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection class ConeFunctionTypeImpl( override val receiverType: ConeKotlinType?, override val parameterTypes: List, - override val returnType: ConeKotlinType + override val returnType: ConeKotlinType, + override val symbol: ConeClassLikeSymbol ) : ConeFunctionType() { override val typeArguments: Array get() = EMPTY_ARRAY diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/F.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/F.txt index e15742b8cdd..3cc1e5c5f2b 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/F.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/F.txt @@ -1,9 +1,9 @@ FILE: F.kt public? open class A { - public? constructor(): super() + public? constructor(): super() } public? final? class B : A { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt index 010271b41d5..b0d9c139022 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt @@ -1,9 +1,9 @@ FILE: NestedOfAliasedType.kt public? abstract class A { - public? constructor(): super() + public? constructor(): super() public? abstract class Nested { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt index 81ac2b8e8ad..0ca6a12b418 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt @@ -1,6 +1,6 @@ FILE: NestedSuperType.kt public? abstract class My { - public? constructor(): super() + public? constructor(): super() public? abstract class NestedOne : My { public? constructor(): super() diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt index 74acdbbb397..cd9c74a4eae 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt @@ -1,9 +1,9 @@ FILE: complexTypes.kt public? final? class C { - public? constructor(): super() + public? constructor(): super() public? final? inner class D { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt index 22d905e029d..1587403c5ab 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt @@ -1,6 +1,6 @@ FILE: derivedClass.kt public? open class Base { - public? constructor(x: T): super() + public? constructor(x: T): super() public? final? property x(val): T public? get(): T diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt index 83037f0d3ee..19126854cc6 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt @@ -1,25 +1,25 @@ FILE: enums.kt public? final? enum class Order { - public? constructor(): super() + public? constructor(): super() public? final enum entry FIRST { - public? constructor(): super() + public? constructor(): super() } public? final enum entry SECOND { - public? constructor(): super() + public? constructor(): super() } public? final enum entry THIRD { - public? constructor(): super() + public? constructor(): super() } } public? final? enum class Planet { - public? constructor(m: Double, r: Double): super() + public? constructor(m: Double, r: Double): super() public? final? property m(val): Double public? get(): Double @@ -30,7 +30,7 @@ FILE: enums.kt public? final enum entry MERCURY : Planet { public? constructor(): super(Double(1.0), Double(2.0)) - public? open? override function sayHello(): kotlin.Unit { + public? open? override function sayHello(): kotlin/Unit { println#(String(Hello!!!)) } @@ -39,7 +39,7 @@ FILE: enums.kt public? final enum entry VENERA : Planet { public? constructor(): super(Double(3.0), Double(4.0)) - public? open? override function sayHello(): kotlin.Unit { + public? open? override function sayHello(): kotlin/Unit { println#(String(Ola!!!)) } @@ -48,7 +48,7 @@ FILE: enums.kt public? final enum entry EARTH : Planet { public? constructor(): super(Double(5.0), Double(6.0)) - public? open? override function sayHello(): kotlin.Unit { + public? open? override function sayHello(): kotlin/Unit { println#(String(Privet!!!)) } @@ -57,10 +57,10 @@ FILE: enums.kt public? final? property g(val): Double = div#(times#(G#, m#), times#(r#, r#)) public? get(): Double - public? abstract function sayHello(): kotlin.Unit + public? abstract function sayHello(): kotlin/Unit public? final? companion object Companion { - public? constructor(): super() + public? constructor(): super() public? final? const property G(val): = Double(6.67E-11) public? get(): diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt index 536314b905a..c29953c8a4a 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt @@ -2,15 +2,15 @@ FILE: enums2.kt public? final? interface Some { } public? final? object O1 : Some { - public? constructor(): super() + public? constructor(): super() } public? final? object O2 : Some { - public? constructor(): super() + public? constructor(): super() } public? final? enum class SomeEnum { - public? constructor(x: Some): super() + public? constructor(x: Some): super() public? final? property x(val): Some public? get(): Some diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt index c7204becf41..b8fca3f411a 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt @@ -1,13 +1,13 @@ FILE: expectActual.kt public? final? expect class MyClass { - public? constructor(): super() + public? constructor(): super() } public? final? expect function foo(): String public? final? expect property x(val): Int public? get(): Int public? final? actual class MyClass { - public? constructor(): super() + public? constructor(): super() } public? final? actual function foo(): { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt index 69430fc9c32..4c82fd5ff45 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt @@ -5,7 +5,7 @@ FILE: genericFunctions.kt return@@@safeAs as?/T(this#) } public? abstract class Summator { - public? constructor(): super() + public? constructor(): super() public? abstract function plus(first: T, second: T): T diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt index c11bae7af87..e303bed36bf 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt @@ -1,13 +1,13 @@ FILE: nestedClass.kt public? abstract class Base { - public? constructor(s: String): super() + public? constructor(s: String): super() public? final? property s(val): String public? get(): String } public? final? class Outer { - public? constructor(): super() + public? constructor(): super() public? final? class Derived : Base { public? constructor(s: String): super(s#) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt index 1d5a93fcc82..87326547019 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt @@ -3,7 +3,7 @@ FILE: noPrimaryConstructor.kt public? final? property x(val): String public? get(): String - public? constructor(x: String): super() { + public? constructor(x: String): super() { this#.x# = x# } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt index 4f5c848d801..4f8d02c4d39 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt @@ -7,7 +7,7 @@ FILE: simpleClass.kt } public? final? class SomeClass : SomeInterface { - public? constructor(): super() + public? constructor(): super() private final? property baz(val): = Int(42) private get(): @@ -20,15 +20,15 @@ FILE: simpleClass.kt public? get(): Boolean { return Boolean(true) } - public? set(value: Boolean): kotlin.Unit { + public? set(value: Boolean): kotlin/Unit { } public? final? lateinit property fau(var): Double public? get(): Double - public? set(value: Double): kotlin.Unit + public? set(value: Double): kotlin/Unit } public? final? inline class InlineClass { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleFun.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleFun.txt index a66ed2df21d..fec5b546c5f 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleFun.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleFun.txt @@ -1,5 +1,5 @@ FILE: simpleFun.kt - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { } - public? final? suspend function bar(): kotlin.Unit { + public? final? suspend function bar(): kotlin/Unit { } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt index 62f0092765d..5bf25fc85e7 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt @@ -3,6 +3,6 @@ FILE: simpleTypeAlias.kt } public? final typealias C = B public? final? class D : C { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt index 4f0b84cca60..2a1e291b010 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt @@ -1,12 +1,12 @@ FILE: typeAliasWithGeneric.kt public? open class A { - public? constructor(): super() + public? constructor(): super() } public? final? interface B { } public? final typealias C = B public? final? class D : C { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt index 510ae1cbdb1..30d252fb2c9 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt @@ -2,17 +2,17 @@ FILE: typeParameterVsNested.kt public? final? interface Some { } public? abstract class My { - public? constructor(): super() + public? constructor(): super() public? final? inner class T { - public? constructor(): super() + public? constructor(): super() } public? abstract property x(val): T public? get(): T - public? abstract function foo(arg: T): kotlin.Unit + public? abstract function foo(arg: T): kotlin/Unit public? abstract property y(val): My.T public? get(): My.T diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt index d02666f76ca..1e5839a93aa 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt @@ -8,7 +8,7 @@ FILE: typeParameters.kt public? final typealias StringList = List public? final typealias AnyList = List<*> public? abstract class AbstractList : List { - public? constructor(): super() + public? constructor(): super() } public? final? class SomeList : AbstractList { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/where.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/where.txt index 17c1c68008a..48ae8fc1266 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/where.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/where.txt @@ -4,6 +4,6 @@ FILE: where.kt public? final? interface B { } public? final? class C { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/annotated.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/annotated.txt index 408d9936ba4..5a788912f9b 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/annotated.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/annotated.txt @@ -1,6 +1,6 @@ FILE: annotated.kt @Target(AnnotationTarget#.EXPRESSION#) @Retention(AnnotationRetention#.SOURCE#) public? final? annotation class Ann { - public? constructor(): super() + public? constructor(): super() } public? final? function foo(arg: Int): Int { @@ -23,10 +23,10 @@ FILE: annotated.kt return@@@foo Int(42) } public? final? data class Two { - public? constructor(x: Int, y: Int): super() + public? constructor(x: Int, y: Int): super() } - public? final? function bar(two: Two): kotlin.Unit { + public? final? function bar(two: Two): kotlin/Unit { val : = two# @Ann() val x: = component1(#) @Ann() val y: = component2(#) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt index e2415508d1e..27c3214ea69 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt @@ -5,7 +5,7 @@ FILE: arrayAccess.kt return@@@foo Int(1) } public? final? class Wrapper { - public? constructor(v: IntArray): super() + public? constructor(v: IntArray): super() public? final? property v(val): IntArray public? get(): IntArray diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAssignment.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAssignment.txt index 8e4792d0263..55bdd7da62d 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAssignment.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/arrayAssignment.txt @@ -1,12 +1,12 @@ FILE: arrayAssignment.kt - public? final? function test(): kotlin.Unit { + public? final? function test(): kotlin/Unit { val x: = intArrayOf#(Int(1), Int(2), Int(3)) x#[Int(1)] = Int(0) } public? final? function foo(): { return@@@foo Int(1) } - public? final? function test2(): kotlin.Unit { + public? final? function test2(): kotlin/Unit { val : = intArrayOf#(Int(1), Int(2), Int(3)) #[foo#()] = Int(1) } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt index b1072db4e80..0b72112dcfa 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt @@ -1,17 +1,17 @@ FILE: callableReferences.kt public? final? class A { - public? constructor(): super() + public? constructor(): super() - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { } public? final? property bar(val): = Int(0) public? get(): } - public? final? function qux A.(): kotlin.Unit { + public? final? function qux A.(): kotlin/Unit { } - public? final? function baz(): kotlin.Unit { + public? final? function baz(): kotlin/Unit { } public? final? property test1(val): = A#()::foo# public? get(): diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/calls.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/calls.txt index 8a45e0c915c..93d1ab8172c 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/calls.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/calls.txt @@ -9,17 +9,17 @@ FILE: calls.kt return@@@testRegular distance#(Int(3), Int(4)) } public? final? class My { - public? constructor(x: Int): super() + public? constructor(x: Int): super() public? final? property x(var): Int public? get(): Int - public? set(value: Int): kotlin.Unit + public? set(value: Int): kotlin/Unit public? final? operator function invoke(): { return@@@invoke x# } - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { } public? final? function copy(): { @@ -30,7 +30,7 @@ FILE: calls.kt public? final? function testInvoke(): Int { return@@@testInvoke invoke#(My#(Int(13))) } - public? final? function testQualified(first: My, second: My?): kotlin.Unit { + public? final? function testQualified(first: My, second: My?): kotlin/Unit { println#(first#.x#) println#(second#?.x#) first#.foo#() diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/classReference.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/classReference.txt index cb61c193f85..03bb7974ed9 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/classReference.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/classReference.txt @@ -1,9 +1,9 @@ FILE: classReference.kt public? final? class A { - public? constructor(): super() + public? constructor(): super() } - public? final? function test(): kotlin.Unit { + public? final? function test(): kotlin/Unit { (A#) (test#.A#) (A#()) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt index 6b12991f8c9..1b7d17f8b79 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt @@ -1,38 +1,38 @@ FILE: collectionLiterals.kt public? final? annotation class Ann1 { - public? constructor(arr: IntArray): super() + public? constructor(arr: IntArray): super() public? final? property arr(val): IntArray public? get(): IntArray } public? final? annotation class Ann2 { - public? constructor(arr: DoubleArray): super() + public? constructor(arr: DoubleArray): super() public? final? property arr(val): DoubleArray public? get(): DoubleArray } public? final? annotation class Ann3 { - public? constructor(arr: Array): super() + public? constructor(arr: Array): super() public? final? property arr(val): Array public? get(): Array } @Ann1(()) @Ann2(()) @Ann3(()) public? final? class Zero { - public? constructor(): super() + public? constructor(): super() } @Ann1((Int(1), Int(2))) public? final? class First { - public? constructor(): super() + public? constructor(): super() } @Ann2((Double(3.14))) public? final? class Second { - public? constructor(): super() + public? constructor(): super() } @Ann3((String(Alpha), String(Omega))) public? final? class Third { - public? constructor(): super() + public? constructor(): super() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt index dc8cd885e60..033cb40fe39 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt @@ -1,6 +1,6 @@ FILE: destructuring.kt public? final? data class Some { - public? constructor(first: Int, second: Double, third: String): super() + public? constructor(first: Int, second: Double, third: String): super() public? final? property first(val): Int public? get(): Int @@ -12,7 +12,7 @@ FILE: destructuring.kt public? get(): String } - public? final? function foo(some: Some): kotlin.Unit { + public? final? function foo(some: Some): kotlin/Unit { val : = some# var x: = component1(#) var y: = component2(#) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/for.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/for.txt index 263d7bd71e7..d4ccc574088 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/for.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/for.txt @@ -1,5 +1,5 @@ FILE: for.kt - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { val : = rangeTo#(Int(1), Int(10)) val : = #.iterator#() while(#.hasNext#()) { @@ -8,7 +8,7 @@ FILE: for.kt } } - public? final? function bar(list: List): kotlin.Unit { + public? final? function bar(list: List): kotlin/Unit { val : = list#.subList#(Int(0), Int(10)) val : = #.iterator#() while(#.hasNext#()) { @@ -25,7 +25,7 @@ FILE: for.kt } public? final? data class Some { - public? constructor(x: Int, y: Int): super() + public? constructor(x: Int, y: Int): super() public? final? property x(val): Int public? get(): Int @@ -34,7 +34,7 @@ FILE: for.kt public? get(): Int } - public? final? function baz(set: Set): kotlin.Unit { + public? final? function baz(set: Set): kotlin/Unit { val : = set# val : = #.iterator#() while(#.hasNext#()) { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/genericCalls.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/genericCalls.txt index 5559c44328f..6a9b9b37100 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/genericCalls.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/genericCalls.txt @@ -2,7 +2,7 @@ FILE: genericCalls.kt public? final? function nullableValue(): T? { return@@@nullableValue Null(null) } - public? final? function test(): kotlin.Unit { + public? final? function test(): kotlin/Unit { val n: = nullableValue#() val x: = nullableValue#() val s: = nullableValue#() diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/init.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/init.txt index 1b113463ffa..8ceecb98e17 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/init.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/init.txt @@ -1,6 +1,6 @@ FILE: init.kt public? final? class WithInit { - public? constructor(x: Int): super() + public? constructor(x: Int): super() public? final? property x(val): Int public? get(): Int diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/lambda.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/lambda.txt index 73d6540a193..9fe23e82a3c 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/lambda.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/lambda.txt @@ -1,6 +1,6 @@ FILE: lambda.kt public? final? data class Tuple { - public? constructor(x: Int, y: Int): super() + public? constructor(x: Int, y: Int): super() public? final? property x(val): Int public? get(): Int @@ -64,7 +64,7 @@ FILE: lambda.kt } ) } - public? final? function test(list: List): kotlin.Unit { + public? final? function test(list: List): kotlin/Unit { val map: = mutableMapOf#() list#.forEach#(forEach@function .(): { return { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/locals.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/locals.txt index 3d103de59e2..82fbfa164b0 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/locals.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/locals.txt @@ -1,7 +1,7 @@ FILE: locals.kt public? final? function withLocals(p: Int): Int { public? final? class Local { - public? constructor(pp: Int): super() + public? constructor(pp: Int): super() public? final? property pp(val): Int public? get(): Int diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/modifications.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/modifications.txt index 830538e87db..029c171e985 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/modifications.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/modifications.txt @@ -1,16 +1,16 @@ FILE: modifications.kt - public? final? function simple(): kotlin.Unit { + public? final? function simple(): kotlin/Unit { var x: = Int(10) x# += Int(20) x# -= Int(5) x# /= Int(5) x# *= Int(10) } - public? final? function modify List.(): kotlin.Unit { + public? final? function modify List.(): kotlin/Unit { this# += String(Alpha) this# += String(Omega) } - public? final? function modify Any.(): kotlin.Unit { + public? final? function modify Any.(): kotlin/Unit { val : = as/List(this#) # += Int(42) } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/simpleReturns.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/simpleReturns.txt index 9d3fc2c6208..ef8a6d604e6 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/simpleReturns.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/simpleReturns.txt @@ -1,5 +1,5 @@ FILE: simpleReturns.kt - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { return@@@foo Unit } public? final? function bar(): String { diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/super.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/super.txt index faa67014703..6ca97c23d8d 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/super.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/super.txt @@ -1,25 +1,25 @@ FILE: super.kt public? final? interface A { - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { } } public? final? interface B { - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { } - public? final? function bar(): kotlin.Unit { + public? final? function bar(): kotlin/Unit { } } public? final? class C : A, B { - public? constructor(): super() + public? constructor(): super() - public? open? override function bar(): kotlin.Unit { + public? open? override function bar(): kotlin/Unit { super<>.bar#() } - public? open? override function foo(): kotlin.Unit { + public? open? override function foo(): kotlin/Unit { super.foo#() super.foo#() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/these.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/these.txt index 92624008989..2767a4a9000 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/these.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/these.txt @@ -1,6 +1,6 @@ FILE: these.kt public? final? class Some { - public? constructor(): super() + public? constructor(): super() public? final? function foo(): Int { return@@@foo Int(1) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/try.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/try.txt index e43730908e4..243226feea8 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/try.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/try.txt @@ -1,5 +1,5 @@ FILE: try.kt - public? final? function some(): kotlin.Unit { + public? final? function some(): kotlin/Unit { try { throw KotlinNullPointerException#() } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/unary.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/unary.txt index 1dc8b1c91ac..ea052534122 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/unary.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/unary.txt @@ -1,5 +1,5 @@ FILE: unary.kt - public? final? function test(): kotlin.Unit { + public? final? function test(): kotlin/Unit { var x: = Int(0) val x1: = { val : = x# @@ -35,13 +35,13 @@ FILE: unary.kt } public? final? class X { - public? constructor(i: Int): super() + public? constructor(i: Int): super() public? final? property i(val): Int public? get(): Int } - public? final? function test2(x: X): kotlin.Unit { + public? final? function test2(x: X): kotlin/Unit { val x1: = { val : = x#.i# x#.i# = inc#(#) @@ -56,7 +56,7 @@ FILE: unary.kt } } - public? final? function test3(arr: Array): kotlin.Unit { + public? final? function test3(arr: Array): kotlin/Unit { val x1: = { val : = arr#[Int(0)] arr#[Int(0)] = inc#(#) @@ -72,13 +72,13 @@ FILE: unary.kt } public? final? class Y { - public? constructor(arr: Array): super() + public? constructor(arr: Array): super() public? final? property arr(val): Array public? get(): Array } - public? final? function test4(y: Y): kotlin.Unit { + public? final? function test4(y: Y): kotlin/Unit { val x1: = { val : = y#.arr#[Int(0)] val : = y#.arr# diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/variables.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/variables.txt index 3d1e1273e35..91e3872488d 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/variables.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/variables.txt @@ -1,5 +1,5 @@ FILE: variables.kt - public? final? function foo(): kotlin.Unit { + public? final? function foo(): kotlin/Unit { val x: = Int(1) var y: = plus#(x#, Int(1)) val z: = times#(y#, Int(2)) diff --git a/compiler/fir/psi2fir/testData/rawBuilder/expressions/while.txt b/compiler/fir/psi2fir/testData/rawBuilder/expressions/while.txt index 2cb0ebc72fd..f7d0355b198 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/expressions/while.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/expressions/while.txt @@ -1,5 +1,5 @@ FILE: while.kt - public? final? function foo(limit: Int): kotlin.Unit { + public? final? function foo(limit: Int): kotlin/Unit { var k: = Int(0) some@while(<(k#, limit#)) { val : = k# @@ -31,7 +31,7 @@ FILE: while.kt } } - public? final? function bar(limit: Int): kotlin.Unit { + public? final? function bar(limit: Int): kotlin/Unit { var k: = limit# do { val : = k# diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt index 1af994276bd..df94d2584a2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirTypeResolverImpl.kt @@ -5,17 +5,21 @@ package org.jetbrains.kotlin.fir.resolve.impl +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.expandedConeType +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver +import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.FirTypeResolver import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.FirScope +import org.jetbrains.kotlin.fir.service import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.* -import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.types.Variance class FirTypeResolverImpl : FirTypeResolver { @@ -58,9 +62,17 @@ class FirTypeResolverImpl : FirTypeResolver { } } - private data class NameInSession(val session: FirSession, val name: Name) + private data class ClassIdInSession(val session: FirSession, val id: ClassId) - private val implicitBuiltinTypeSymbols = mutableMapOf() + private val implicitBuiltinTypeSymbols = mutableMapOf() + + + private fun resolveBuiltInQualified(id: ClassId, session: FirSession): ConeClassLikeSymbol { + val nameInSession = ClassIdInSession(session, id) + return implicitBuiltinTypeSymbols.getOrPut(nameInSession) { + session.service().getClassLikeSymbolByFqName(id)!! + } + } override fun resolveToSymbol( typeRef: FirTypeRef, @@ -96,23 +108,16 @@ class FirTypeResolverImpl : FirTypeResolver { resolvedSymbol ?: qualifierResolver.resolveSymbol(typeRef.qualifier) } is FirImplicitBuiltinTypeRef -> { - val nameInSession = NameInSession(typeRef.session, typeRef.name) - implicitBuiltinTypeSymbols[nameInSession] ?: run { - var resolvedSymbol: ConeSymbol? = null - scope.processClassifiersByName(typeRef.name, position) { - resolvedSymbol = (it as ConeClassLikeSymbol) - resolvedSymbol == null - } - implicitBuiltinTypeSymbols[nameInSession] = resolvedSymbol!! - resolvedSymbol - } + resolveBuiltInQualified(typeRef.id, typeRef.session) } else -> null } + + } override fun resolveUserType(typeRef: FirUserTypeRef, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType { - symbol ?: return ConeKotlinErrorType("Symbol not found") + symbol ?: return ConeKotlinErrorType("Symbol not found, for `${typeRef.render()}`") return symbol.toConeKotlinType(typeRef.qualifier) ?: ConeKotlinErrorType("Failed to resolve qualified type") } @@ -132,8 +137,9 @@ class FirTypeResolverImpl : FirTypeResolver { is FirFunctionTypeRef -> { ConeFunctionTypeImpl( (typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type, - typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() }, - typeRef.returnTypeRef.coneTypeUnsafe() + typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() }, + typeRef.returnTypeRef.coneTypeUnsafe(), + resolveBuiltInQualified(KotlinBuiltIns.getFunctionClassId(typeRef.parametersCount), typeRef.session) ) } is FirImplicitBuiltinTypeRef -> { diff --git a/compiler/fir/resolve/testData/resolve/fakeRecursiveTypealias.txt b/compiler/fir/resolve/testData/resolve/fakeRecursiveTypealias.txt index 65e1055ee62..020bb475403 100644 --- a/compiler/fir/resolve/testData/resolve/fakeRecursiveTypealias.txt +++ b/compiler/fir/resolve/testData/resolve/fakeRecursiveTypealias.txt @@ -1,3 +1,3 @@ FILE: fakeRecursiveTypealias.kt - public final typealias My = R|error: Symbol not found| + public final typealias My = R|error: Symbol not found, for `incorrect.directory.My`| public final typealias Your = R|error: Recursion detected: Your| diff --git a/compiler/fir/resolve/testData/resolve/ft.txt b/compiler/fir/resolve/testData/resolve/ft.txt index 03379ca48ab..7aa21cf3583 100644 --- a/compiler/fir/resolve/testData/resolve/ft.txt +++ b/compiler/fir/resolve/testData/resolve/ft.txt @@ -1,5 +1,5 @@ FILE: ft.kt public abstract interface KMutableProperty1 : R|KProperty1| { } - public abstract interface KProperty1 : R|(T) -> kotlin/Int| { + public abstract interface KProperty1 : R|kotlin/Function1| { } diff --git a/compiler/fir/resolve/testData/resolve/functionTypes.txt b/compiler/fir/resolve/testData/resolve/functionTypes.txt index c8c343f5f68..f031161bf28 100644 --- a/compiler/fir/resolve/testData/resolve/functionTypes.txt +++ b/compiler/fir/resolve/testData/resolve/functionTypes.txt @@ -1,15 +1,15 @@ FILE: functionTypes.kt - public final function simpleRun(f: R|(T) -> kotlin/Unit|): R|kotlin/Unit| { + public final function simpleRun(f: R|kotlin/Function1|): R|kotlin/Unit| { return@@@simpleRun #() } - public final function simpleMap R|kotlin/collections/List|.(f: R|(T) -> R|): R|R| { + public final function simpleMap R|kotlin/collections/List|.(f: R|kotlin/Function1|): R|R| { } - public final function simpleWith(t: R|T|, f: R|T.() -> kotlin/Unit|): R|kotlin/Unit| { + public final function simpleWith(t: R|T|, f: R|kotlin/Function1|): R|kotlin/Unit| { return@@@simpleWith #.#() } public abstract interface KMutableProperty1 : R|KProperty1|, R|KMutableProperty| { } - public abstract interface KProperty1 : R|KProperty|, R|(T) -> R| { + public abstract interface KProperty1 : R|KProperty|, R|kotlin/Function1| { } public abstract interface KProperty { } diff --git a/compiler/fir/resolve/testData/resolve/genericFunctions.txt b/compiler/fir/resolve/testData/resolve/genericFunctions.txt index c368ac9197a..40549cc2644 100644 --- a/compiler/fir/resolve/testData/resolve/genericFunctions.txt +++ b/compiler/fir/resolve/testData/resolve/genericFunctions.txt @@ -5,7 +5,7 @@ FILE: genericFunctions.kt return@@@safeAs as?/R|T|(this#) } public abstract class Summator { - public constructor(): super() + public constructor(): super() public abstract function plus(first: R|T|, second: R|T|): R|T| diff --git a/compiler/fir/resolve/testData/resolve/multifile/sealedStarImport.txt b/compiler/fir/resolve/testData/resolve/multifile/sealedStarImport.txt index 5772e0bc725..13dcbd6ca26 100644 --- a/compiler/fir/resolve/testData/resolve/multifile/sealedStarImport.txt +++ b/compiler/fir/resolve/testData/resolve/multifile/sealedStarImport.txt @@ -2,7 +2,7 @@ FILE: sealedStarImport.kt public abstract class Factory { public constructor(): super() - public abstract function createTest(): R|error: Symbol not found| + public abstract function createTest(): R|error: Symbol not found, for `Test`| public abstract function createObj(): R|test/Test.O| diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 8173afd205f..bc25c88c877 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -579,7 +579,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { } override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) { - print(if (implicitTypeRef is FirImplicitBuiltinTypeRef) "kotlin.${implicitTypeRef.name}" else "") + print(if (implicitTypeRef is FirImplicitBuiltinTypeRef) "${implicitTypeRef.id}" else "") } override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt index 8eeffd84a10..bbee11a4aaf 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt @@ -27,4 +27,11 @@ interface FirFunctionTypeRef : FirTypeRefWithNullability { parameter.accept(visitor, data) } } -} \ No newline at end of file +} + + +val FirFunctionTypeRef.parametersCount: Int + get() = if (receiverTypeRef != null) + valueParameters.size + 1 + else + valueParameters.size \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt index 7e304345801..6473e4eacc3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt @@ -10,18 +10,19 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name sealed class FirImplicitBuiltinTypeRef( override val session: FirSession, override val psi: PsiElement?, - val name: Name + val id: ClassId ) : FirImplicitTypeRef { override val annotations: List get() = emptyList() - constructor(session: FirSession, psi: PsiElement?, name: FqNameUnsafe) : this(session, psi, name.shortName()) + constructor(session: FirSession, psi: PsiElement?, name: FqNameUnsafe) : this(session, psi, ClassId.topLevel(name.toSafe())) } class FirImplicitUnitTypeRef(