FIR: introduce FictitiousFunctionSymbol making it not FIR-based

This commit is contained in:
Mikhail Glukhikh
2018-04-10 17:03:29 +03:00
parent 5cdf938902
commit 65f1a6c041
4 changed files with 44 additions and 3 deletions
@@ -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)
}
}
}
}
@@ -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<ConeTypeParameterSymbol> = (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<ConeClassLikeType>
get() = emptyList() // TODO: kotlin.Function ???
}
+5 -1
View File
@@ -2,4 +2,8 @@ import kotlin.jvm.functions.Function0
val x: Function0<Int> = { 42 }
val y: Function1<String, String> = { it }
val y: Function1<String, String> = { it }
class MyFunction : Function2<Int, String, Unit> {
override fun invoke(p1: Int, p2: String) {}
}
+5
View File
@@ -3,3 +3,8 @@ FILE: functionX.kt
public? get(): R|kotlin/jvm/functions/Function0<kotlin/Int>|
public? final? property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = STUB
public? get(): R|kotlin/Function1<kotlin/String, kotlin/String>|
public? final class MyFunction : R|kotlin/Function2<kotlin/Int, kotlin/String, kotlin/Unit>| {
public? open? override function invoke(p1: R|kotlin/Int|, p2: R|kotlin/String|): R|error: Not supported: FirImplicitTypeImpl| {
}
}