diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt index 4184a5a2ce1..4dbaedca806 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.kt @@ -56,6 +56,7 @@ import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.TopDownAnalysisMode import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension @@ -150,7 +151,7 @@ object TopDownAnalyzerFacadeForJVM { val dependencyModule = if (separateModules) { val dependenciesContext = ContextForNewModule( moduleContext, Name.special(""), - module.builtIns + module.builtIns, null ) // Scope for the dependency module contains everything except files present in the scope for the source module @@ -261,7 +262,7 @@ object TopDownAnalyzerFacadeForJVM { val projectContext = ProjectContext(project) val builtIns = JvmBuiltIns(projectContext.storageManager, !createBuiltInsFromModule) return ContextForNewModule( - projectContext, Name.special("<${configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME)}>"), builtIns + projectContext, Name.special("<${configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME)}>"), builtIns, null ).apply { if (createBuiltInsFromModule) { builtIns.builtInsModule = module 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 76bfa42a2f7..bec71168e1d 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,12 +16,8 @@ package org.jetbrains.kotlin.resolve.jvm.platform -import org.jetbrains.kotlin.descriptors.PlatformKind import org.jetbrains.kotlin.platform.JvmBuiltIns -import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.ImportPath -import org.jetbrains.kotlin.resolve.PlatformConfigurator -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.storage.LockBasedStorageManager @@ -49,6 +45,5 @@ object JvmPlatform : TargetPlatform("JVM") { override val platformConfigurator: PlatformConfigurator = JvmPlatformConfigurator - override val kind: PlatformKind - get() = PlatformKind.JVM + override val multiTargetPlatform = MultiTargetPlatform.Specific(platformName) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 31435f7c933..c97d096d9bd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.CompilerEnvironment +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.utils.singletonOrEmptyList @@ -159,7 +160,7 @@ abstract class AnalyzerFacade { delegateResolver: ResolverForProject = EmptyResolverForProject(), packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { _, _ -> PackagePartProvider.Empty }, firstDependency: M? = null, - modulePlatforms: (M) -> PlatformKind = { PlatformKind.DEFAULT }, + modulePlatforms: (M) -> MultiTargetPlatform?, moduleSources: (M) -> SourceKind = { SourceKind.NONE } ): ResolverForProject { val storageManager = projectContext.storageManager diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt index 4abe7d376c8..ad5d959a91e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt @@ -78,7 +78,8 @@ object DefaultAnalyzerFacade : AnalyzerFacade() { ProjectContext(project), listOf(moduleInfo), { ModuleContent(files, GlobalSearchScope.allScope(project)) }, object : PlatformAnalysisParameters {}, - packagePartProviderFactory = packagePartProviderFactory + packagePartProviderFactory = packagePartProviderFactory, + modulePlatforms = { MultiTargetPlatform.Common } ) val moduleDescriptor = resolver.descriptorForModule(moduleInfo) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt index 1ee2d07f4ab..fa2e37d29a7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.storage.ExceptionTracker import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager @@ -94,8 +95,14 @@ fun ModuleContext(module: ModuleDescriptor, project: Project): ModuleContext = fun GlobalContext.withProject(project: Project): ProjectContext = ProjectContextImpl(project, this) fun ProjectContext.withModule(module: ModuleDescriptor): ModuleContext = ModuleContextImpl(module, this) -fun ContextForNewModule(projectContext: ProjectContext, moduleName: Name, builtIns: KotlinBuiltIns): MutableModuleContext { - val module = ModuleDescriptorImpl(moduleName, projectContext.storageManager, builtIns) +@JvmOverloads +fun ContextForNewModule( + projectContext: ProjectContext, + moduleName: Name, + builtIns: KotlinBuiltIns, + multiTargetPlatform: MultiTargetPlatform? +): MutableModuleContext { + val module = ModuleDescriptorImpl(moduleName, projectContext.storageManager, builtIns, multiTargetPlatform) return MutableModuleContextImpl(module, projectContext) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt index 45b7ec10e3a..3f93e236a0d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.MemberComparator +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.calls.inference.* import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.Bound import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.BoundKind.LOWER_BOUND @@ -42,6 +43,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.Constrain import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.* import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.getValidityConstraintForConstituentType import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall +import org.jetbrains.kotlin.resolve.getMultiTargetPlatform import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @@ -74,7 +76,12 @@ object Renderers { @JvmField val NAME = Renderer { it.name.asString() } @JvmField val PLATFORM = Renderer { - if (it.platformKind == PlatformKind.DEFAULT) "" else " for " + it.platformKind.name + val platform = it.getMultiTargetPlatform() + when (platform) { + MultiTargetPlatform.Common -> "" + is MultiTargetPlatform.Specific -> " for " + platform.platform + null -> "" + } } @JvmField val VISIBILITY = Renderer { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 5e38b56c04e..f37a4ca5391 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.composeContainer import org.jetbrains.kotlin.container.useInstance -import org.jetbrains.kotlin.descriptors.PlatformKind import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap import org.jetbrains.kotlin.resolve.calls.checkers.* import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator @@ -36,7 +35,7 @@ abstract class TargetPlatform(val platformName: String) { abstract val platformConfigurator: PlatformConfigurator abstract val defaultImports: List - abstract val kind: PlatformKind + abstract val multiTargetPlatform: MultiTargetPlatform object Default : TargetPlatform("Default") { override val defaultImports: List = ArrayList().apply { @@ -61,8 +60,8 @@ abstract class TargetPlatform(val platformName: String) { } } - override val kind: PlatformKind - get() = PlatformKind.DEFAULT + override val multiTargetPlatform: MultiTargetPlatform + get() = MultiTargetPlatform.Common } } diff --git a/compiler/tests-common/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt b/compiler/tests-common/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt index 800a187b215..328bc16bc7d 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt @@ -474,13 +474,9 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { val platform = if (nameSuffix.isEmpty()) null else if (nameSuffix == "common") MultiTargetPlatform.Common else MultiTargetPlatform.Specific(nameSuffix.toUpperCase()) - val capabilities: Map, Any?> = - if (platform == null) emptyMap() - else mapOf(MultiTargetPlatform.CAPABILITY to platform) return ModuleDescriptorImpl( Name.special("<$moduleName>"), storageManager, JvmBuiltIns(storageManager), - if (platform == MultiTargetPlatform.Common) PlatformKind.DEFAULT else PlatformKind.JVM, - SourceKind.TEST, capabilities + platform, SourceKind.TEST ) } diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt index c6d5c09e45e..09ea201e710 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters @@ -38,7 +39,8 @@ fun createResolveSessionForFiles( "test", projectContext, listOf(testModule), { ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) }, - JvmPlatformParameters { testModule } + JvmPlatformParameters { testModule }, + modulePlatforms = { MultiTargetPlatform.Specific("JVM") } ) return resolverForProject.resolverForModule(testModule).componentProvider.get() } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 1aad49eba23..5ca8c78d26d 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade @@ -73,7 +74,8 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { val moduleName = javaClass.name.asString().toLowerCase().first().toString() modules.first { it._name == moduleName } }, - builtIns = builtIns + builtIns = builtIns, + modulePlatforms = { MultiTargetPlatform.Specific("JVM") } ) builtIns.initialize( diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index d0284681170..1d05d73265e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -138,7 +138,7 @@ public abstract class KotlinBuiltIns { } protected void createBuiltInsModule() { - builtInsModule = new ModuleDescriptorImpl(BUILTINS_MODULE_NAME, storageManager, this); + builtInsModule = new ModuleDescriptorImpl(BUILTINS_MODULE_NAME, storageManager, this, null); PackageFragmentProvider packageFragmentProvider = BuiltInsPackageFragmentProviderKt.createBuiltInPackageFragmentProvider( storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, getClassDescriptorFactories(), diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt index 5ee8f86917a..0872d4a64a1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt @@ -26,8 +26,6 @@ interface ModuleDescriptor : DeclarationDescriptor { val builtIns: KotlinBuiltIns - val platformKind: PlatformKind - val sourceKind: SourceKind fun shouldSeeInternalsOf(targetModule: ModuleDescriptor): Boolean diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PlatformKind.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PlatformKind.kt deleted file mode 100644 index b735d8f0ece..00000000000 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PlatformKind.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2016 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.descriptors - -enum class PlatformKind { - DEFAULT, - JVM, - JS -} \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 9bcd2db088f..ee887649e2b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -21,6 +21,8 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.resolve.getMultiTargetPlatform import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.utils.sure import java.lang.IllegalArgumentException @@ -29,9 +31,10 @@ class ModuleDescriptorImpl @JvmOverloads constructor( moduleName: Name, private val storageManager: StorageManager, override val builtIns: KotlinBuiltIns, - override val platformKind: PlatformKind = PlatformKind.DEFAULT, + // May be null in compiler context, should be not-null in IDE context + multiTargetPlatform: MultiTargetPlatform? = null, override val sourceKind: SourceKind = SourceKind.NONE, - private val capabilities: Map, Any?> = emptyMap() + capabilities: Map, Any?> = emptyMap() ) : DeclarationDescriptorImpl(Annotations.EMPTY, moduleName), ModuleDescriptor { init { if (!moduleName.isSpecial) { @@ -39,6 +42,8 @@ class ModuleDescriptorImpl @JvmOverloads constructor( } } + private val capabilities = capabilities + (multiTargetPlatform?.let { mapOf(MultiTargetPlatform.CAPABILITY to it) } ?: emptyMap()) + private var dependencies: ModuleDependencies? = null private var packageFragmentProviderForModuleContent: PackageFragmentProvider? = null @@ -81,9 +86,9 @@ class ModuleDescriptorImpl @JvmOverloads constructor( fun setDependencies(dependencies: ModuleDependencies) { assert(this.dependencies == null) { "Dependencies of $id were already set" } this.dependencies = dependencies - if (platformKind == PlatformKind.DEFAULT) return + if (getMultiTargetPlatform() == MultiTargetPlatform.Common) return for (dependencyModule in allDependencyModules) { - if (dependencyModule.platformKind != PlatformKind.DEFAULT) continue + if (dependencyModule.getMultiTargetPlatform() != MultiTargetPlatform.Common) continue if (dependencyModule.sourceKind != sourceKind) continue (dependencyModule as? ModuleDescriptorImpl)?.allImplementingModules?.add(this) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt similarity index 97% rename from compiler/frontend/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt rename to core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt index b4e7655419b..7ba393edc74 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 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. diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index afd2bc3828b..8ef514e2fc1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -50,12 +50,6 @@ public class ErrorUtils { private static final ModuleDescriptor ERROR_MODULE; static { ERROR_MODULE = new ModuleDescriptor() { - @NotNull - @Override - public PlatformKind getPlatformKind() { - return PlatformKind.DEFAULT; - } - @NotNull @Override public SourceKind getSourceKind() { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt index ab4e23396f5..647401244ae 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt @@ -29,13 +29,13 @@ import org.jetbrains.kotlin.analyzer.ResolverForProject import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.context.GlobalContextImpl import org.jetbrains.kotlin.context.withProject -import org.jetbrains.kotlin.descriptors.PlatformKind import org.jetbrains.kotlin.descriptors.SourceKind import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters fun createModuleResolverProvider( @@ -78,7 +78,7 @@ fun createModuleResolverProvider( sdk?.let { SdkInfo(project, it) }, modulePlatforms = { moduleInfo -> val module = (moduleInfo as? ModuleSourceInfo)?.module - module?.let { TargetPlatformDetector.getPlatform(module).kind } ?: PlatformKind.DEFAULT + module?.let { TargetPlatformDetector.getPlatform(module).multiTargetPlatform } }, moduleSources = { moduleInfo -> when (moduleInfo) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.java index 730c8a6a843..c092d5608f2 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.java @@ -236,7 +236,7 @@ public class SourceNavigationHelper { @NotNull Project project ) { MutableModuleContext newModuleContext = ContextKt.ContextForNewModule( - ContextKt.ProjectContext(project), Name.special(""), DefaultBuiltIns.getInstance() + ContextKt.ProjectContext(project), Name.special(""), DefaultBuiltIns.getInstance(), null ); newModuleContext.setDependencies(newModuleContext.getModule(), newModuleContext.getModule().getBuiltIns().getBuiltInsModule()); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PlatformHeaderAnnotator.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PlatformHeaderAnnotator.kt index 4c29a12d9b5..a3d123fe16c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PlatformHeaderAnnotator.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/PlatformHeaderAnnotator.kt @@ -22,7 +22,6 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.PlatformKind import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor @@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics @@ -40,8 +40,7 @@ class PlatformHeaderAnnotator : Annotator { val declaration = element as? KtDeclaration ?: return if (!declaration.hasModifier(KtTokens.HEADER_KEYWORD)) return - val platform = TargetPlatformDetector.getPlatform(declaration.containingKtFile) - if (platform.kind != PlatformKind.DEFAULT) return + if (TargetPlatformDetector.getPlatform(declaration.containingKtFile) !is TargetPlatform.Default) return val defaultModuleDescriptor = declaration.findModuleDescriptor() val dependentDescriptors = defaultModuleDescriptor.allImplementingModules diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt index dfdac955acf..a272a8f4964 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt @@ -22,10 +22,12 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker +import org.jetbrains.kotlin.resolve.getMultiTargetPlatform fun ModuleDescriptor.commonModuleOrNull() = allDependencyModules.filter { - it.platformKind == PlatformKind.DEFAULT && it.sourceKind == sourceKind + it.getMultiTargetPlatform() == MultiTargetPlatform.Common && it.sourceKind == sourceKind }.firstOrNull() fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/ImplementedHeaderMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/ImplementedHeaderMarker.kt index 9e95acd69ff..316202abf1c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/ImplementedHeaderMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/ImplementedHeaderMarker.kt @@ -24,7 +24,9 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker +import org.jetbrains.kotlin.resolve.getMultiTargetPlatform import java.awt.event.MouseEvent fun ModuleDescriptor.hasImplementationsOf(descriptor: MemberDescriptor) = @@ -49,7 +51,7 @@ fun getPlatformImplementationTooltip(declaration: KtDeclaration): String? { if (platformModulesWithImplementation.isEmpty()) return null return platformModulesWithImplementation.joinToString(prefix = "Has implementations in ") { - it.platformKind.name + (it.getMultiTargetPlatform() as MultiTargetPlatform.Specific).platform } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createImpl/CreateHeaderImplementationFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createImpl/CreateHeaderImplementationFix.kt index 8f0b7712a8f..002d3ed35af 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createImpl/CreateHeaderImplementationFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createImpl/CreateHeaderImplementationFix.kt @@ -41,10 +41,12 @@ import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.resolve.getMultiTargetPlatform sealed class CreateHeaderImplementationFix( declaration: D, - private val implPlatformKind: PlatformKind, + private val implPlatform: MultiTargetPlatform.Specific, private val generateIt: KtPsiFactory.(Project, D) -> D? ) : KotlinQuickFixAction(declaration) { @@ -52,7 +54,7 @@ sealed class CreateHeaderImplementationFix( protected abstract val elementType: String - override fun getText() = "Create header $elementType implementation for platform ${implPlatformKind.name}" + override fun getText() = "Create header $elementType implementation for platform ${implPlatform.platform}" override fun startInWriteAction() = false @@ -86,7 +88,7 @@ sealed class CreateHeaderImplementationFix( private fun Project.implementationModuleOf(headerModule: Module) = allModules().firstOrNull { - TargetPlatformDetector.getPlatform(it).kind == implPlatformKind && + TargetPlatformDetector.getPlatform(it).multiTargetPlatform == implPlatform && headerModule in ModuleRootManager.getInstance(it).dependencies } @@ -136,11 +138,11 @@ sealed class CreateHeaderImplementationFix( val declaration = d.psiElement as? KtNamedDeclaration ?: return null val compatibility = d.c if (compatibility.isNotEmpty()) return null - val implPlatformKind = d.b.platformKind + val implPlatform = d.b.getMultiTargetPlatform() as? MultiTargetPlatform.Specific ?: return null return when (declaration) { - is KtClassOrObject -> CreateHeaderClassImplementationFix(declaration, implPlatformKind) - is KtFunction -> CreateHeaderFunctionImplementationFix(declaration, implPlatformKind) - is KtProperty -> CreateHeaderPropertyImplementationFix(declaration, implPlatformKind) + is KtClassOrObject -> CreateHeaderClassImplementationFix(declaration, implPlatform) + is KtFunction -> CreateHeaderFunctionImplementationFix(declaration, implPlatform) + is KtProperty -> CreateHeaderPropertyImplementationFix(declaration, implPlatform) else -> null } } @@ -149,8 +151,8 @@ sealed class CreateHeaderImplementationFix( class CreateHeaderClassImplementationFix( klass: KtClassOrObject, - implPlatformKind: PlatformKind -) : CreateHeaderImplementationFix(klass, implPlatformKind, { project, element -> + implPlatform: MultiTargetPlatform.Specific +) : CreateHeaderImplementationFix(klass, implPlatform, { project, element -> generateClassOrObject(project, element, implNeeded = true) }) { @@ -159,8 +161,8 @@ class CreateHeaderClassImplementationFix( class CreateHeaderPropertyImplementationFix( property: KtProperty, - implPlatformKind: PlatformKind -) : CreateHeaderImplementationFix(property, implPlatformKind, { project, element -> + implPlatform: MultiTargetPlatform.Specific +) : CreateHeaderImplementationFix(property, implPlatform, { project, element -> val descriptor = element.toDescriptor() as? PropertyDescriptor descriptor?.let { generateProperty(project, element, descriptor, implNeeded = true) } }) { @@ -170,8 +172,8 @@ class CreateHeaderPropertyImplementationFix( class CreateHeaderFunctionImplementationFix( function: KtFunction, - implPlatformKind: PlatformKind -) : CreateHeaderImplementationFix(function, implPlatformKind, { project, element -> + implPlatform: MultiTargetPlatform.Specific +) : CreateHeaderImplementationFix(function, implPlatform, { project, element -> val descriptor = element.toDescriptor() as? FunctionDescriptor descriptor?.let { generateFunction(project, element, descriptor, implNeeded = true) } }) { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt index 4c4c5e60594..6087e633435 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt @@ -34,7 +34,9 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProvid object TopDownAnalyzerFacadeForJS { @JvmStatic fun analyzeFiles(files: Collection, config: JsConfig): JsAnalysisResult { - val context = ContextForNewModule(ProjectContext(config.project), Name.special("<${config.moduleId}>"), JsPlatform.builtIns) + val context = ContextForNewModule( + ProjectContext(config.project), Name.special("<${config.moduleId}>"), JsPlatform.builtIns, null + ) context.setDependencies( listOf(context.module) + config.moduleDescriptors.map { it.data } + 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 92df44c9f6b..00b9215424a 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,8 +18,8 @@ package org.jetbrains.kotlin.js.resolve import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.PlatformKind import org.jetbrains.kotlin.resolve.ImportPath +import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.PlatformConfigurator import org.jetbrains.kotlin.resolve.TargetPlatform @@ -31,7 +31,5 @@ object JsPlatform : TargetPlatform("JS") { val builtIns: KotlinBuiltIns get() = DefaultBuiltIns.Instance - override val kind: PlatformKind - get() = PlatformKind.JS - + override val multiTargetPlatform = MultiTargetPlatform.Specific(platformName) }