diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformConfigurator.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformConfigurator.kt new file mode 100644 index 00000000000..a7342ed3ac7 --- /dev/null +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformConfigurator.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.container.StorageComponentContainer + +interface PlatformConfigurator { + val platformSpecificContainer: StorageComponentContainer + fun configureModuleComponents(container: StorageComponentContainer) + fun configureModuleDependentCheckers(container: StorageComponentContainer) +} \ No newline at end of file diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformDependentCompilerServices.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformDependentCompilerServices.kt new file mode 100644 index 00000000000..58e46567c37 --- /dev/null +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/PlatformDependentCompilerServices.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.storage.StorageManager +import java.util.ArrayList + +abstract class PlatformDependentCompilerServices { + private data class DefaultImportsKey(val includeKotlinComparisons: Boolean, val includeLowPriorityImports: Boolean) + + private val defaultImports = LockBasedStorageManager("TargetPlatform").let { storageManager -> + storageManager.createMemoizedFunction> { (includeKotlinComparisons, includeLowPriorityImports) -> + ArrayList().apply { + listOf( + "kotlin.*", + "kotlin.annotation.*", + "kotlin.collections.*", + "kotlin.ranges.*", + "kotlin.sequences.*", + "kotlin.text.*", + "kotlin.io.*" + ).forEach { add(ImportPath.fromString(it)) } + + if (includeKotlinComparisons) { + add(ImportPath.fromString("kotlin.comparisons.*")) + } + + computePlatformSpecificDefaultImports(storageManager, this) + + if (includeLowPriorityImports) { + addAll(defaultLowPriorityImports) + } + } + } + } + + abstract val platformConfigurator: PlatformConfigurator + + open val defaultLowPriorityImports: List get() = emptyList() + + fun getDefaultImports(languageVersionSettings: LanguageVersionSettings, includeLowPriorityImports: Boolean): List = + defaultImports( + DefaultImportsKey( + languageVersionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons), + includeLowPriorityImports + ) + ) + + protected abstract fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) + + open val excludedImports: List get() = emptyList() + + open fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns = + ModuleInfo.DependencyOnBuiltIns.LAST +} \ No newline at end of file diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 224f4a47fe3..995ed9d4b62 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -5,69 +5,7 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.config.* -import org.jetbrains.kotlin.container.StorageComponentContainer -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.storage.LockBasedStorageManager -import org.jetbrains.kotlin.storage.StorageManager -import java.util.* - abstract class TargetPlatform(val platformName: String) { override fun toString() = platformName abstract val platform: MultiTargetPlatform } - -abstract class PlatformDependentCompilerServices { - private data class DefaultImportsKey(val includeKotlinComparisons: Boolean, val includeLowPriorityImports: Boolean) - - private val defaultImports = LockBasedStorageManager("TargetPlatform").let { storageManager -> - storageManager.createMemoizedFunction> { (includeKotlinComparisons, includeLowPriorityImports) -> - ArrayList().apply { - listOf( - "kotlin.*", - "kotlin.annotation.*", - "kotlin.collections.*", - "kotlin.ranges.*", - "kotlin.sequences.*", - "kotlin.text.*", - "kotlin.io.*" - ).forEach { add(ImportPath.fromString(it)) } - - if (includeKotlinComparisons) { - add(ImportPath.fromString("kotlin.comparisons.*")) - } - - computePlatformSpecificDefaultImports(storageManager, this) - - if (includeLowPriorityImports) { - addAll(defaultLowPriorityImports) - } - } - } - } - - abstract val platformConfigurator: PlatformConfigurator - - open val defaultLowPriorityImports: List get() = emptyList() - - fun getDefaultImports(languageVersionSettings: LanguageVersionSettings, includeLowPriorityImports: Boolean): List = - defaultImports( - DefaultImportsKey( - languageVersionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons), - includeLowPriorityImports - ) - ) - - protected abstract fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) - - open val excludedImports: List get() = emptyList() - - open fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns = ModuleInfo.DependencyOnBuiltIns.LAST -} - -interface PlatformConfigurator { - val platformSpecificContainer: StorageComponentContainer - fun configureModuleComponents(container: StorageComponentContainer) - fun configureModuleDependentCheckers(container: StorageComponentContainer) -} 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 d348884a680..5d958e85c96 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,32 +16,8 @@ package org.jetbrains.kotlin.resolve.jvm.platform -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter -import org.jetbrains.kotlin.resolve.scopes.MemberScope -import org.jetbrains.kotlin.storage.StorageManager object JvmPlatform : TargetPlatform("JVM") { override val platform = MultiTargetPlatform.Specific(platformName) } - -object JvmPlatformCompilerServices : PlatformDependentCompilerServices() { - override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { - result.add(ImportPath.fromString("kotlin.jvm.*")) - - fun addAllClassifiersFromScope(scope: MemberScope) { - for (descriptor in scope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, MemberScope.ALL_NAME_FILTER)) { - result.add(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false)) - } - } - - for (builtInPackage in JvmBuiltIns(storageManager, JvmBuiltIns.Kind.FROM_CLASS_LOADER).builtInPackagesImportedByDefault) { - addAllClassifiersFromScope(builtInPackage.memberScope) - } - } - - override val defaultLowPriorityImports: List = listOf(ImportPath.fromString("java.lang.*")) - - override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator -} diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformCompilerServices.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformCompilerServices.kt new file mode 100644 index 00000000000..b159c959541 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformCompilerServices.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.resolve.jvm.platform + +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns +import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.storage.StorageManager + +object JvmPlatformCompilerServices : PlatformDependentCompilerServices() { + override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { + result.add(ImportPath.fromString("kotlin.jvm.*")) + + fun addAllClassifiersFromScope(scope: MemberScope) { + for (descriptor in scope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS, MemberScope.ALL_NAME_FILTER)) { + result.add(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false)) + } + } + + for (builtInPackage in JvmBuiltIns(storageManager, JvmBuiltIns.Kind.FROM_CLASS_LOADER).builtInPackagesImportedByDefault) { + addAllClassifiersFromScope(builtInPackage.memberScope) + } + } + + override val defaultLowPriorityImports: List = listOf(ImportPath.fromString("java.lang.*")) + + override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator +} 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 e465d2d6eb3..8947e261a11 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 @@ -16,27 +16,9 @@ package org.jetbrains.kotlin.js.resolve -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.storage.StorageManager object JsPlatform : TargetPlatform("JS") { override val platform: MultiTargetPlatform get() = MultiTargetPlatform.Specific(platformName) } - -object JsPlatformCompilerServices : PlatformDependentCompilerServices() { - override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { - result.add(ImportPath.fromString("kotlin.js.*")) - } - - override val platformConfigurator: PlatformConfigurator = JsPlatformConfigurator - - val builtIns: KotlinBuiltIns - get() = DefaultBuiltIns.Instance - - override val excludedImports: List = - listOf("Promise", "Date", "Console", "Math", "RegExp", "RegExpMatch", "Json", "json").map { FqName("kotlin.js.$it") } -} diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformCompilerServices.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformCompilerServices.kt new file mode 100644 index 00000000000..956bc047455 --- /dev/null +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformCompilerServices.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.js.resolve + +import org.jetbrains.kotlin.builtins.DefaultBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.storage.StorageManager + +object JsPlatformCompilerServices : PlatformDependentCompilerServices() { + override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { + result.add(ImportPath.fromString("kotlin.js.*")) + } + + override val platformConfigurator: PlatformConfigurator = JsPlatformConfigurator + + val builtIns: KotlinBuiltIns + get() = DefaultBuiltIns.Instance + + override val excludedImports: List = + listOf("Promise", "Date", "Console", "Math", "RegExp", "RegExpMatch", "Json", "json").map { FqName("kotlin.js.$it") } +} diff --git a/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt b/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt index d6b495af167..8a72506fb74 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt @@ -6,16 +6,7 @@ package org.jetbrains.kotlin.resolve.konan.platform import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.storage.StorageManager object KonanPlatform : TargetPlatform("Native") { override val platform = MultiTargetPlatform.Specific(platformName) } - -object NativePlatformCompilerServices : PlatformDependentCompilerServices() { - override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { - result.add(ImportPath.fromString("kotlin.native.*")) - } - - override val platformConfigurator: PlatformConfigurator = KonanPlatformConfigurator -} diff --git a/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/NativePlatformCompilerServices.kt b/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/NativePlatformCompilerServices.kt new file mode 100644 index 00000000000..71e1a7beb89 --- /dev/null +++ b/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/NativePlatformCompilerServices.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.resolve.konan.platform + +import org.jetbrains.kotlin.resolve.* +import org.jetbrains.kotlin.storage.StorageManager + +object NativePlatformCompilerServices : PlatformDependentCompilerServices() { + override fun computePlatformSpecificDefaultImports(storageManager: StorageManager, result: MutableList) { + result.add(ImportPath.fromString("kotlin.native.*")) + } + + override val platformConfigurator: PlatformConfigurator = KonanPlatformConfigurator +}