From 65f1a6c04116732af91400a1240ae03352069e60 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 10 Apr 2018 17:03:29 +0300 Subject: [PATCH] FIR: introduce FictitiousFunctionSymbol making it not FIR-based --- .../impl/FirLibrarySymbolProviderImpl.kt | 4 +-- .../symbols/impl/FictitiousFunctionSymbol.kt | 32 +++++++++++++++++++ .../testData/fir/resolve/stdlib/functionX.kt | 6 +++- .../testData/fir/resolve/stdlib/functionX.txt | 5 +++ 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FictitiousFunctionSymbol.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index 23cf8e1f6b2..a0114b39b1b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.deserialization.FirTypeDeserializer import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.symbols.ConeSymbol import org.jetbrains.kotlin.fir.symbols.LibraryClassSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FictitiousFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion @@ -105,9 +106,8 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider val prefix = kind.classNamePrefix val arity = className.substring(prefix.length).toIntOrNull() ?: return null fictitiousFunctionSymbols.getOrPut(arity) { - FirClassSymbol(classId) + FictitiousFunctionSymbol(relativeClassName.shortName(), arity) } } } - } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FictitiousFunctionSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FictitiousFunctionSymbol.kt new file mode 100644 index 00000000000..1b1cb930b79 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FictitiousFunctionSymbol.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.symbols.impl + +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol +import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.Name + +class FictitiousFunctionSymbol(className: Name, arity: Int) : ConeClassSymbol { + override val classId = ClassId(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, className) + + override val typeParameters: List = (0..arity).map { + TypeParameterSymbol(it) + } + + class TypeParameterSymbol(index: Int) : ConeTypeParameterSymbol { + override val name: Name = Name.identifier("T$index") + } + + override val kind: ClassKind + get() = ClassKind.INTERFACE + + override val superTypes: List + get() = emptyList() // TODO: kotlin.Function ??? +} \ No newline at end of file diff --git a/compiler/testData/fir/resolve/stdlib/functionX.kt b/compiler/testData/fir/resolve/stdlib/functionX.kt index eebfa57a08b..5475c35c545 100644 --- a/compiler/testData/fir/resolve/stdlib/functionX.kt +++ b/compiler/testData/fir/resolve/stdlib/functionX.kt @@ -2,4 +2,8 @@ import kotlin.jvm.functions.Function0 val x: Function0 = { 42 } -val y: Function1 = { it } \ No newline at end of file +val y: Function1 = { it } + +class MyFunction : Function2 { + override fun invoke(p1: Int, p2: String) {} +} \ No newline at end of file diff --git a/compiler/testData/fir/resolve/stdlib/functionX.txt b/compiler/testData/fir/resolve/stdlib/functionX.txt index e6f33c79823..f9dbfd91597 100644 --- a/compiler/testData/fir/resolve/stdlib/functionX.txt +++ b/compiler/testData/fir/resolve/stdlib/functionX.txt @@ -3,3 +3,8 @@ FILE: functionX.kt public? get(): R|kotlin/jvm/functions/Function0| public? final? property y(val): R|kotlin/Function1| = STUB public? get(): R|kotlin/Function1| + public? final class MyFunction : R|kotlin/Function2| { + public? open? override function invoke(p1: R|kotlin/Int|, p2: R|kotlin/String|): R|error: Not supported: FirImplicitTypeImpl| { + } + + }