FIR: temporary implementation of kotlin.FunctionX resolve

This commit is contained in:
Mikhail Glukhikh
2018-04-10 15:08:28 +03:00
parent 82ae3f8f10
commit 5cdf938902
5 changed files with 31 additions and 3 deletions
@@ -6,12 +6,14 @@
package org.jetbrains.kotlin.fir.resolve.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.fir.FirSession
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.FirClassSymbol
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
@@ -92,8 +94,20 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
private val allPackageFragments = loadBuiltIns().groupBy { it.fqName }
private val fictitiousFunctionSymbols = mutableMapOf<Int, ConeSymbol>()
override fun getSymbolByFqName(classId: ClassId): ConeSymbol? {
return allPackageFragments[classId.packageFqName]?.firstNotNullResult { it.getSymbolByFqName(classId, this) }
return allPackageFragments[classId.packageFqName]?.firstNotNullResult {
it.getSymbolByFqName(classId, this)
} ?: with(classId) {
val className = relativeClassName.asString()
val kind = FunctionClassDescriptor.Kind.byClassNamePrefix(packageFqName, className) ?: return@with null
val prefix = kind.classNamePrefix
val arity = className.substring(prefix.length).toIntOrNull() ?: return null
fictitiousFunctionSymbols.getOrPut(arity) {
FirClassSymbol(classId)
}
}
}
}
+5
View File
@@ -0,0 +1,5 @@
import kotlin.jvm.functions.Function0
val x: Function0<Int> = { 42 }
val y: Function1<String, String> = { it }
+5
View File
@@ -0,0 +1,5 @@
FILE: functionX.kt
public? final? property x(val): R|kotlin/jvm/functions/Function0<kotlin/Int>| = STUB
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>|
@@ -31,8 +31,7 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
@TestMetadata("companion.kt")
public void testCompanion() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/companion.kt");
doTest(fileName);
runTest("compiler/testData/fir/resolve/companion.kt");
}
@TestMetadata("derivedClass.kt")
@@ -34,6 +34,11 @@ public class FirResolveTestCaseWithStdlibGenerated extends AbstractFirResolveTes
runTest("compiler/testData/fir/resolve/stdlib/concurrent.kt");
}
@TestMetadata("functionX.kt")
public void testFunctionX() throws Exception {
runTest("compiler/testData/fir/resolve/stdlib/functionX.kt");
}
@TestMetadata("reflectionClass.kt")
public void testReflectionClass() throws Exception {
runTest("compiler/testData/fir/resolve/stdlib/reflectionClass.kt");