Filter out non-builtin package fragments from module when needed
In subsequent commits, a JVM module will be able to have up to two package fragments for a given package FQ name. For example, for package "kotlin" in kotlin-runtime.jar there will be a LazyJavaPackageFragment with binary (Kotlin+Java) dependencies, and a BuiltInsPackageFragment for built-ins metadata (which is loaded from kotlin/kotlin.kotlin_builtins)
This commit is contained in:
@@ -119,7 +119,7 @@ object BuiltinSpecialBridgesUtil {
|
|||||||
): Boolean {
|
): Boolean {
|
||||||
if (BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(this) == null) return false
|
if (BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(this) == null) return false
|
||||||
|
|
||||||
val builtin = getOverriddenBuiltinReflectingJvmDescriptor()!!
|
val builtin = getOverriddenBuiltinReflectingJvmDescriptor() ?: error("Overridden built-in member not found: $this")
|
||||||
return signatureByDescriptor(this) == signatureByDescriptor(builtin)
|
return signatureByDescriptor(this) == signatureByDescriptor(builtin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.serialization.builtins
|
package org.jetbrains.kotlin.serialization.builtins
|
||||||
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.*
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.*
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
@@ -68,7 +69,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
|
|||||||
val packageFragmentProvider = emptyModule.builtIns.builtInsModule.packageFragmentProvider
|
val packageFragmentProvider = emptyModule.builtIns.builtInsModule.packageFragmentProvider
|
||||||
|
|
||||||
for (packageFqName in listOf<FqName>(BUILT_INS_PACKAGE_FQ_NAME, COLLECTIONS_PACKAGE_FQ_NAME, RANGES_PACKAGE_FQ_NAME)) {
|
for (packageFqName in listOf<FqName>(BUILT_INS_PACKAGE_FQ_NAME, COLLECTIONS_PACKAGE_FQ_NAME, RANGES_PACKAGE_FQ_NAME)) {
|
||||||
val loaded = packageFragmentProvider.getPackageFragments(packageFqName).single()
|
val loaded = packageFragmentProvider.getPackageFragments(packageFqName).filterIsInstance<BuiltInsPackageFragment>().single()
|
||||||
RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile(
|
RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile(
|
||||||
loaded, configuration,
|
loaded, configuration,
|
||||||
File("compiler/testData/builtin-classes/$builtinVersionName/" + packageFqName.asString().replace('.', '-') + ".txt"))
|
File("compiler/testData/builtin-classes/$builtinVersionName/" + packageFqName.asString().replace('.', '-') + ".txt"))
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ class JvmBuiltInClassDescriptorFactory(
|
|||||||
) : ClassDescriptorFactory {
|
) : ClassDescriptorFactory {
|
||||||
private val cloneable by storageManager.createLazyValue {
|
private val cloneable by storageManager.createLazyValue {
|
||||||
ClassDescriptorImpl(
|
ClassDescriptorImpl(
|
||||||
moduleDescriptor.getPackage(KOTLIN_FQ_NAME).fragments.single(),
|
moduleDescriptor.getPackage(KOTLIN_FQ_NAME).fragments.filterIsInstance<BuiltInsPackageFragment>().single(),
|
||||||
CLONEABLE_NAME, Modality.ABSTRACT, ClassKind.INTERFACE, listOf(moduleDescriptor.builtIns.anyType),
|
CLONEABLE_NAME, Modality.ABSTRACT, ClassKind.INTERFACE, listOf(moduleDescriptor.builtIns.anyType),
|
||||||
SourceElement.NO_SOURCE
|
SourceElement.NO_SOURCE
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
+2
-1
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.builtins.functions
|
package org.jetbrains.kotlin.builtins.functions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor.Kind
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor.Kind
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
@@ -79,7 +80,7 @@ class BuiltInFictitiousFunctionClassFactory(
|
|||||||
val packageFqName = classId.packageFqName
|
val packageFqName = classId.packageFqName
|
||||||
val (kind, arity) = parseClassName(className, packageFqName) ?: return null
|
val (kind, arity) = parseClassName(className, packageFqName) ?: return null
|
||||||
|
|
||||||
val containingPackageFragment = module.getPackage(packageFqName).fragments.single()
|
val containingPackageFragment = module.getPackage(packageFqName).fragments.filterIsInstance<BuiltInsPackageFragment>().single()
|
||||||
|
|
||||||
return FunctionClassDescriptor(storageManager, containingPackageFragment, kind, arity)
|
return FunctionClassDescriptor(storageManager, containingPackageFragment, kind, arity)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.builtins.functions
|
package org.jetbrains.kotlin.builtins.functions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment
|
||||||
import org.jetbrains.kotlin.builtins.KOTLIN_REFLECT_FQ_NAME
|
import org.jetbrains.kotlin.builtins.KOTLIN_REFLECT_FQ_NAME
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
@@ -129,8 +130,8 @@ class FunctionClassDescriptor(
|
|||||||
|
|
||||||
// For KFunction{n}, add corresponding numbered Function{n} class, e.g. Function2 for KFunction2
|
// For KFunction{n}, add corresponding numbered Function{n} class, e.g. Function2 for KFunction2
|
||||||
if (functionKind == Kind.KFunction) {
|
if (functionKind == Kind.KFunction) {
|
||||||
val module = containingDeclaration.containingDeclaration
|
val packageView = containingDeclaration.containingDeclaration.getPackage(BUILT_INS_PACKAGE_FQ_NAME)
|
||||||
val kotlinPackageFragment = module.getPackage(BUILT_INS_PACKAGE_FQ_NAME).fragments.single()
|
val kotlinPackageFragment = packageView.fragments.filterIsInstance<BuiltInsPackageFragment>().single()
|
||||||
|
|
||||||
add(kotlinPackageFragment, Kind.Function.numberedClassName(arity))
|
add(kotlinPackageFragment, Kind.Function.numberedClassName(arity))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user