FIR: introduce FictitiousFunctionSymbol making it not FIR-based
This commit is contained in:
+2
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -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
@@ -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) {}
|
||||
}
|
||||
@@ -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| {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user