FIR: filter out builtin symbols in JvmClassFileBasedSymbolProvider

These symbols are already provided by FirBuiltinSymbolProvider.
This commit is contained in:
Tianyu Geng
2021-10-18 14:52:49 -07:00
committed by Ilya Kirillov
parent 5a1680ca3b
commit f23256bf49
2 changed files with 10 additions and 1 deletions
@@ -27,6 +27,12 @@ import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErr
import java.nio.file.Path
import java.nio.file.Paths
/**
* Any top level declarations in core/builtins/src are also available from FirBuiltinSymbolProvider (or FirIdeBuiltinSymbolProvider) for IDE
* so we filter them out to avoid providing the "same" symbols twice.
*/
private val kotlinBuiltins = setOf("kotlin/ArrayIntrinsicsKt", "kotlin/internal/ProgressionUtilKt")
// This symbol provider loads JVM classes, reading extra info from Kotlin `@Metadata` annotations
// if present. Use it for library and incremental compilation sessions. For source sessions use
// `JavaSymbolProvider`, as Kotlin classes should be parsed first.
@@ -43,6 +49,7 @@ class JvmClassFileBasedSymbolProvider(
override fun computePackagePartsInfos(packageFqName: FqName): List<PackagePartsCacheData> {
return packagePartProvider.findPackageParts(packageFqName.asString()).mapNotNull { partName ->
if (partName in kotlinBuiltins) return@mapNotNull null
val classId = ClassId.topLevel(JvmClassName.byInternalName(partName).fqNameForTopLevelClassMaybeWithDollars)
if (!javaFacade.hasTopLevelClassOf(classId)) return@mapNotNull null
val (kotlinJvmBinaryClass, byteContent) =
@@ -66,6 +66,8 @@ object StandardNames {
@JvmField
val TEXT_PACKAGE_FQ_NAME = BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("text"))
val KOTLIN_INTERNAL_FQ_NAME = BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("internal"))
@JvmField
val BUILT_INS_PACKAGE_FQ_NAMES = setOf(
BUILT_INS_PACKAGE_FQ_NAME,
@@ -73,7 +75,7 @@ object StandardNames {
RANGES_PACKAGE_FQ_NAME,
ANNOTATION_PACKAGE_FQ_NAME,
KOTLIN_REFLECT_FQ_NAME,
BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("internal")),
KOTLIN_INTERNAL_FQ_NAME,
COROUTINES_PACKAGE_FQ_NAME
)