diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt index f675a2b851d..d2394a10703 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.jvm.platform -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -25,25 +24,28 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager import java.util.* object JvmPlatform : TargetPlatform("JVM") { - private val builtIns by lazy(LazyThreadSafetyMode.PUBLICATION) { JvmBuiltIns(LockBasedStorageManager()) } + private val defaultImports = LockBasedStorageManager().createMemoizedFunction> { includeKotlinComparisons -> + ArrayList().apply { + addAll(Default.getDefaultImports(includeKotlinComparisons)) - override fun getDefaultImports(languageVersionSettings: LanguageVersionSettings): List = ArrayList().apply { - addAll(Default.getDefaultImports(languageVersionSettings)) + add(ImportPath.fromString("java.lang.*")) + add(ImportPath.fromString("kotlin.jvm.*")) - add(ImportPath.fromString("java.lang.*")) - add(ImportPath.fromString("kotlin.jvm.*")) + fun addAllClassifiersFromScope(scope: MemberScope) { + for (descriptor in scope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, MemberScope.ALL_NAME_FILTER)) { + add(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false)) + } + } - fun addAllClassifiersFromScope(scope: MemberScope) { - for (descriptor in scope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, MemberScope.ALL_NAME_FILTER)) { - add(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false)) + for (builtinPackageFragment in JvmBuiltIns(LockBasedStorageManager.NO_LOCKS).builtInsPackageFragmentsImportedByDefault) { + addAllClassifiersFromScope(builtinPackageFragment.getMemberScope()) } } - for (builtinPackageFragment in builtIns.builtInsPackageFragmentsImportedByDefault) { - addAllClassifiersFromScope(builtinPackageFragment.getMemberScope()) - } } + override fun getDefaultImports(includeKotlinComparisons: Boolean): List = defaultImports(includeKotlinComparisons) + override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator override val multiTargetPlatform = MultiTargetPlatform.Specific(platformName) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 6e91a8d7a61..6a9c377a752 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -16,8 +16,6 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.composeContainer import org.jetbrains.kotlin.container.useInstance @@ -29,6 +27,7 @@ import org.jetbrains.kotlin.resolve.checkers.* import org.jetbrains.kotlin.resolve.lazy.DelegationFilter import org.jetbrains.kotlin.resolve.scopes.SyntheticConstructorsProvider import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes +import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.DynamicTypesSettings import java.util.* @@ -36,28 +35,33 @@ abstract class TargetPlatform(val platformName: String) { override fun toString() = platformName abstract val platformConfigurator: PlatformConfigurator - abstract fun getDefaultImports(languageVersionSettings: LanguageVersionSettings): List + abstract fun getDefaultImports(includeKotlinComparisons: Boolean): List open val excludedImports: List get() = emptyList() abstract val multiTargetPlatform: MultiTargetPlatform object Default : TargetPlatform("Default") { - override fun getDefaultImports(languageVersionSettings: LanguageVersionSettings): List = ArrayList().apply { - listOf( - "kotlin.*", - "kotlin.annotation.*", - "kotlin.collections.*", - "kotlin.ranges.*", - "kotlin.sequences.*", - "kotlin.text.*", - "kotlin.io.*" - ).forEach { add(ImportPath.fromString(it)) } + private val defaultImports = LockBasedStorageManager().createMemoizedFunction> { + includeKotlinComparisons -> + ArrayList().apply { + listOf( + "kotlin.*", + "kotlin.annotation.*", + "kotlin.collections.*", + "kotlin.ranges.*", + "kotlin.sequences.*", + "kotlin.text.*", + "kotlin.io.*" + ).forEach { add(ImportPath.fromString(it)) } - if (languageVersionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons)) { - add(ImportPath.fromString("kotlin.comparisons.*")) + if (includeKotlinComparisons) { + add(ImportPath.fromString("kotlin.comparisons.*")) + } } } + override fun getDefaultImports(includeKotlinComparisons: Boolean): List = defaultImports(includeKotlinComparisons) + override val platformConfigurator = object : PlatformConfigurator( DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt index 92c2c760bd7..da32d870059 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.lazy import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageFeature.DefaultImportOfPackageKotlinComparisons import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor @@ -37,8 +38,9 @@ class DefaultImportProvider( private val targetPlatform: TargetPlatform, private val languageVersionSettings: LanguageVersionSettings ) { - val defaultImports: List - by storageManager.createLazyValue { targetPlatform.getDefaultImports(languageVersionSettings) } + val defaultImports: List by storageManager.createLazyValue { + targetPlatform.getDefaultImports(languageVersionSettings.supportsFeature(DefaultImportOfPackageKotlinComparisons)) + } val excludedImports: List by storageManager.createLazyValue { val packagesWithAliases = listOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.TEXT_PACKAGE_FQ_NAME) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt index af611a27b2f..3b677cca621 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/importConversion.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.j2k.ast.Import @@ -160,10 +161,9 @@ private fun convertNonStaticImport(fqName: FqName, isOnDemand: Boolean, target: private fun renderImportName(fqName: FqName, isOnDemand: Boolean) = if (isOnDemand) fqName.render() + ".*" else fqName.render() -// TODO: use the correct LanguageVersionSettings instance here -private val DEFAULT_IMPORTS_SET: Set = JvmPlatform.getDefaultImports(LanguageVersionSettingsImpl.DEFAULT) - .filter { it.isAllUnder } - .map { it.fqName } - .toSet() +private val DEFAULT_IMPORTS_SET: Set = JvmPlatform.getDefaultImports( + // TODO: use the correct LanguageVersionSettings instance here + LanguageVersionSettingsImpl.DEFAULT.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) +).filter { it.isAllUnder }.map { it.fqName }.toSet() private fun isImportedByDefault(c: KtLightClass) = c.qualifiedName?.let { FqName(it).parent() } in DEFAULT_IMPORTS_SET diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt index 2e5b38423bf..7a13985b8dc 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt @@ -18,16 +18,19 @@ package org.jetbrains.kotlin.js.resolve import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.PlatformConfigurator import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.storage.LockBasedStorageManager object JsPlatform : TargetPlatform("JS") { - override fun getDefaultImports(languageVersionSettings: LanguageVersionSettings): List = - Default.getDefaultImports(languageVersionSettings) + ImportPath.fromString("kotlin.js.*") + private val defaultImports = LockBasedStorageManager().createMemoizedFunction> { includeKotlinComparisons -> + Default.getDefaultImports(includeKotlinComparisons) + ImportPath.fromString("kotlin.js.*") + } + + override fun getDefaultImports(includeKotlinComparisons: Boolean): List = defaultImports(includeKotlinComparisons) override val platformConfigurator: PlatformConfigurator = JsPlatformConfigurator