From f23256bf49fa7c253ad828a2ab5cc4819b1ed1a0 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Mon, 18 Oct 2021 14:52:49 -0700 Subject: [PATCH] FIR: filter out builtin symbols in JvmClassFileBasedSymbolProvider These symbols are already provided by FirBuiltinSymbolProvider. --- .../deserialization/JvmClassFileBasedSymbolProvider.kt | 7 +++++++ .../src/org/jetbrains/kotlin/builtins/StandardNames.kt | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt index 3e68b660a6a..e73a3767201 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt @@ -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 { 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) = diff --git a/core/compiler.common/src/org/jetbrains/kotlin/builtins/StandardNames.kt b/core/compiler.common/src/org/jetbrains/kotlin/builtins/StandardNames.kt index 3b1d217840a..8a10af0b9cc 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/builtins/StandardNames.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/builtins/StandardNames.kt @@ -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 )