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.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.LibraryClassSymbol
|
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.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
||||||
@@ -105,9 +106,8 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
|
|||||||
val prefix = kind.classNamePrefix
|
val prefix = kind.classNamePrefix
|
||||||
val arity = className.substring(prefix.length).toIntOrNull() ?: return null
|
val arity = className.substring(prefix.length).toIntOrNull() ?: return null
|
||||||
fictitiousFunctionSymbols.getOrPut(arity) {
|
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 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? get(): R|kotlin/jvm/functions/Function0<kotlin/Int>|
|
||||||
public? final? property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = STUB
|
public? final? property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = STUB
|
||||||
public? get(): R|kotlin/Function1<kotlin/String, kotlin/String>|
|
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