From d5fbe59a3e4990f597de7e245e907db186ba5928 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 24 Apr 2019 11:59:07 +0300 Subject: [PATCH] [Platform API] Introduce fundamental abstraction of Platform This is a large commit, which introduces general API for working with abstraction of Platform. - Add new abstraction to 'core' - SimplePlatform - which represents exactly one platform - Clients are strongly prohibited to create instances of SimplePlatform by hand, instead, corresponding *Platforms abstraction should be used (e.g. JvmPlatforms, JsPlatforms, KonanPlatforms) - Move TargetPlatform to 'core', it represents now a collection of SimplePlatforms - Clients are strongly encouraged to use TargetPlatform (not SimplePlatform) in API, to enforce checks for multiplatform - Provide a helper-extensions to work with TargetPlatform (in particular, for getting a specific component platform) - Remove MultiTargetPlatform in favour of TargetPlatform - Notably, this commit leaves another widely used duplicated abstraction, namely, IdePlatform. For the sake sanity, removal of IdePlatform is extracted in the separate commit. --- .idea/copyright/apache.xml | 7 ++ compiler/cli/cli-common/build.gradle.kts | 1 + .../common/CommonResolverForModuleFactory.kt | 10 +-- .../kotlin/platform/CommonPlatforms.kt | 35 ++++++++++ .../kotlin/platform/konan/KonanPlatform.kt | 23 +++++++ .../compiler/KotlinToJVMBytecodeCompiler.kt | 12 +++- .../compiler/TopDownAnalyzerFacadeForJVM.kt | 7 +- .../fir/descriptors/FirModuleDescriptor.kt | 4 ++ .../fir/AbstractFirDiagnosticsSmokeTest.kt | 24 ++++--- .../jetbrains/kotlin/analyzer/ModuleInfo.kt | 2 +- .../kotlin/resolve/TargetPlatform.kt | 11 --- .../org/jetbrains/kotlin/config/JvmTarget.kt | 1 + .../kotlin/frontend/java/di/injection.kt | 63 +++++++++-------- .../kotlin/platform/jvm/JvmPlatform.kt | 44 ++++++++++++ .../jvm/JvmResolverForModuleFactory.kt | 13 ++-- .../resolve/jvm/platform/JvmPlatform.kt | 23 ------- .../kotlin/analyzer/AnalyzerFacade.kt | 17 +++-- .../kotlin/analyzer/common/CommonPlatform.kt | 5 -- .../kotlin/checkers/utils/CheckerTestUtil.kt | 16 +++-- .../org/jetbrains/kotlin/context/context.kt | 6 +- .../kotlin/diagnostics/rendering/Renderers.kt | 10 +-- .../StorageComponentContainerContributor.kt | 2 +- .../jetbrains/kotlin/frontend/di/injection.kt | 27 +++----- .../kotlin/resolve/OverloadResolver.kt | 3 +- .../OptionalExpectationUsageChecker.kt | 8 +-- .../expressions/LocalClassifierAnalyzer.kt | 4 +- .../checkers/AbstractDiagnosticsTest.kt | 32 ++++++--- .../kotlin/checkers/BaseDiagnosticsTest.kt | 4 +- .../jetbrains/kotlin/fir/FirTestModuleInfo.kt | 6 +- .../resolve/lazy/lazyResolveTestUtils.kt | 10 +-- .../util/RecursiveDescriptorComparator.java | 4 +- .../jetbrains/kotlin/tests/di/injection.kt | 6 +- .../MultiModuleJavaAnalysisCustomTest.kt | 6 +- .../kotlin/config/TargetPlatformVersion.kt | 25 ------- .../kotlin/descriptors/ModuleDescriptor.kt | 5 ++ .../descriptors/impl/ModuleDescriptorImpl.kt | 8 +-- .../kotlin/platform/TargetPlatform.kt | 68 +++++++++++++++++++ .../jetbrains/kotlin/platform/platformUtil.kt | 38 +++++++++++ .../kotlin/resolve/DescriptorUtils.kt | 4 ++ .../kotlin/resolve/MultiTargetPlatform.kt | 47 ------------- .../jetbrains/kotlin/types/ErrorUtils.java | 7 ++ .../caches/resolve/KotlinCacheService.kt | 2 +- .../lightClasses/IDELightClassContexts.kt | 8 +-- .../idea/caches/project/IdeaModuleInfos.kt | 3 +- .../project/LibraryDependenciesCache.kt | 6 +- .../idea/caches/project/ScriptModuleInfos.kt | 2 +- .../project/moduleInfosFromIdeaModel.kt | 6 +- .../idea/caches/project/multiplatformUtil.kt | 13 ++-- .../caches/resolve/IDEKotlinAsJavaSupport.kt | 7 +- .../caches/resolve/KotlinCacheServiceImpl.kt | 2 +- .../caches/resolve/KtFileClassProviderImpl.kt | 4 +- .../caches/resolve/PerFileAnalysisCache.kt | 8 +-- .../caches/resolve/ProjectResolutionFacade.kt | 13 ++-- .../resolve/ResolutionFacadeWithDebugInfo.kt | 2 +- .../idea/caches/resolve/packageOracles.kt | 6 +- .../resolve/util/JavaResolveExtension.kt | 4 +- .../compiler/IDELanguageSettingsProvider.kt | 3 +- .../builtIns/KotlinBuiltInDecompiler.kt | 1 - .../DeserializerForClassfileDecompiler.kt | 2 - ...KotlinMetadataDeserializerForDecompiler.kt | 1 - .../js/KotlinJavaScriptMetaFileDecompiler.kt | 1 - .../navigation/SourceNavigationHelper.kt | 6 +- .../DeserializerForDecompilerBase.kt | 1 - .../kotlin/idea/framework/LibraryKinds.kt | 11 ++- .../DuplicateJvmSignatureAnnotator.kt | 4 +- .../jetbrains/kotlin/idea/project/Platform.kt | 14 ++-- .../idea/project/ProjectStructureUtil.java | 2 +- .../idea/project/ResolveElementCache.kt | 2 +- .../idea/project/TargetPlatformDetector.java | 13 ++-- .../kotlin/idea/project/compilerServices.kt | 22 +++--- .../KotlinAndroidGradleModuleConfigurator.kt | 6 +- .../idea/completion/AllClassesCompletion.kt | 4 +- .../idea/completion/BasicCompletionSession.kt | 4 +- .../idea/completion/CompletionSession.kt | 11 ++- ...tractCompiledKotlinInJavaCompletionTest.kt | 4 +- ...bstractCompletionIncrementalResolveTest.kt | 4 +- .../test/AbstractJSBasicCompletionTest.java | 6 +- .../test/AbstractJvmBasicCompletionTest.java | 6 +- .../test/AbstractJvmSmartCompletionTest.java | 6 +- .../AbstractJvmWithLibBasicCompletionTest.kt | 4 +- .../test/AbstractKeywordCompletionTest.kt | 4 +- ...bstractKotlinSourceInJavaCompletionTest.kt | 6 +- ...bstractKotlinStdLibInJavaCompletionTest.kt | 4 +- ...AbstractMultiFileJvmBasicCompletionTest.kt | 4 +- .../AbstractMultiFileSmartCompletionTest.kt | 4 +- .../completion/test/CompletionTestUtil.kt | 14 ++-- .../test/ExpectedCompletionUtils.kt | 34 +++++----- .../KotlinFixtureCompletionBaseTestCase.kt | 2 +- .../gradle/KotlinNativeGradleConfigurator.kt | 4 +- .../GradleNativeLibrariesInIDENamingTest.kt | 4 +- .../KotlinGradleModuleConfigurator.kt | 7 +- .../KotlinJsGradleModuleConfigurator.kt | 6 +- .../gradle/GradleFacetImportTest.kt | 14 ++-- .../kotlin/config/KotlinFacetSettings.kt | 1 + .../DefaultIdeTargetPlatformKindProvider.kt | 1 - .../jetbrains/kotlin/platform/IdePlatform.kt | 1 - .../kotlin/platform/IdePlatformKind.kt | 1 - .../platform/impl/CommonIdePlatformKind.kt | 6 +- .../kotlin/platform/impl/JsIdePlatformKind.kt | 6 +- .../platform/impl/JvmIdePlatformKind.kt | 4 +- .../platform/impl/NativeIdePlatformKind.kt | 6 +- .../actions/ConfigureKotlinInProjectAction.kt | 8 +-- .../KotlinJavaModuleConfigurator.kt | 6 +- .../KotlinJsModuleConfigurator.kt | 6 +- .../KotlinProjectConfigurator.kt | 2 +- ...linSetupEnvironmentNotificationProvider.kt | 5 +- .../DebuggerFieldSyntheticScopeProvider.kt | 6 +- .../DebugLabelPropertyDescriptorProvider.kt | 5 ++ .../idea/framework/KotlinModuleBuilder.kt | 12 ++-- .../framework/KotlinModuleSettingStep.java | 17 ++--- .../idea/framework/KotlinTemplatesFactory.kt | 27 +++++--- .../idea/internal/KotlinBytecodeToolWindow.kt | 10 +-- .../KotlinTestNgConfigurationProducer.java | 4 +- ...rtedAbiVersionNotificationPanelProvider.kt | 11 +-- .../KotlinJavaMavenConfigurator.kt | 6 +- .../KotlinJavascriptMavenConfigurator.kt | 6 +- .../idea/maven/KotlinMavenImporterTest.kt | 14 ++-- .../ide/konan/NativeIdePlatformKindTooling.kt | 2 +- .../ide/konan/NativePlatformKindResolution.kt | 11 ++- .../NativeResolverForModuleFactory.kt | 10 +-- .../KotlinGenerateEqualsAndHashcodeAction.kt | 18 ++--- .../highlighter/PlatformExpectedAnnotator.kt | 4 +- .../highlighter/markers/HasActualMarker.kt | 19 +++--- .../OptionalExpectationInspection.kt | 10 +-- .../ReplaceWithEnumMapInspection.kt | 4 +- .../SuspiciousAsDynamicInspection.kt | 4 +- ...ReplaceCallWithBinaryOperatorInspection.kt | 4 +- .../intentions/AddJvmOverloadsIntention.kt | 4 +- .../AddThrowsAnnotationIntention.kt | 4 +- .../ConvertTestFunctionToSpacedIntention.kt | 6 +- ...vertUnsafeCastCallToUnsafeCastIntention.kt | 4 +- ...vertUnsafeCastToUnsafeCastCallIntention.kt | 4 +- .../kotlin/idea/quickfix/ImportFix.kt | 12 ++-- .../KotlinElementActionsFactory.kt | 4 +- .../KotlinElementActionsFactory.kt.182 | 4 +- .../quickfix/expectactual/CreateActualFix.kt | 16 ++--- .../expectactual/ExpectActualUtils.kt | 5 +- .../ReplaceWithAnnotationAnalyzer.kt | 1 + .../changeSignature/KotlinChangeInfo.kt | 4 +- .../moveDeclarations/moveConflictUtils.kt | 4 +- ...KotlinNonJvmSourceRootConverterProvider.kt | 26 ++++--- .../ui/NonJvmKotlinModuleEditorsProvider.kt | 4 +- .../generate/AbstractCodeInsightActionTest.kt | 12 ++-- .../CodeFragmentCompletionInLibraryTest.kt | 5 +- .../repl/AbstractIdeReplCompletionTest.kt | 4 +- ...stractScriptConfigurationCompletionTest.kt | 16 +++-- .../kotlin/frontend/js/di/injection.kt | 9 ++- .../js/analyze/TopDownAnalyzerFacadeForJS.kt | 2 +- .../jetbrains/kotlin/js/resolve/JsPlatform.kt | 24 ------- .../js/resolve/JsResolverForModuleFactory.kt | 24 ++----- .../kotlin/platform/js/JsPlatform.kt | 23 +++++++ .../resolve/konan/platform/KonanPlatform.kt | 12 ---- .../synthetic/AndroidComponentRegistrar.kt | 8 +-- .../synthetic/idea/ExperimentalUtils.kt | 4 +- .../android/AbstractAndroidCompletionTest.kt | 5 +- .../org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt | 7 +- plugins/noarg/noarg-cli/src/NoArgPlugin.kt | 8 +-- ...IdeStorageComponentContainerContributor.kt | 8 +-- .../src/SamWithReceiverPlugin.kt | 6 +- .../IdeSamWithReceiverComponentContributor.kt | 12 ++-- .../IdeaKotlinUastResolveProviderService.kt | 8 +-- ...deaKotlinUastResolveProviderService.kt.182 | 8 +-- 162 files changed, 832 insertions(+), 711 deletions(-) create mode 100644 .idea/copyright/apache.xml rename compiler/{frontend => cli/cli-common}/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt (95%) create mode 100644 compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt create mode 100644 compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/konan/KonanPlatform.kt delete mode 100644 compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt create mode 100644 compiler/frontend.java/src/org/jetbrains/kotlin/platform/jvm/JvmPlatform.kt delete mode 100644 compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt delete mode 100644 compiler/util/src/org/jetbrains/kotlin/config/TargetPlatformVersion.kt create mode 100644 core/descriptors/src/org/jetbrains/kotlin/platform/TargetPlatform.kt create mode 100644 core/descriptors/src/org/jetbrains/kotlin/platform/platformUtil.kt delete mode 100644 core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt delete mode 100644 js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt create mode 100644 js/js.frontend/src/org/jetbrains/kotlin/platform/js/JsPlatform.kt delete mode 100644 konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt diff --git a/.idea/copyright/apache.xml b/.idea/copyright/apache.xml new file mode 100644 index 00000000000..445d6beaf9b --- /dev/null +++ b/.idea/copyright/apache.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/compiler/cli/cli-common/build.gradle.kts b/compiler/cli/cli-common/build.gradle.kts index e8c39c71c69..e8d297f12a4 100644 --- a/compiler/cli/cli-common/build.gradle.kts +++ b/compiler/cli/cli-common/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { compile(project(":core:util.runtime")) compile(project(":compiler:frontend")) compile(project(":compiler:frontend.java")) + compile(project(":js:js.frontend")) compileOnly(project(":kotlin-reflect-api")) compileOnly(intellijCoreDep()) { includeJars("intellij-core") } compileOnly(intellijDep()) { includeIntellijCoreJarDependencies(project) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt similarity index 95% rename from compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt rename to compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt index bb25599649f..41a9e01db2f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt @@ -22,7 +22,7 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.lazy.ResolveSession @@ -72,7 +73,7 @@ object CommonResolverForModuleFactory : ResolverForModuleFactory() { fun analyzeFiles( files: Collection, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings, - capabilities: Map, Any?> = mapOf(MultiTargetPlatform.CAPABILITY to MultiTargetPlatform.Common), + capabilities: Map, Any?> = emptyMap(), metadataPartProviderFactory: (ModuleContent) -> MetadataPartProvider ): AnalysisResult { val moduleInfo = SourceModuleInfo(moduleName, capabilities, dependOnBuiltIns) @@ -121,8 +122,7 @@ object CommonResolverForModuleFactory : ResolverForModuleFactory() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - targetPlatformVersion: TargetPlatformVersion + languageVersionSettings: LanguageVersionSettings ): ResolverForModule { val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project @@ -156,7 +156,7 @@ object CommonResolverForModuleFactory : ResolverForModuleFactory() { metadataPartProvider: MetadataPartProvider, languageVersionSettings: LanguageVersionSettings ): StorageComponentContainer = createContainer("ResolveCommonCode", CommonPlatformCompilerServices) { - configureModule(moduleContext, CommonPlatform, TargetPlatformVersion.NoVersion, CommonPlatformCompilerServices, bindingTrace) + configureModule(moduleContext, DefaultBuiltInPlatforms.commonPlatform, CommonPlatformCompilerServices, bindingTrace) useInstance(moduleContentScope) useInstance(LookupTracker.DO_NOTHING) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt new file mode 100644 index 00000000000..f8590400d7b --- /dev/null +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/CommonPlatforms.kt @@ -0,0 +1,35 @@ +/* + * 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.platform + +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.js.JsPlatforms.defaultJsPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms.defaultJvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms.jvm18 +import org.jetbrains.kotlin.platform.konan.KonanPlatforms +import org.jetbrains.kotlin.platform.konan.KonanPlatforms.defaultKonanPlatform + +object CommonPlatforms { + + val defaultCommonPlatform: TargetPlatform = TargetPlatform( + setOf( + defaultJvmPlatform.single(), + defaultJsPlatform.single(), + defaultKonanPlatform.single() + ) + ) + + val allSimplePlatforms: List + get() = sequence { + yieldAll(JvmPlatforms.allJvmPlatforms) + yieldAll(KonanPlatforms.allKonanPlatforms) + yieldAll(JsPlatforms.allJsPlatforms) + + // TODO(dsavvinov): extensions points? + }.toList() +} + diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/konan/KonanPlatform.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/konan/KonanPlatform.kt new file mode 100644 index 00000000000..1ae71f6a025 --- /dev/null +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/platform/konan/KonanPlatform.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.platform.konan + +import org.jetbrains.kotlin.platform.SimplePlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.toTargetPlatform + +abstract class KonanPlatform : SimplePlatform("Native") { + override val oldFashionedDescription: String + get() = "Kotlin/Native " +} + +object KonanPlatforms { + val defaultKonanPlatform: TargetPlatform = object : KonanPlatform() {}.toTargetPlatform() + + val allKonanPlatforms: List = listOf(defaultKonanPlatform) +} + +fun TargetPlatform?.isNative(): Boolean = this?.singleOrNull() is KonanPlatform \ No newline at end of file diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index ed873a9328d..debab985d4d 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -66,11 +66,13 @@ import org.jetbrains.kotlin.modules.Module import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize import org.jetbrains.kotlin.utils.tryConstructClassFromStringArgs import java.io.File @@ -301,7 +303,11 @@ object KotlinToJVMBytecodeCompiler { val dependencies: MutableList = mutableListOf() - override val platform: TargetPlatform? get() = JvmPlatform + override val platform: TargetPlatform + get() = JvmPlatforms.unspecifiedJvmPlatform + + override val analyzerServices: PlatformDependentAnalyzerServices + get() = JvmPlatformAnalyzerServices override fun dependencies(): List { return dependencies diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index ef1fbbd5376..fb21a8020a1 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentPr import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver @@ -167,8 +168,9 @@ object TopDownAnalyzerFacadeForJVM { val dependencyScope = GlobalSearchScope.notScope(sourceScope) val dependenciesContainer = createContainerForTopDownAnalyzerForJvm( + JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), // TODO(dsavvinov): do not pass JvmTarget around dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker, expectActualTracker, - packagePartProvider(dependencyScope), moduleClassResolver, targetEnvironment, jvmTarget, languageVersionSettings, + packagePartProvider(dependencyScope), moduleClassResolver, targetEnvironment, languageVersionSettings, configureJavaClassFinder ) @@ -196,8 +198,9 @@ object TopDownAnalyzerFacadeForJVM { // to be stored in CliLightClassGenerationSupport, and it better be the source one (otherwise light classes would not be found) // TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport val container = createContainerForTopDownAnalyzerForJvm( + JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker, expectActualTracker, - partProvider, moduleClassResolver, targetEnvironment, jvmTarget, languageVersionSettings, configureJavaClassFinder, + partProvider, moduleClassResolver, targetEnvironment, languageVersionSettings, configureJavaClassFinder, configuration[JVMConfigurationKeys.JAVA_CLASSES_TRACKER] ).apply { initJvmBuiltInsForTopDownAnalysis() diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt index 0b9df85fe18..b79e59e2f5a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor { override val builtIns: KotlinBuiltIns @@ -25,6 +26,9 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor { return false } + override val platform: TargetPlatform? + get() = null + override fun getPackage(fqName: FqName): PackageViewDescriptor { val symbolProvider = FirSymbolProvider.getInstance(session) if (symbolProvider.getPackage(fqName) != null) { diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsSmokeTest.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsSmokeTest.kt index 5428622ab34..d7464070b14 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsSmokeTest.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/AbstractFirDiagnosticsSmokeTest.kt @@ -22,10 +22,12 @@ import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveTransformer import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.platform.CommonPlatforms +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices import java.io.File import java.util.* @@ -130,21 +132,23 @@ abstract class AbstractFirDiagnosticsSmokeTest : BaseDiagnosticsTest() { private val builtInsModuleInfo = BuiltInModuleInfo(Name.special("")) protected open fun createModule(moduleName: String): TestModuleInfo { - val nameSuffix = moduleName.substringAfterLast("-", "") - // TODO: use platform + val nameSuffix = moduleName.substringAfterLast("-", "").toUpperCase() @Suppress("UNUSED_VARIABLE") val platform = when { - nameSuffix.isEmpty() -> null - nameSuffix == "common" -> MultiTargetPlatform.Common - else -> MultiTargetPlatform.Specific(nameSuffix.toUpperCase()) + nameSuffix.isEmpty() -> null // TODO(dsavvinov): this leads to 'null'-platform in ModuleDescriptor + nameSuffix == "COMMON" -> CommonPlatforms.defaultCommonPlatform + nameSuffix == "JVM" -> JvmPlatforms.defaultJvmPlatform // TODO(dsavvinov): determine JvmTarget precisely + nameSuffix == "JS" -> JsPlatforms.defaultJsPlatform + nameSuffix == "NATIVE" -> KonanPlatforms.defaultKonanPlatform + else -> throw IllegalStateException("Can't determine platform by name $nameSuffix") } return TestModuleInfo(Name.special("<$moduleName>")) } class BuiltInModuleInfo(override val name: Name) : ModuleInfo { override val platform: TargetPlatform? - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform override val compilerServices: PlatformDependentCompilerServices get() = JvmPlatformCompilerServices @@ -156,7 +160,7 @@ abstract class AbstractFirDiagnosticsSmokeTest : BaseDiagnosticsTest() { protected class TestModuleInfo(override val name: Name) : ModuleInfo { override val platform: TargetPlatform? - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform override val compilerServices: PlatformDependentCompilerServices get() = JvmPlatformCompilerServices diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/analyzer/ModuleInfo.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/analyzer/ModuleInfo.kt index 8fb87f8a9fe..6c549740e40 100644 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/analyzer/ModuleInfo.kt +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/analyzer/ModuleInfo.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analyzer import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform interface ModuleInfo { diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt deleted file mode 100644 index 995ed9d4b62..00000000000 --- a/compiler/frontend.common/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. - * 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 - -abstract class TargetPlatform(val platformName: String) { - override fun toString() = platformName - abstract val platform: MultiTargetPlatform -} diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmTarget.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmTarget.kt index 4dfc0bba7f9..eb408d8af1a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmTarget.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmTarget.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.config +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.org.objectweb.asm.Opcodes enum class JvmTarget(override val description: String) : TargetPlatformVersion { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index c25a00c3fe3..6d40734f446 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -21,7 +21,6 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsPackageFragmentProvider import org.jetbrains.kotlin.config.JvmAnalysisFlags -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.* @@ -41,9 +40,9 @@ import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.ResolveSession @@ -79,22 +78,22 @@ private fun StorageComponentContainer.configureJavaTopDownAnalysis( } fun createContainerForLazyResolveWithJava( - moduleContext: ModuleContext, - bindingTrace: BindingTrace, - declarationProviderFactory: DeclarationProviderFactory, - moduleContentScope: GlobalSearchScope, - moduleClassResolver: ModuleClassResolver, - targetEnvironment: TargetEnvironment, - lookupTracker: LookupTracker, - expectActualTracker: ExpectActualTracker, - packagePartProvider: PackagePartProvider, - jvmTarget: JvmTarget, - languageVersionSettings: LanguageVersionSettings, - useBuiltInsProvider: Boolean, - configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null, - javaClassTracker: JavaClassesTracker? = null + jvmPlatform: TargetPlatform, + moduleContext: ModuleContext, + bindingTrace: BindingTrace, + declarationProviderFactory: DeclarationProviderFactory, + moduleContentScope: GlobalSearchScope, + moduleClassResolver: ModuleClassResolver, + targetEnvironment: TargetEnvironment, + lookupTracker: LookupTracker, + expectActualTracker: ExpectActualTracker, + packagePartProvider: PackagePartProvider, + languageVersionSettings: LanguageVersionSettings, + useBuiltInsProvider: Boolean, + configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null, + javaClassTracker: JavaClassesTracker? = null ): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatformCompilerServices) { - configureModule(moduleContext, JvmPlatform, jvmTarget, JvmPlatformCompilerServices, bindingTrace) + configureModule(moduleContext, jvmPlatform, JvmPlatformCompilerServices, bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker, expectActualTracker) if (configureJavaClassFinder != null) { @@ -135,22 +134,22 @@ fun createContainerForLazyResolveWithJava( fun createContainerForTopDownAnalyzerForJvm( - moduleContext: ModuleContext, - bindingTrace: BindingTrace, - declarationProviderFactory: DeclarationProviderFactory, - moduleContentScope: GlobalSearchScope, - lookupTracker: LookupTracker, - expectActualTracker: ExpectActualTracker, - packagePartProvider: PackagePartProvider, - moduleClassResolver: ModuleClassResolver, - targetEnvironment: TargetEnvironment, - jvmTarget: JvmTarget, - languageVersionSettings: LanguageVersionSettings, - configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null, - javaClassTracker: JavaClassesTracker? = null + jvmPlatform: TargetPlatform, + moduleContext: ModuleContext, + bindingTrace: BindingTrace, + declarationProviderFactory: DeclarationProviderFactory, + moduleContentScope: GlobalSearchScope, + lookupTracker: LookupTracker, + expectActualTracker: ExpectActualTracker, + packagePartProvider: PackagePartProvider, + moduleClassResolver: ModuleClassResolver, + targetEnvironment: TargetEnvironment, + languageVersionSettings: LanguageVersionSettings, + configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null, + javaClassTracker: JavaClassesTracker? = null ): ComponentProvider = createContainerForLazyResolveWithJava( - moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver, - targetEnvironment, lookupTracker, expectActualTracker, packagePartProvider, jvmTarget, languageVersionSettings, + jvmPlatform, moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver, + targetEnvironment, lookupTracker, expectActualTracker, packagePartProvider, languageVersionSettings, useBuiltInsProvider = true, configureJavaClassFinder = configureJavaClassFinder, javaClassTracker = javaClassTracker diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/platform/jvm/JvmPlatform.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/platform/jvm/JvmPlatform.kt new file mode 100644 index 00000000000..1e95c1a111e --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/platform/jvm/JvmPlatform.kt @@ -0,0 +1,44 @@ +/* + * 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.platform.jvm + +import org.jetbrains.kotlin.config.JvmTarget +import org.jetbrains.kotlin.platform.SimplePlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.toTargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatformVersion + +abstract class JvmPlatform : SimplePlatform("JVM") { + override val oldFashionedDescription: String + get() = "JVM " +} + +object JvmPlatforms { + private val jvmTargetToJdkPlatform: Map = + JvmTarget.values().map { it to JdkPlatform(it).toTargetPlatform() }.toMap() + + val defaultJvmPlatform: TargetPlatform = jvmTargetToJdkPlatform[JvmTarget.DEFAULT]!! + + val jvm16: TargetPlatform = jvmTargetToJdkPlatform[JvmTarget.JVM_1_6]!! + val jvm18: TargetPlatform = jvmTargetToJdkPlatform[JvmTarget.JVM_1_8]!! + + fun jvmPlatformByTargetVersion(targetVersion: JvmTarget): TargetPlatform = + jvmTargetToJdkPlatform[targetVersion]!! + + val allJvmPlatforms: List = jvmTargetToJdkPlatform.values.toList() +} + +data class JdkPlatform(val targetVersion: JvmTarget) : JvmPlatform() { + override fun toString(): String = "$platformName ($targetVersion)" + + override val oldFashionedDescription: String + get() = "JVM " + targetVersion.description + + override val targetPlatformVersion: TargetPlatformVersion + get() = targetVersion +} + +fun TargetPlatform?.isJvm(): Boolean = this?.singleOrNull() is JvmPlatform \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt index 26eeb200e20..a827cb2c9b9 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt @@ -17,9 +17,7 @@ package org.jetbrains.kotlin.resolve.jvm import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider @@ -30,11 +28,10 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolverImpl import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.kotlin.PackagePartProvider +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer import org.jetbrains.kotlin.resolve.TargetEnvironment -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService @@ -52,8 +49,7 @@ object JvmResolverForModuleFactory : ResolverForModuleFactory() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - targetPlatformVersion: TargetPlatformVersion + languageVersionSettings: LanguageVersionSettings ): ResolverForModule { val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project @@ -73,7 +69,7 @@ object JvmResolverForModuleFactory : ResolverForModuleFactory() { val resolverForReferencedModule = referencedClassModule?.let { resolverForProject.tryGetResolverForModule(it as M) } val resolverForModule = resolverForReferencedModule?.takeIf { - referencedClassModule.platform == JvmPlatform || referencedClassModule.platform == null + referencedClassModule.platform.isJvm() || referencedClassModule.platform == null } ?: run { // in case referenced class lies outside of our resolver, resolve the class as if it is inside our module // this leads to java class being resolved several times @@ -82,12 +78,12 @@ object JvmResolverForModuleFactory : ResolverForModuleFactory() { resolverForModule.componentProvider.get() } - val jvmTarget = targetPlatformVersion as? JvmTarget ?: JvmTarget.DEFAULT val trace = CodeAnalyzerInitializer.getInstance(project).createTrace() val lookupTracker = LookupTracker.DO_NOTHING val packagePartProvider = (platformParameters as JvmPlatformParameters).packagePartProviderFactory(moduleContent) val container = createContainerForLazyResolveWithJava( + moduleDescriptor.platform!!, moduleContext, trace, declarationProviderFactory, @@ -97,7 +93,6 @@ object JvmResolverForModuleFactory : ResolverForModuleFactory() { lookupTracker, ExpectActualTracker.DoNothing, packagePartProvider, - jvmTarget, languageVersionSettings, useBuiltInsProvider = false // TODO: load built-ins from module dependencies in IDE ) 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 deleted file mode 100644 index 5d958e85c96..00000000000 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.resolve.* - -object JvmPlatform : TargetPlatform("JVM") { - override val platform = 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 f12761d5154..2270c224378 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ProjectContext @@ -37,10 +36,10 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDependencies import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.CompilerEnvironment -import org.jetbrains.kotlin.resolve.TargetEnvironment -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue import java.util.* @@ -185,6 +184,8 @@ class ResolverForProjectImpl( val languageVersionSettings = moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project, isReleaseCoroutines) + + // FIXME(dsavvinov): make sure that module.platform returns platform with the same JvmTarget as this one val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module, projectContext.project) val resolverForModuleFactory = resolverForModuleFactoryByPlatform(module.platform) @@ -195,8 +196,7 @@ class ResolverForProjectImpl( platformParameters(module.platform ?: TODO("Missing platform!")), targetEnvironment, this@ResolverForProjectImpl, - languageVersionSettings, - targetPlatformVersion + languageVersionSettings ) } } @@ -255,7 +255,7 @@ class ResolverForProjectImpl( module.name, projectContext.storageManager, builtIns, - module.platform?.multiTargetPlatform, + module.platform, module.capabilities, module.stableName ) @@ -304,8 +304,7 @@ abstract class ResolverForModuleFactory { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - targetPlatformVersion: TargetPlatformVersion + languageVersionSettings: LanguageVersionSettings ): ResolverForModule } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonPlatform.kt index e1d1de2c385..86156ec7c62 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonPlatform.kt @@ -17,11 +17,6 @@ import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.DynamicTypesSettings -object CommonPlatform : TargetPlatform("Default") { - override val platform: MultiTargetPlatform - get() = MultiTargetPlatform.Common -} - private object CommonPlatformConfigurator : PlatformConfiguratorBase( DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(), IdentifierChecker.Default, OverloadFilter.Default, PlatformToKotlinClassMap.EMPTY, DelegationFilter.Default, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/checkers/utils/CheckerTestUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/checkers/utils/CheckerTestUtil.kt index afc7ff1996b..82fb570c7aa 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/checkers/utils/CheckerTestUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/checkers/utils/CheckerTestUtil.kt @@ -20,17 +20,18 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.AnalyzingUtils -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.oldFashionedDescription import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.typeInfoFactory.noTypeInfo import java.util.* @@ -48,7 +49,7 @@ object CheckerTestUtil { fun getDiagnosticsIncludingSyntaxErrors( bindingContext: BindingContext, - implementingModulesBindings: List>, + implementingModulesBindings: List>, root: PsiElement, markDynamicCalls: Boolean, dynamicCallDescriptors: MutableList, @@ -70,10 +71,11 @@ object CheckerTestUtil { moduleDescriptor, diagnosedRanges ) - val sortedBindings = implementingModulesBindings.sortedBy { it.first } + + val sortedBindings = implementingModulesBindings.sortedBy { it.first.oldFashionedDescription } for ((platform, second) in sortedBindings) { - assert(platform is MultiTargetPlatform.Specific) { "Implementing module must have a specific platform: $platform" } + assert(!platform.isCommon()) { "Implementing module must have a specific platform: $platform" } result.addAll( getDiagnosticsIncludingSyntaxErrors( @@ -81,7 +83,7 @@ object CheckerTestUtil { root, markDynamicCalls, dynamicCallDescriptors, - (platform as MultiTargetPlatform.Specific).platform, + platform.single().platformName, withNewInference, languageVersionSettings, dataFlowValueFactory, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt index eb55378dbb1..59b53a70c55 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/context/context.kt @@ -22,7 +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.platform.TargetPlatform import org.jetbrains.kotlin.storage.ExceptionTracker import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager @@ -99,8 +99,8 @@ fun ContextForNewModule( projectContext: ProjectContext, moduleName: Name, builtIns: KotlinBuiltIns, - multiTargetPlatform: MultiTargetPlatform? + platform: TargetPlatform? ): MutableModuleContext { - val module = ModuleDescriptorImpl(moduleName, projectContext.storageManager, builtIns, multiTargetPlatform) + val module = ModuleDescriptorImpl(moduleName, projectContext.storageManager, builtIns, platform) 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 7b5103e9c02..753c0fda351 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newTable import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newText import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer.Companion.DEBUG_TEXT @@ -85,11 +86,10 @@ object Renderers { @JvmField val PLATFORM = Renderer { - val platform = it.getMultiTargetPlatform() - " ${it.getCapability(ModuleInfo.Capability)?.displayedName ?: ""}" + when (platform) { - MultiTargetPlatform.Common -> "" - is MultiTargetPlatform.Specific -> " for " + platform.platform - null -> "" + val platform = it.platform + " ${it.getCapability(ModuleInfo.Capability)?.displayedName ?: ""}" + when { + platform == null || platform.isCommon() -> "" + else -> " for " + platform.single().platformName } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/extensions/StorageComponentContainerContributor.kt b/compiler/frontend/src/org/jetbrains/kotlin/extensions/StorageComponentContainerContributor.kt index a54ffa094c9..80899fbf5aa 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/extensions/StorageComponentContainerContributor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/extensions/StorageComponentContainerContributor.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.extensions import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform interface StorageComponentContainerContributor { companion object : ProjectExtensionDescriptor( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index 29517e32595..2107f3565c8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -16,11 +16,10 @@ package org.jetbrains.kotlin.frontend.di -import org.jetbrains.kotlin.analyzer.common.CommonPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.analyzer.common.CommonPlatformCompilerServices import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl @@ -29,7 +28,9 @@ import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.platform.subplatformOfType import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.components.ClassicTypeSystemContextForCS import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl @@ -46,7 +47,6 @@ import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver fun StorageComponentContainer.configureModule( moduleContext: ModuleContext, platform: TargetPlatform, - platformVersion: TargetPlatformVersion, compilerServices: PlatformDependentCompilerServices ) { useInstance(moduleContext) @@ -56,8 +56,8 @@ fun StorageComponentContainer.configureModule( useInstance(moduleContext.module.builtIns) useInstance(platform) - useInstance(platformVersion) useInstance(compilerServices) + useInstance(platform.componentPlatforms.singleOrNull()?.targetPlatformVersion ?: TargetPlatformVersion.NoVersion) compilerServices.platformConfigurator.configureModuleComponents(this) compilerServices.platformConfigurator.configureModuleDependentCheckers(this) @@ -83,11 +83,10 @@ private fun StorageComponentContainer.configurePlatformIndependentComponents() { fun StorageComponentContainer.configureModule( moduleContext: ModuleContext, platform: TargetPlatform, - platformVersion: TargetPlatformVersion, compilerServices: PlatformDependentCompilerServices, trace: BindingTrace ) { - configureModule(moduleContext, platform, platformVersion, compilerServices) + configureModule(moduleContext, platform, compilerServices) useInstance(trace) } @@ -96,11 +95,10 @@ fun createContainerForBodyResolve( bindingTrace: BindingTrace, platform: TargetPlatform, statementFilter: StatementFilter, - targetPlatformVersion: TargetPlatformVersion, compilerServices: PlatformDependentCompilerServices, languageVersionSettings: LanguageVersionSettings ): StorageComponentContainer = createContainer("BodyResolve", compilerServices) { - configureModule(moduleContext, platform, targetPlatformVersion, compilerServices, bindingTrace) + configureModule(moduleContext, platform, compilerServices, bindingTrace) useInstance(statementFilter) @@ -118,11 +116,10 @@ fun createContainerForLazyBodyResolve( bindingTrace: BindingTrace, platform: TargetPlatform, bodyResolveCache: BodyResolveCache, - targetPlatformVersion: TargetPlatformVersion, compilerServices: PlatformDependentCompilerServices, languageVersionSettings: LanguageVersionSettings ): StorageComponentContainer = createContainer("LazyBodyResolve", compilerServices) { - configureModule(moduleContext, platform, targetPlatformVersion, compilerServices, bindingTrace) + configureModule(moduleContext, platform, compilerServices, bindingTrace) useInstance(kotlinCodeAnalyzer) useInstance(kotlinCodeAnalyzer.fileScopeProvider) @@ -139,13 +136,12 @@ fun createContainerForLazyLocalClassifierAnalyzer( bindingTrace: BindingTrace, platform: TargetPlatform, lookupTracker: LookupTracker, - targetPlatformVersion: TargetPlatformVersion, languageVersionSettings: LanguageVersionSettings, statementFilter: StatementFilter, localClassDescriptorHolder: LocalClassDescriptorHolder, compilerServices: PlatformDependentCompilerServices ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", compilerServices) { - configureModule(moduleContext, platform, targetPlatformVersion, compilerServices, bindingTrace) + configureModule(moduleContext, platform, compilerServices, bindingTrace) useInstance(localClassDescriptorHolder) useInstance(lookupTracker) @@ -173,12 +169,11 @@ fun createContainerForLazyResolve( declarationProviderFactory: DeclarationProviderFactory, bindingTrace: BindingTrace, platform: TargetPlatform, - targetPlatformVersion: TargetPlatformVersion, compilerServices: PlatformDependentCompilerServices, targetEnvironment: TargetEnvironment, languageVersionSettings: LanguageVersionSettings ): StorageComponentContainer = createContainer("LazyResolve", compilerServices) { - configureModule(moduleContext, platform, targetPlatformVersion, compilerServices, bindingTrace) + configureModule(moduleContext, platform, compilerServices, bindingTrace) useInstance(declarationProviderFactory) useInstance(languageVersionSettings) @@ -192,13 +187,13 @@ fun createContainerForLazyResolve( useImpl() } +// TODO: remove it fun createLazyResolveSession(moduleContext: ModuleContext, files: Collection): ResolveSession = createContainerForLazyResolve( moduleContext, FileBasedDeclarationProviderFactory(moduleContext.storageManager, files), BindingTraceContext(), - CommonPlatform, - TargetPlatformVersion.NoVersion, + DefaultBuiltInPlatforms.commonPlatform, CommonPlatformCompilerServices, CompilerEnvironment, LanguageVersionSettingsImpl.DEFAULT diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverloadResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverloadResolver.kt index 672bdbe6430..feddac38ed8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverloadResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverloadResolver.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.descriptorUtil.platform import org.jetbrains.kotlin.resolve.scopes.MemberScope import java.util.* @@ -290,7 +291,7 @@ class OverloadResolver( if (member1 !is MemberDescriptor || member2 !is MemberDescriptor) return false return member1.isActual && member2.isActual && - member1.getMultiTargetPlatform() != member2.getMultiTargetPlatform() + member1.platform != member2.platform } private fun reportRedeclarations(redeclarations: Collection) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/OptionalExpectationUsageChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/OptionalExpectationUsageChecker.kt index c826aa3463e..dbba43206e8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/OptionalExpectationUsageChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/OptionalExpectationUsageChecker.kt @@ -9,9 +9,8 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.MultiTargetPlatform -import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform +import org.jetbrains.kotlin.resolve.descriptorUtil.platform +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource class OptionalExpectationUsageChecker : ClassifierUsageChecker { @@ -23,8 +22,9 @@ class OptionalExpectationUsageChecker : ClassifierUsageChecker { } val ktFile = element.containingFile as KtFile + // TODO(dsavvinov): unify for compiler/IDE // The first part is for the compiler, and the second one is for IDE - if (ktFile.isCommonSource != true && targetDescriptor.module.getMultiTargetPlatform() != MultiTargetPlatform.Common) { + if (ktFile.isCommonSource != true && !targetDescriptor.platform.isCommon()) { context.trace.report(Errors.OPTIONAL_DECLARATION_USAGE_IN_NON_COMMON_SOURCE.on(element)) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index 4384585b49f..6889f717a52 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -18,8 +18,8 @@ package org.jetbrains.kotlin.types.expressions import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.context.withModule @@ -64,7 +64,6 @@ class LocalClassifierAnalyzer( private val compilerServices: PlatformDependentCompilerServices, private val lookupTracker: LookupTracker, private val supertypeLoopChecker: SupertypeLoopChecker, - private val targetPlatformVersion: TargetPlatformVersion, private val languageVersionSettings: LanguageVersionSettings, private val delegationFilter: DelegationFilter, private val wrappedTypeFactory: WrappedTypeFactory, @@ -84,7 +83,6 @@ class LocalClassifierAnalyzer( context.trace, platform, lookupTracker, - targetPlatformVersion, languageVersionSettings, context.statementFilter, LocalClassDescriptorHolder( diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt index fddddb7c790..26b8a3f3719 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt @@ -39,6 +39,11 @@ import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames +import org.jetbrains.kotlin.platform.CommonPlatforms +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall @@ -166,13 +171,13 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { val actualText = StringBuilder() for (testFile in files) { val module = testFile.module - val isCommonModule = modules[module]!!.getMultiTargetPlatform() == MultiTargetPlatform.Common + val isCommonModule = modules[module]!!.platform.isCommon() val implementingModules = if (!isCommonModule) emptyList() else modules.entries.filter { (testModule) -> module in testModule?.getDependencies().orEmpty() } val implementingModulesBindings = implementingModules.mapNotNull { (testModule, moduleDescriptor) -> - val platform = moduleDescriptor.getCapability(MultiTargetPlatform.CAPABILITY) - if (platform is MultiTargetPlatform.Specific) platform to moduleBindings[testModule]!! + val platform = moduleDescriptor.platform + if (platform != null && !platform.isCommon()) platform to moduleBindings[testModule]!! else null } val moduleDescriptor = modules[module]!! @@ -356,12 +361,11 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { val moduleDescriptor = moduleContext.module as ModuleDescriptorImpl - val platform = moduleDescriptor.getMultiTargetPlatform() - if (platform == MultiTargetPlatform.Common) { + val platform = moduleDescriptor.platform + if (platform.isCommon()) { return CommonResolverForModuleFactory.analyzeFiles( files, moduleDescriptor.name, true, languageVersionSettings, mapOf( - MultiTargetPlatform.CAPABILITY to MultiTargetPlatform.Common, MODULE_FILES to files ) ) { _ -> @@ -377,6 +381,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { val moduleClassResolver = SingleModuleClassResolver() val container = createContainerForTopDownAnalyzerForJvm( + JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), // TODO(dsavvinov): do not pass JvmTarget around moduleContext, moduleTrace, FileBasedDeclarationProviderFactory(moduleContext.storageManager, files), @@ -386,7 +391,6 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { environment.createPackagePartProvider(moduleContentScope), moduleClassResolver, CompilerEnvironment, - jvmTarget, languageVersionSettings ) @@ -417,7 +421,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { // E.g. "... val result = ArrayList(0) for (dependency in dependencies) { - if (dependency.getCapability(MultiTargetPlatform.CAPABILITY) == MultiTargetPlatform.Common) { + if (dependency.platform.isCommon()) { val files = dependency.getCapability(MODULE_FILES) ?: error("MODULE_FILES should have been set for the common module: $dependency") result.addAll(files) @@ -585,10 +589,16 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { emptyList() protected open fun createModule(moduleName: String, storageManager: StorageManager): ModuleDescriptorImpl { - val nameSuffix = moduleName.substringAfterLast("-", "") + val nameSuffix = moduleName.substringAfterLast("-", "").toUpperCase() val platform = - if (nameSuffix.isEmpty()) null - else if (nameSuffix == "common") MultiTargetPlatform.Common else MultiTargetPlatform.Specific(nameSuffix.toUpperCase()) + when { + nameSuffix.isEmpty() -> null // TODO(dsavvinov): this leads to 'null'-platform in ModuleDescriptor + nameSuffix == "COMMON" -> CommonPlatforms.defaultCommonPlatform + nameSuffix == "JVM" -> JvmPlatforms.defaultJvmPlatform // TODO(dsavvinov): determine JvmTarget precisely + nameSuffix == "JS" -> JsPlatforms.defaultJsPlatform + nameSuffix == "NATIVE" -> KonanPlatforms.defaultKonanPlatform + else -> throw IllegalStateException("Can't determine platform by name $nameSuffix") + } val builtIns = JvmBuiltIns(storageManager, JvmBuiltIns.Kind.FROM_CLASS_LOADER) return ModuleDescriptorImpl(Name.special("<$moduleName>"), storageManager, builtIns, platform) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index d2aa214ea5f..16414726051 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -45,7 +45,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.MultiTargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.utils.addIfNotNull @@ -223,7 +223,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava>, + implementingModulesBindings: List>, actualText: StringBuilder, skipJvmSignatureDiagnostics: Boolean, languageVersionSettings: LanguageVersionSettings, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt index 4906f464753..f3367121ded 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestModuleInfo.kt @@ -7,15 +7,15 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices class FirTestModuleInfo( override val name: Name = Name.identifier("TestModule"), val dependencies: MutableList = mutableListOf(), - override val platform: TargetPlatform = JvmPlatform, + override val platform: TargetPlatform = JvmPlatforms.defaultJvmPlatform, override val compilerServices: PlatformDependentCompilerServices = JvmPlatformCompilerServices ) : ModuleInfo { override fun dependencies(): List = dependencies diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt index 17f619cc353..82d239d4660 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt @@ -22,17 +22,17 @@ import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider import org.jetbrains.kotlin.analyzer.ModuleContent import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl -import org.jetbrains.kotlin.analyzer.common.CommonPlatform -import org.jetbrains.kotlin.analyzer.common.CommonPlatformCompilerServices import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModuleFactory import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices fun createResolveSessionForFiles( project: Project, @@ -67,8 +67,8 @@ private class TestModule(val dependsOnBuiltIns: Boolean) : ModuleInfo { ModuleInfo.DependencyOnBuiltIns.NONE override val platform: TargetPlatform - get() = CommonPlatform + get() = JvmPlatforms.defaultJvmPlatform override val compilerServices: PlatformDependentCompilerServices? - get() = CommonPlatformCompilerServices + get() = JvmPlatformCompilerServices } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java b/compiler/tests-common/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java index 0ac88a6ed84..e21caf29191 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorComparator.java @@ -28,10 +28,10 @@ import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.SubpackagesScope; import org.jetbrains.kotlin.jvm.compiler.ExpectedLoadErrorsUtil; import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.platform.TargetPlatformKt; import org.jetbrains.kotlin.renderer.*; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.MemberComparator; -import org.jetbrains.kotlin.resolve.MultiTargetPlatform; import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope; import org.jetbrains.kotlin.resolve.scopes.MemberScope; import org.jetbrains.kotlin.test.KotlinTestUtils; @@ -243,7 +243,7 @@ public class RecursiveDescriptorComparator { // 'expected' declarations do not belong to the platform-specific module, even though they participate in the analysis if (descriptor instanceof MemberDescriptor && ((MemberDescriptor) descriptor).isExpect() && - module.getCapability(MultiTargetPlatform.CAPABILITY) != MultiTargetPlatform.Common.INSTANCE) return false; + !TargetPlatformKt.isCommon(module.getPlatform())) return false; return module.equals(DescriptorUtils.getContainingModule(descriptor)); } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt index d93fb76220b..aa2d2c9feb7 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/tests/di/injection.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.tests.di import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.getValue @@ -26,9 +25,9 @@ import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.frontend.di.configureModule +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices import org.jetbrains.kotlin.types.SubstitutingScopeProviderImpl import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices @@ -36,7 +35,8 @@ import org.jetbrains.kotlin.types.expressions.FakeCallResolver fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests { return ContainerForTests(createContainer("Tests", JvmPlatformCompilerServices) { - configureModule(ModuleContext(module, project), JvmPlatform, JvmTarget.DEFAULT, JvmPlatformCompilerServices) + configureModule(ModuleContext(module, project), + JvmPlatforms.defaultJvmPlatform, JvmPlatformCompilerServices) useInstance(LanguageVersionSettingsImpl.DEFAULT) useImpl() useImpl() diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 0a0dd624b4d..f97551e6f58 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -35,13 +35,13 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModuleFactory import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.KotlinTestUtils @@ -62,7 +62,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { override val name = Name.special("<$_name>") override val platform: TargetPlatform - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform override val compilerServices: PlatformDependentCompilerServices? get() = JvmPlatformCompilerServices diff --git a/compiler/util/src/org/jetbrains/kotlin/config/TargetPlatformVersion.kt b/compiler/util/src/org/jetbrains/kotlin/config/TargetPlatformVersion.kt deleted file mode 100644 index 594342206b0..00000000000 --- a/compiler/util/src/org/jetbrains/kotlin/config/TargetPlatformVersion.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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. - * 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.config - -import org.jetbrains.kotlin.utils.DescriptionAware - -interface TargetPlatformVersion : DescriptionAware { - object NoVersion : TargetPlatformVersion { - override val description = "" - } -} diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt index 99315fc8da1..5df8bf5c95f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.descriptors import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform interface ModuleDescriptor : DeclarationDescriptor { override fun getContainingDeclaration(): DeclarationDescriptor? = null @@ -30,6 +31,10 @@ interface ModuleDescriptor : DeclarationDescriptor { */ val stableName: Name? + // NB: this field should actually be non-null, but making it so implies a LOT of work, so we postpone it for a moment + // TODO: make it non-null + val platform: TargetPlatform? + fun shouldSeeInternalsOf(targetModule: ModuleDescriptor): Boolean override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { 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 ab058d229b9..e029e3a4c36 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.descriptors.PackageViewDescriptor 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.platform.TargetPlatform import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.utils.sure import java.lang.IllegalArgumentException @@ -34,8 +34,8 @@ class ModuleDescriptorImpl @JvmOverloads constructor( private val storageManager: StorageManager, override val builtIns: KotlinBuiltIns, // May be null in compiler context, should be not-null in IDE context - multiTargetPlatform: MultiTargetPlatform? = null, - capabilities: Map, Any?> = emptyMap(), + override val platform: TargetPlatform? = null, + private val capabilities: Map, Any?> = emptyMap(), override val stableName: Name? = null ) : DeclarationDescriptorImpl(Annotations.EMPTY, moduleName), ModuleDescriptor { init { @@ -44,8 +44,6 @@ 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 diff --git a/core/descriptors/src/org/jetbrains/kotlin/platform/TargetPlatform.kt b/core/descriptors/src/org/jetbrains/kotlin/platform/TargetPlatform.kt new file mode 100644 index 00000000000..100b46910d3 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/platform/TargetPlatform.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.platform + +/** + * Core abstraction of Platform API, represents a collection of platforms. + * + * This is the primarily abstraction intended to use in the most part of API, as, usually, + * pretty much anything that may have a platform, may have a several platforms as well in the + * context of multiplatform projects. + * + * Please, use it over the [SimplePlatform] unless you're absolutely sure what you're doing. + * + * NB. Even in cases, where some part of logic makes sense only for a particular platform (e.g., JVM), + * it still can be applicable for [TargetPlatform]s with [componentPlatforms] > 1, e.g. when it consists + * of two version of JDK, JDK and Android, several versions of Android API, etc. + */ +data class TargetPlatform(val componentPlatforms: Set) : Collection by componentPlatforms { + init { + if (componentPlatforms.isEmpty()) throw IllegalArgumentException("Don't instantiate TargetPlatform with empty set of platforms") + } + + override fun toString(): String = presentableDescription +} + +/** + * Core abstraction of Platform API, represents exactly one platform. + * + * API guarantees: + * + * - direct inheritors are well-known and represent three major platforms supported at the moment (JVM, JS, Native) + * + * - exact enumeration of all inheritors isn't available at the compile time, see [CommonPlatforms] + * + * - each implementation should support equality in a broad sense of "absolutely the same platform" + * + * - it is _prohibited_ to create instances of [SimplePlatform] in the client's code, use respective factory instance (e.g., [JvmPlatforms]) + * to get instances of platforms + * + * Ideally, each specific subtype should be either a data class or singleton. + */ +abstract class SimplePlatform(val platformName: String) { + override fun toString(): String = platformName + + /** See KDoc for [TargetPlatform.oldFashionedDescription] */ + abstract val oldFashionedDescription: String + + // FIXME(dsavvinov): hack to allow injection inject JvmTarget into container. + // Proper fix would be to rewrite clients to get JdkPlatform from container, and pull JvmTarget from it + // (this will also remove need in TargetPlatformVersion as the whole, and, in particular, ugly passing + // of TargetPlatformVersion.NoVersion in non-JVM code) + open val targetPlatformVersion: TargetPlatformVersion = TargetPlatformVersion.NoVersion +} + +interface TargetPlatformVersion { + val description: String + + object NoVersion : TargetPlatformVersion { + override val description = "" + } +} + +fun TargetPlatform?.isCommon(): Boolean = this != null && this.size > 1 + +fun SimplePlatform.toTargetPlatform(): TargetPlatform = TargetPlatform(setOf(this)) \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/platform/platformUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/platform/platformUtil.kt new file mode 100644 index 00000000000..a95c6511e91 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/platform/platformUtil.kt @@ -0,0 +1,38 @@ +/* + * 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.platform + +inline fun TargetPlatform.subplatformOfType(): T? = componentPlatforms.filterIsInstance().singleOrNull() +fun TargetPlatform.subplatformOfType(klass: Class): T? = componentPlatforms.filterIsInstance(klass).singleOrNull() + +inline fun TargetPlatform?.has(): Boolean = this != null && subplatformOfType() != null +fun TargetPlatform?.has(klass: Class): Boolean = this != null && subplatformOfType(klass) != null + + +/** + * Returns human-readable description, mapping multiplatform to 'Common (experimental)', + * as well as maintaining some quirks of the previous representation, like trailing whitespaces + * + * It is needed mainly for backwards compatibility, because some subsystem actually + * managed to rely on the format of that string. In particular, 'facetSerialization.kt' uses + * those string as keys in serialized `.iml`-file, and changing format of that string (including + * trimming pointless whitespaces) leads to incorrectly deserialized facets. + * + * New clients are encouraged to use [presentableDescription] description instead, as it + * also provides better description for multiplatforms. + */ +val TargetPlatform.oldFashionedDescription: String + get() = if (this.isCommon()) "Common (experimental) " else this.single().oldFashionedDescription + + +/** + * Renders multiplatform in form + * '$PLATFORM_1 / $PLATFORM_2 / ...' + * e.g. + * 'JVM (1.8) / JS / Native' + */ +val TargetPlatform.presentableDescription: String + get() = componentPlatforms.joinToString(separator = "/") \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index 7329f18e347..5653101f183 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils.getContainingClass +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.constants.ConstantValue import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -57,6 +58,9 @@ val DeclarationDescriptor.isExtension: Boolean val DeclarationDescriptor.module: ModuleDescriptor get() = DescriptorUtils.getContainingModule(this) +val DeclarationDescriptor.platform: TargetPlatform? + get() = module.platform + fun ModuleDescriptor.resolveTopLevelClass(topLevelClassFqName: FqName, location: LookupLocation): ClassDescriptor? { assert(!topLevelClassFqName.isRoot) return getPackage(topLevelClassFqName.parent()).memberScope.getContributedClassifier( diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt deleted file mode 100644 index 7ba393edc74..00000000000 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/MultiTargetPlatform.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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. - * 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 - -import org.jetbrains.kotlin.descriptors.MemberDescriptor -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.resolve.descriptorUtil.module - -sealed class MultiTargetPlatform : Comparable { - object Common : MultiTargetPlatform() { - override fun compareTo(other: MultiTargetPlatform): Int = - if (other is Common) 0 else -1 - } - - data class Specific(val platform: String) : MultiTargetPlatform() { - override fun compareTo(other: MultiTargetPlatform): Int = - when (other) { - is Common -> 1 - is Specific -> platform.compareTo(other.platform) - } - } - - companion object { - @JvmField - val CAPABILITY = ModuleDescriptor.Capability("MULTI_TARGET_PLATFORM") - } -} - -fun ModuleDescriptor.getMultiTargetPlatform(): MultiTargetPlatform? = - module.getCapability(MultiTargetPlatform.CAPABILITY) - -fun MemberDescriptor.getMultiTargetPlatform(): String? = - (module.getMultiTargetPlatform() as? MultiTargetPlatform.Specific)?.platform diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index 61eddcc83b7..c2c2183a869 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.kotlin.incremental.components.LookupLocation; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; +import org.jetbrains.kotlin.platform.TargetPlatform; import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter; import org.jetbrains.kotlin.resolve.scopes.MemberScope; @@ -80,6 +81,12 @@ public class ErrorUtils { return Name.special(""); } + @Nullable + @Override + public TargetPlatform getPlatform() { + return null; + } + @NotNull @Override public PackageViewDescriptor getPackage(@NotNull FqName fqName) { diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt index adbd7e2414d..cc3d957f678 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/KotlinCacheService.kt @@ -22,7 +22,7 @@ import com.intellij.psi.PsiFile import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache interface KotlinCacheService { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt index 6e640ab57a1..cf2817c63f6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.resolve.* @@ -63,7 +64,6 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.util.CallMaker import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil @@ -306,10 +306,10 @@ internal object IDELightClassContexts { val moduleInfo = files.first().getModuleInfo() val container = createContainer("LightClassStub", JvmPlatformCompilerServices) { - val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project) as? JvmTarget + val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project) as? JvmTarget ?: JvmTarget.DEFAULT configureModule( - ModuleContext(moduleDescriptor, project), JvmPlatform, - jvmTarget ?: JvmTarget.DEFAULT, JvmPlatformCompilerServices, trace + ModuleContext(moduleDescriptor, project), JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), + JvmPlatformCompilerServices, trace ) useInstance(GlobalSearchScope.EMPTY_SCOPE) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index 3abe0eab6e6..a2286238b5e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -45,8 +45,7 @@ import org.jetbrains.kotlin.idea.util.rootManager import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.utils.addIfNotNull import java.util.* diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt index 9c91616e450..5912718b2fa 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/LibraryDependenciesCache.kt @@ -17,11 +17,11 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.util.containers.ContainerUtil import com.intellij.util.containers.MultiMap -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.idea.core.util.CachedValue import org.jetbrains.kotlin.idea.core.util.getValue import org.jetbrains.kotlin.idea.framework.getLibraryPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.utils.addIfNotNull import java.util.* @@ -92,7 +92,7 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend * @return true if it's OK to add a dependency from a library with platform [from] to a library with platform [to] */ private fun compatiblePlatforms(from: TargetPlatform, to: TargetPlatform): Boolean { - return from == to || to is CommonPlatform + return from == to || to.isCommon() } private fun getLibraryUsageIndex(): LibraryUsageIndex { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt index b4a4487a441..f139aefcb41 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform data class ScriptModuleInfo( val project: Project, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt index bb1a7284a91..e3a738269f3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt @@ -15,8 +15,8 @@ import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.psi.util.CachedValueProvider -import org.jetbrains.kotlin.analyzer.common.CommonPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon import java.util.concurrent.ConcurrentHashMap fun getModuleInfosFromIdeaModel(project: Project, platform: TargetPlatform): List { @@ -70,7 +70,7 @@ private fun mergePlatformModules( allModules: List, platform: TargetPlatform ): List { - if (platform is CommonPlatform) return allModules + if (platform.isCommon()) return allModules val platformModules = allModules.flatMap { module -> diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt index 20715700a4e..0af8fb08770 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt @@ -14,7 +14,6 @@ import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.psi.PsiElement import com.intellij.psi.util.CachedValueProvider import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION @@ -26,7 +25,8 @@ import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.rootManager import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon val Module.isNewMPPModule: Boolean get() = facetSettings?.kind?.isNewMPP ?: false @@ -119,15 +119,16 @@ private fun ModuleSourceInfo.toDescriptor() = KotlinCacheService.getInstance(mod .getResolutionFacadeByModuleInfo(this, platform)?.moduleDescriptor fun PsiElement.getPlatformModuleInfo(desiredPlatform: TargetPlatform): PlatformModuleInfo? { - assert(desiredPlatform !is CommonPlatform) { "Platform module cannot have Common platform" } + assert(!desiredPlatform.isCommon()) { "Platform module cannot have Common platform" } val moduleInfo = getNullableModuleInfo() as? ModuleSourceInfo ?: return null - return when (moduleInfo.platform) { - is CommonPlatform -> { + val platform = moduleInfo.platform + return when { + platform.isCommon() -> { val correspondingImplementingModule = moduleInfo.module.implementingModules.map { it.toInfo(moduleInfo.sourceType) } .firstOrNull { it?.platform == desiredPlatform } ?: return null PlatformModuleInfo(correspondingImplementingModule, correspondingImplementingModule.expectedBy) } - desiredPlatform -> { + platform == desiredPlatform -> { val expectedBy = moduleInfo.expectedBy.takeIf { it.isNotEmpty() } ?: return null PlatformModuleInfo(moduleInfo, expectedBy) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDEKotlinAsJavaSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDEKotlinAsJavaSupport.kt index 8f2f978b6da..7213311012e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDEKotlinAsJavaSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDEKotlinAsJavaSupport.kt @@ -29,7 +29,8 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.utils.sure import java.util.* @@ -240,7 +241,7 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport // thus we need to ensure that resolver will be built by the file from platform part of the module // (resolver built by a file from the common part will have no knowledge of the platform part) // the actual of order of files that resolver receives is controlled by *findFilesForFacade* method - private fun Collection.platformSourcesFirst() = sortedByDescending { it.platform == JvmPlatform } + private fun Collection.platformSourcesFirst() = sortedByDescending { it.platform.isJvm() } private fun getLightClassForDecompiledClassOrObject(decompiledClassOrObject: KtClassOrObject): KtLightClassForDecompiledDeclaration? { if (decompiledClassOrObject is KtEnumEntry) { @@ -331,5 +332,5 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport } internal fun PsiElement.getModuleInfoPreferringJvmPlatform(): IdeaModuleInfo { - return getPlatformModuleInfo(JvmPlatform) ?: getModuleInfo() + return getPlatformModuleInfo(JvmPlatforms.defaultJvmPlatform) ?: getModuleInfo() } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index e921a41302c..ba0003c4631 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -54,7 +54,7 @@ import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt index b14d14f2c90..cf022c9fc74 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFileClassProvider import org.jetbrains.kotlin.psi.analysisContext -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) : KtFileClassProvider { @@ -40,7 +40,7 @@ class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) : // common files might be in fact compiled to jvm and thus correspond to a PsiClass // this API does not provide context (like GSS) to be able to determine if this file is in fact seen through a jvm module // this also fixes a problem where a Java JUnit run configuration producer would produce run configurations for a common file - if (moduleInfo.platform !is JvmPlatform) return emptyArray() + if (!moduleInfo.platform.isJvm()) return emptyArray() val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file) val fileClassFqName = file.javaFileFacadeFqName diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt index 876b4a3514c..0aa52aa3c92 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt @@ -23,7 +23,6 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.GlobalContext @@ -33,14 +32,12 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve import org.jetbrains.kotlin.idea.caches.project.getModuleInfo -import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.findCompilerServices import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.ResolveSession import java.util.* @@ -190,10 +187,8 @@ private object KotlinResolveDataProvider { val moduleInfo = analyzableElement.containingKtFile.getModuleInfo() + // TODO: should return proper platform! val targetPlatform = moduleInfo.platform ?: TargetPlatformDetector.getPlatform(analyzableElement.containingKtFile) - val targetPlatformVersion = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project).let { - if (targetPlatform == JvmPlatform && it !is JvmTarget) JvmTarget.DEFAULT else it - } val lazyTopDownAnalyzer = createContainerForLazyBodyResolve( //TODO: should get ModuleContext @@ -202,7 +197,6 @@ private object KotlinResolveDataProvider { trace, targetPlatform, bodyResolveCache, - targetPlatformVersion, targetPlatform.findCompilerServices, analyzableElement.languageVersionSettings ).get() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt index a7876dad966..034167e5823 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt @@ -25,7 +25,6 @@ import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.containers.SLRUCache import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.analyzer.common.CommonAnalysisParameters -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.caches.resolve.resolution @@ -41,11 +40,13 @@ import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl import org.jetbrains.kotlin.platform.idePlatformKind +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.CompositeBindingContext import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult internal class ProjectResolutionFacade( @@ -125,7 +126,7 @@ internal class ProjectResolutionFacade( packagePartProviderFactory = { IDEPackagePartProvider(it.moduleContentScope) }, moduleByJavaClass = { javaClass: JavaClass -> val psiClass = (javaClass as JavaClassImpl).psi - psiClass.getPlatformModuleInfo(JvmPlatform)?.platformModule ?: psiClass.getNullableModuleInfo() + psiClass.getPlatformModuleInfo(JvmPlatforms.defaultJvmPlatform)?.platformModule ?: psiClass.getNullableModuleInfo() } ) @@ -144,9 +145,9 @@ internal class ProjectResolutionFacade( platform.idePlatformKind.resolution.resolverForModuleFactory }, platformParameters = { platform -> - when (platform) { - is JvmPlatform -> jvmPlatformParameters - is CommonPlatform -> commonPlatformParameters + when { + platform.isJvm() -> jvmPlatformParameters + platform.isCommon() -> commonPlatformParameters else -> PlatformAnalysisParameters.Empty } }, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeWithDebugInfo.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeWithDebugInfo.kt index 31c32a464e7..92e3845f3b8 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeWithDebugInfo.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionFacadeWithDebugInfo.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/packageOracles.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/packageOracles.kt index 1bbc6a4bc8e..caa62727124 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/packageOracles.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/packageOracles.kt @@ -28,14 +28,14 @@ import org.jetbrains.kotlin.idea.caches.project.projectSourceModules import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm class IdePackageOracleFactory(val project: Project) : PackageOracleFactory { override fun createOracle(moduleInfo: ModuleInfo): PackageOracle { if (moduleInfo !is IdeaModuleInfo) return PackageOracle.Optimistic - return when (moduleInfo.platform) { - JvmPlatform -> when (moduleInfo.moduleOrigin) { + return when { + moduleInfo.platform.isJvm() -> when (moduleInfo.moduleOrigin) { ModuleOrigin.LIBRARY -> JavaPackagesOracle(moduleInfo, project) ModuleOrigin.MODULE -> JvmSourceOracle(moduleInfo, project) ModuleOrigin.OTHER -> PackageOracle.Optimistic diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt index 27b2daee012..0f2520a823d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/JavaResolveExtension.kt @@ -34,8 +34,8 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.psiUtil.parameterIndex +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.scopes.MemberScope fun PsiMethod.getJavaMethodDescriptor(): FunctionDescriptor? = javaResolutionFacade()?.let { getJavaMethodDescriptor(it) } @@ -154,7 +154,7 @@ fun PsiElement.hasJavaResolutionFacade(): Boolean = this.originalElement.contain fun PsiElement.javaResolutionFacade() = KotlinCacheService.getInstance(project).getResolutionFacadeByFile( this.originalElement.containingFile ?: reportCouldNotCreateJavaFacade(), - JvmPlatform + JvmPlatforms.defaultJvmPlatform ) private fun PsiElement.reportCouldNotCreateJavaFacade(): Nothing = diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt index d40ec104860..7870b826e52 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.idea.caches.project.* import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings @@ -72,6 +72,7 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider { return result } + // TODO(dsavvinov): get rid of this method; instead store proper instance of TargetPlatformVersion in platform-instance override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = when (moduleInfo) { is ModuleSourceInfo -> moduleInfo.module.platform?.version ?: TargetPlatformVersion.NoVersion diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt index 3c3f75ed50e..12f82d4f088 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.decompiler.builtIns import com.intellij.ide.highlighter.JavaClassFileType import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.idea.decompiler.common.FileWithMetadata import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDecompiler import org.jetbrains.kotlin.metadata.ProtoBuf diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt index 91af3586794..d9730716947 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt @@ -35,8 +35,6 @@ import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.serialization.deserialization.ClassData import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt index a78cdb5da49..641205ba27c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.metadata.deserialization.NameResolver import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt index 5d8fc0b7e11..af97f18216b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.decompiler.js import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.idea.decompiler.common.FileWithMetadata import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDecompiler -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.psi.stubs.KotlinStubVersions diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt index a142bf5e500..f5cc71c17d7 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt @@ -18,7 +18,6 @@ import com.intellij.psi.stubs.StringStubIndexExtension import com.intellij.util.containers.ContainerUtil import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo import org.jetbrains.kotlin.idea.caches.project.getBinaryLibrariesModuleInfos @@ -35,6 +34,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.debugText.getDebugText +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult object SourceNavigationHelper { @@ -75,10 +75,10 @@ object SourceNavigationHelper { private fun BinaryModuleInfo.associatedCommonLibraries(): List { val platform = platform - if (platform == null || platform is CommonPlatform) return emptyList() + if (platform == null || platform.isCommon()) return emptyList() return dependencies().filterIsInstance().filter { - it.platform is CommonPlatform + it.platform.isCommon() } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt index b696fb75b2a..7534cfff79d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents import org.jetbrains.kotlin.serialization.deserialization.LocalClassifierTypeSettings import org.jetbrains.kotlin.storage.LockBasedStorageManager diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt index 8674f87ea29..2eed2728606 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt @@ -24,15 +24,14 @@ import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.util.io.JarUtil import com.intellij.openapi.vfs.* -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution import org.jetbrains.kotlin.caches.resolve.resolution import org.jetbrains.kotlin.idea.vfilefinder.KnownLibraryKindForIndex import org.jetbrains.kotlin.idea.vfilefinder.getLibraryKindForJar -import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.utils.PathUtil import java.util.jar.Attributes import java.util.regex.Pattern @@ -43,14 +42,14 @@ interface KotlinLibraryKind { object JSLibraryKind : PersistentLibraryKind("kotlin.js"), KotlinLibraryKind { override val compilerPlatform: TargetPlatform - get() = JsPlatform + get() = JsPlatforms.defaultJsPlatform override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! } object CommonLibraryKind : PersistentLibraryKind("kotlin.common"), KotlinLibraryKind { override val compilerPlatform: TargetPlatform - get() = CommonPlatform + get() = CommonPlatforms.defaultCommonPlatform override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.kt index d692a664fd1..56818c1b443 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/DuplicateJvmSignatureAnnotator.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm class DuplicateJvmSignatureAnnotator : Annotator { override fun annotate(element: PsiElement, holder: AnnotationHolder) { @@ -34,7 +34,7 @@ class DuplicateJvmSignatureAnnotator : Annotator { if (!ProjectRootsUtil.isInProjectSource(element)) return val file = element.containingFile - if (file !is KtFile || TargetPlatformDetector.getPlatform(file) !== JvmPlatform) return + if (file !is KtFile || !TargetPlatformDetector.getPlatform(file).isJvm()) return val otherDiagnostics = when (element) { is KtDeclaration -> element.analyzeWithContent() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt index d396015956c..a5b9fdefffe 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt @@ -49,7 +49,8 @@ import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.UserDataProperty -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.config.JvmTarget +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.utils.Jsr305State import java.io.File @@ -212,6 +213,7 @@ private fun Module.computeLanguageVersionSettings(): LanguageVersionSettings { val Module.platform: IdePlatform<*, *>? get() = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).platform ?: project.platform +// FIXME(dsavvinov): this logic is clearly wrong in MPP environment; review and fix val Project.platform: IdePlatform<*, *>? get() { val jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(this).settings.jvmTarget ?: return null @@ -265,12 +267,4 @@ val PsiElement.languageVersionSettings: LanguageVersionSettings return LanguageVersionSettingsImpl.DEFAULT } return IDELanguageSettingsProvider.getLanguageVersionSettings(this.getModuleInfo(), project) - } - -val KtElement.jvmTarget: JvmTarget - get() { - if (ServiceManager.getService(project, ProjectFileIndex::class.java) == null) { - return JvmTarget.DEFAULT - } - return IDELanguageSettingsProvider.getTargetPlatform(this.getModuleInfo(), project) as? JvmTarget ?: JvmTarget.DEFAULT - } + } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java index 3dc23c2068d..850d80ac068 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java @@ -25,7 +25,7 @@ import com.intellij.psi.util.CachedValuesManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.platform.IdePlatform; import org.jetbrains.kotlin.platform.IdePlatformKindUtil; -import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; public class ProjectStructureUtil { private static final Key> PLATFORM_FOR_MODULE = Key.create("PLATFORM_FOR_MODULE"); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt index 6425be50ed6..64eda14d978 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt @@ -22,6 +22,7 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.containers.ContainerUtil +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.cfg.ControlFlowInformationProvider import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.SimpleGlobalContext @@ -717,7 +718,6 @@ class ResolveElementCache( trace, targetPlatform, statementFilter, - file.jvmTarget, targetPlatform.findCompilerServices, file.languageVersionSettings ).get() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java index 5e2b32bfd80..5c8242466c5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java @@ -22,15 +22,17 @@ import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider; import org.jetbrains.kotlin.platform.IdePlatform; import org.jetbrains.kotlin.platform.IdePlatformKind; +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms; import org.jetbrains.kotlin.psi.KtCodeFragment; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.psi.KtPsiFactoryKt; -import org.jetbrains.kotlin.resolve.TargetPlatform; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.SimplePlatform; import org.jetbrains.kotlin.scripting.definitions.DefinitionsKt; import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition; @@ -56,7 +58,8 @@ public class TargetPlatformDetector { PsiElement context = KtPsiFactoryKt.getAnalysisContext(file); if (context != null) { PsiFile contextFile = context.getContainingFile(); - return contextFile instanceof KtFile ? getPlatform((KtFile) contextFile) : JvmPlatform.INSTANCE; + // TODO(dsavvinov): Get default platform with proper target + return contextFile instanceof KtFile ? getPlatform((KtFile) contextFile) : JvmPlatforms.INSTANCE.getDefaultJvmPlatform(); } if (file.isScript()) { @@ -65,7 +68,9 @@ public class TargetPlatformDetector { String platformNameFromScriptDefinition = scriptDefinition.getPlatform(); for (IdePlatform platform : IdePlatformKind.Companion.getAll_PLATFORMS()) { TargetPlatform compilerPlatform = platform.getKind().getCompilerPlatform(); - if (compilerPlatform.getPlatformName().equals(platformNameFromScriptDefinition)) { + // FIXME(dsavvinov): get rid of matching by name + SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform); + if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) { return compilerPlatform; } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/compilerServices.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/compilerServices.kt index c9cfc213f3b..de4566a731f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/compilerServices.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/compilerServices.kt @@ -5,24 +5,24 @@ package org.jetbrains.kotlin.idea.project -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.analyzer.common.CommonPlatformCompilerServices -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.js.resolve.JsPlatformCompilerServices -import org.jetbrains.kotlin.resolve.PlatformDependentCompilerServices -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.konan.isNative +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformCompilerServices -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformCompilerServices import java.lang.IllegalStateException val TargetPlatform.findCompilerServices: PlatformDependentCompilerServices get() = - when (this) { - is JvmPlatform -> JvmPlatformCompilerServices - is JsPlatform -> JsPlatformCompilerServices - is KonanPlatform -> NativePlatformCompilerServices - is CommonPlatform -> CommonPlatformCompilerServices + when { + isJvm() -> JvmPlatformCompilerServices + isJs() -> JsPlatformCompilerServices + isNative() -> NativePlatformCompilerServices + isCommon() -> CommonPlatformCompilerServices else -> throw IllegalStateException("Unknown platform $this") } \ No newline at end of file diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.kt index 42e23695d19..92013ea7bf1 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidGradleModuleConfigurator.kt @@ -17,14 +17,14 @@ import org.jetbrains.kotlin.idea.configuration.getBuildSystemType import org.jetbrains.kotlin.idea.util.projectStructure.version import org.jetbrains.kotlin.idea.versions.MAVEN_STDLIB_ID_JDK7 import org.jetbrains.kotlin.idea.versions.hasJreSpecificRuntime -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.TargetPlatform class KotlinAndroidGradleModuleConfigurator internal constructor() : KotlinWithGradleConfigurator() { override val name: String = NAME - override val targetPlatform: TargetPlatform = JvmPlatform + override val targetPlatform: TargetPlatform = JvmPlatforms.defaultJvmPlatform override val presentableText: String = "Android with Gradle" diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt index c53f1d37a37..b81c58ace9f 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered @@ -68,7 +68,7 @@ class AllClassesCompletion(private val parameters: CompletionParameters, .forEach { classifierDescriptorCollector(it) } } - if (TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile) == JvmPlatform) { + if (TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile).isJvm()) { addAdaptedJavaCompletion(javaClassCollector) } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index 7e337211b49..1da913d547c 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -60,7 +60,7 @@ import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.* -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.DescriptorKindExclude import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -270,7 +270,7 @@ class BasicCompletionSession( val packageNames = PackageIndexUtil.getSubPackageFqNames(FqName.ROOT, searchScope, project, prefixMatcher.asNameFilter()) .toMutableSet() - if (TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile) == JvmPlatform) { + if (TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile).isJvm()) { JavaPsiFacade.getInstance(project).findPackage("")?.getSubPackages(searchScope)?.forEach { psiPackage -> val name = psiPackage.name if (Name.isValidIdentifier(name!!)) { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt index ff16e83b727..25d2130c651 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/CompletionSession.kt @@ -28,7 +28,6 @@ import com.intellij.patterns.PatternCondition import com.intellij.patterns.StandardPatterns import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.ProcessingContext -import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.project.ModuleOrigin import org.jetbrains.kotlin.idea.caches.project.OriginCapability @@ -38,15 +37,13 @@ import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.project.TargetPlatformDetector -import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.types.TypeUtils @@ -88,7 +85,7 @@ abstract class CompletionSession( protected val resolutionFacade = file.getResolutionFacade() protected val moduleDescriptor = resolutionFacade.moduleDescriptor protected val project = position.project - protected val isJvmModule = TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile) == JvmPlatform + protected val isJvmModule = TargetPlatformDetector.getPlatform(parameters.originalFile as KtFile).isJvm() protected val isDebuggerContext = file is KtCodeFragment protected val nameExpression: KtSimpleNameExpression? @@ -149,7 +146,7 @@ abstract class CompletionSession( { CompletionBenchmarkSink.instance.onFlush(this) }, prefixMatcher, parameters, resultSet, createSorter(), (file as? KtCodeFragment)?.extraCompletionFilter, - moduleDescriptor.getMultiTargetPlatform() === MultiTargetPlatform.Common + moduleDescriptor.platform.isCommon() ) } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt index 63cc4309353..05e72050d71 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompiledKotlinInJavaCompletionTest.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractCompiledKotlinInJavaCompletionTest : KotlinFixtureCompletionBaseTestCase() { - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun getProjectDescriptor() = SdkAndMockLibraryProjectDescriptor(COMPLETION_TEST_DATA_BASE_PATH + "/injava/mockLib", false) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompletionIncrementalResolveTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompletionIncrementalResolveTest.kt index 9dcc07d319c..8a7e9a79132 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompletionIncrementalResolveTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractCompletionIncrementalResolveTest.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.idea.completion.CompletionBindingContextProvider import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.util.application.executeWriteCommand -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File @@ -82,7 +82,7 @@ abstract class AbstractCompletionIncrementalResolveTest : KotlinLightCodeInsight } testCompletion(FileUtil.loadFile(file, true), - JvmPlatform, + JvmPlatforms.defaultJvmPlatform, { completionType, count -> myFixture.complete(completionType, count) }, additionalValidDirectives = listOf(TYPE_DIRECTIVE_PREFIX, BACKSPACES_DIRECTIVE_PREFIX)) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java index 68cda248c5f..4c82d5f4a12 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJSBasicCompletionTest.java @@ -9,8 +9,8 @@ import com.intellij.codeInsight.completion.CompletionType; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.KotlinStdJSProjectDescriptor; -import org.jetbrains.kotlin.js.resolve.JsPlatform; -import org.jetbrains.kotlin.resolve.TargetPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.js.JsPlatforms; public abstract class AbstractJSBasicCompletionTest extends KotlinFixtureCompletionBaseTestCase { @NotNull @@ -22,7 +22,7 @@ public abstract class AbstractJSBasicCompletionTest extends KotlinFixtureComplet @NotNull @Override public TargetPlatform getPlatform() { - return JsPlatform.INSTANCE; + return JsPlatforms.INSTANCE.getDefaultJsPlatform(); } @NotNull diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java index f4b8372c5be..0c9ee9e4bac 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmBasicCompletionTest.java @@ -9,8 +9,8 @@ import com.intellij.codeInsight.completion.CompletionType; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor; -import org.jetbrains.kotlin.resolve.TargetPlatform; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms; public abstract class AbstractJvmBasicCompletionTest extends KotlinFixtureCompletionBaseTestCase { @NotNull @@ -22,7 +22,7 @@ public abstract class AbstractJvmBasicCompletionTest extends KotlinFixtureComple @NotNull @Override public TargetPlatform getPlatform() { - return JvmPlatform.INSTANCE; + return JvmPlatforms.INSTANCE.getDefaultJvmPlatform(); } @NotNull diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java index 600414372a4..10fb0e9a5b1 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmSmartCompletionTest.java @@ -9,8 +9,8 @@ import com.intellij.codeInsight.completion.CompletionType; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor; -import org.jetbrains.kotlin.resolve.TargetPlatform; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms; public abstract class AbstractJvmSmartCompletionTest extends KotlinFixtureCompletionBaseTestCase { @NotNull @@ -22,7 +22,7 @@ public abstract class AbstractJvmSmartCompletionTest extends KotlinFixtureComple @NotNull @Override public TargetPlatform getPlatform() { - return JvmPlatform.INSTANCE; + return JvmPlatforms.INSTANCE.getDefaultJvmPlatform(); } @NotNull diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt index d60383cd8a3..062b27bd3c8 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractJvmWithLibBasicCompletionTest.kt @@ -9,7 +9,7 @@ import com.intellij.codeInsight.completion.CompletionType import com.intellij.testFramework.LightProjectDescriptor import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractJvmWithLibBasicCompletionTest : KotlinFixtureCompletionBaseTestCase() { private val TEST_PATH = COMPLETION_TEST_DATA_BASE_PATH + "/basic/withLib" @@ -21,6 +21,6 @@ abstract class AbstractJvmWithLibBasicCompletionTest : KotlinFixtureCompletionBa return SdkAndMockLibraryProjectDescriptor(TEST_PATH + "/" + getTestName(false) + "Src", false) } - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun defaultCompletionType() = CompletionType.BASIC } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt index 90340332640..07b57baddae 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKeywordCompletionTest.kt @@ -10,10 +10,10 @@ import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.kotlin.idea.completion.KeywordLookupObject import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinProjectDescriptorWithFacet -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractKeywordCompletionTest : KotlinFixtureCompletionBaseTestCase() { - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun defaultCompletionType() = CompletionType.BASIC diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt index 42bd2edd869..f9131c3e5ae 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinSourceInJavaCompletionTest.kt @@ -7,14 +7,12 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.vfs.VirtualFile import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase -import org.apache.commons.io.FileUtils -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import java.io.File abstract class AbstractKotlinSourceInJavaCompletionTest : KotlinFixtureCompletionBaseTestCase() { - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun doTest(testPath: String) { val mockPath = RELATIVE_COMPLETION_TEST_DATA_BASE_PATH + "/injava/mockLib" diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinStdLibInJavaCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinStdLibInJavaCompletionTest.kt index cf059f042f8..ed836a6ae5d 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinStdLibInJavaCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractKotlinStdLibInJavaCompletionTest.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractKotlinStdLibInJavaCompletionTest : KotlinFixtureCompletionBaseTestCase() { - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE override fun defaultCompletionType() = CompletionType.BASIC } \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt index 6e0b7965319..32cbac30079 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileJvmBasicCompletionTest.kt @@ -7,14 +7,14 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import org.jetbrains.kotlin.idea.test.AstAccessControl -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractMultiFileJvmBasicCompletionTest : KotlinCompletionTestCase() { protected fun doTest(testPath: String) { configureByFile(getTestName(false) + ".kt", "") val shouldFail = testPath.contains("NoSpecifiedType") AstAccessControl.testWithControlledAccessToAst(shouldFail, getFile().getVirtualFile(), getProject(), getTestRootDisposable(), { - testCompletion(file.text, JvmPlatform, { completionType, invocationCount -> + testCompletion(file.text, JvmPlatforms.defaultJvmPlatform, { completionType, invocationCount -> setType(completionType) complete(invocationCount) myItems diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt index 681d314c027..b55f7478cce 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiFileSmartCompletionTest.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.completion.CompletionType import org.jetbrains.kotlin.idea.test.AstAccessControl -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractMultiFileSmartCompletionTest : KotlinCompletionTestCase() { override fun setUp() { @@ -18,7 +18,7 @@ abstract class AbstractMultiFileSmartCompletionTest : KotlinCompletionTestCase() protected fun doTest(testPath: String) { configureByFile(getTestName(false) + ".kt", "") AstAccessControl.testWithControlledAccessToAst(false, getFile().getVirtualFile(), getProject(), getTestRootDisposable(), { - testCompletion(file.text, JvmPlatform, { completionType, invocationCount -> + testCompletion(file.text, JvmPlatforms.defaultJvmPlatform, { completionType, invocationCount -> setType(completionType) complete(invocationCount) myItems diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt index 3bd37ae1f6c..a75c901cc70 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompletionTestUtil.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.completion.test import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.completion.CompletionType import com.intellij.codeInsight.lookup.LookupElement -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.Assert @@ -17,12 +17,12 @@ val RELATIVE_COMPLETION_TEST_DATA_BASE_PATH = "idea/idea-completion/testData" val COMPLETION_TEST_DATA_BASE_PATH = KotlinTestUtils.getHomeDirectory() + "/" + RELATIVE_COMPLETION_TEST_DATA_BASE_PATH fun testCompletion( - fileText: String, - platform: TargetPlatform?, - complete: (CompletionType, Int) -> Array?, - defaultCompletionType: CompletionType = CompletionType.BASIC, - defaultInvocationCount: Int = 0, - additionalValidDirectives: Collection = emptyList() + fileText: String, + platform: TargetPlatform?, + complete: (CompletionType, Int) -> Array?, + defaultCompletionType: CompletionType = CompletionType.BASIC, + defaultInvocationCount: Int = 0, + additionalValidDirectives: Collection = emptyList() ) { testWithAutoCompleteSetting(fileText) { val completionType = ExpectedCompletionUtils.getCompletionType(fileText) ?: defaultCompletionType diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.kt index c91820933a2..7ad3c4a3235 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/ExpectedCompletionUtils.kt @@ -19,9 +19,11 @@ import org.jetbrains.kotlin.idea.completion.LookupElementFactory import org.jetbrains.kotlin.idea.core.completion.DeclarationLookupObject import org.jetbrains.kotlin.idea.test.AstAccessControl import org.jetbrains.kotlin.idea.util.module -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.junit.Assert import java.util.* @@ -87,7 +89,7 @@ object ExpectedCompletionUtils { } } - private val UNSUPPORTED_PLATFORM_MESSAGE = "Only $JvmPlatform and $JsPlatform platforms are supported" + private val UNSUPPORTED_PLATFORM_MESSAGE = "Only ${JvmPlatforms.defaultJvmPlatform} and ${JsPlatforms.defaultJsPlatform} platforms are supported" private val EXIST_LINE_PREFIX = "EXIST:" @@ -135,19 +137,19 @@ object ExpectedCompletionUtils { AstAccessControl.ALLOW_AST_ACCESS_DIRECTIVE) fun itemsShouldExist(fileText: String, platform: TargetPlatform?): Array { - return when (platform) { - is JvmPlatform -> processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX) - JsPlatform -> processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX) - null -> processProposalAssertions(fileText, EXIST_LINE_PREFIX) + return when { + platform.isJvm() -> processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX) + platform.isJs() -> processProposalAssertions(fileText, EXIST_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX) + platform == null -> processProposalAssertions(fileText, EXIST_LINE_PREFIX) else -> throw IllegalArgumentException(UNSUPPORTED_PLATFORM_MESSAGE) } } fun itemsShouldAbsent(fileText: String, platform: TargetPlatform?): Array { - return when (platform) { - is JvmPlatform -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JAVA_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX) - JsPlatform -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JS_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX) - null -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX) + return when { + platform.isJvm() -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JAVA_LINE_PREFIX, EXIST_JS_ONLY_LINE_PREFIX) + platform.isJs() -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX, ABSENT_JS_LINE_PREFIX, EXIST_JAVA_ONLY_LINE_PREFIX) + platform == null -> processProposalAssertions(fileText, ABSENT_LINE_PREFIX) else -> throw IllegalArgumentException(UNSUPPORTED_PLATFORM_MESSAGE) } } @@ -179,10 +181,10 @@ object ExpectedCompletionUtils { } fun getExpectedNumber(fileText: String, platform: TargetPlatform?): Int? { - return when (platform) { - null -> InTextDirectivesUtils.getPrefixedInt(fileText, NUMBER_LINE_PREFIX) - is JvmPlatform -> getPlatformExpectedNumber(fileText, NUMBER_JAVA_LINE_PREFIX) - JsPlatform -> getPlatformExpectedNumber(fileText, NUMBER_JS_LINE_PREFIX) + return when { + platform == null -> InTextDirectivesUtils.getPrefixedInt(fileText, NUMBER_LINE_PREFIX) + platform.isJvm() -> getPlatformExpectedNumber(fileText, NUMBER_JAVA_LINE_PREFIX) + platform.isJs() -> getPlatformExpectedNumber(fileText, NUMBER_JS_LINE_PREFIX) else -> throw IllegalArgumentException(UNSUPPORTED_PLATFORM_MESSAGE) } } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinFixtureCompletionBaseTestCase.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinFixtureCompletionBaseTestCase.kt index 6da6dae208d..0e29f575b6b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinFixtureCompletionBaseTestCase.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinFixtureCompletionBaseTestCase.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.idea.test.CompilerTestDirectives import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.configureCompilerOptions import org.jetbrains.kotlin.idea.test.rollbackCompilerOptions -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import java.io.File abstract class KotlinFixtureCompletionBaseTestCase : KotlinLightCodeInsightFixtureTestCase() { diff --git a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/gradle/KotlinNativeGradleConfigurator.kt b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/gradle/KotlinNativeGradleConfigurator.kt index a64d5bea7ec..4704ecdb54b 100644 --- a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/gradle/KotlinNativeGradleConfigurator.kt +++ b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/gradle/KotlinNativeGradleConfigurator.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.ide.konan.hasKotlinNativeRuntimeInScope import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinStatus import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator import org.jetbrains.kotlin.idea.configuration.ModuleSourceRootGroup -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatforms open class KotlinNativeGradleConfigurator : KotlinWithGradleConfigurator() { override fun getKotlinPluginExpression(forKotlinDsl: Boolean): String = "" @@ -28,7 +28,7 @@ open class KotlinNativeGradleConfigurator : KotlinWithGradleConfigurator() { override val name: String get() = NAME - override val targetPlatform get() = KonanPlatform + override val targetPlatform get() = KonanPlatforms.defaultKonanPlatform override val presentableText get() = PRESENTABLE_TEXT diff --git a/idea/idea-gradle-native/tests/org/jetbrains/kotlin/ide/konan/gradle/GradleNativeLibrariesInIDENamingTest.kt b/idea/idea-gradle-native/tests/org/jetbrains/kotlin/ide/konan/gradle/GradleNativeLibrariesInIDENamingTest.kt index 7c8e9a86ed7..b966a2a99eb 100644 --- a/idea/idea-gradle-native/tests/org/jetbrains/kotlin/ide/konan/gradle/GradleNativeLibrariesInIDENamingTest.kt +++ b/idea/idea-gradle-native/tests/org/jetbrains/kotlin/ide/konan/gradle/GradleNativeLibrariesInIDENamingTest.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.konan.library.konanCommonLibraryPath import org.jetbrains.kotlin.konan.library.konanPlatformLibraryPath -import org.jetbrains.kotlin.platform.impl.isKotlinNative +import org.jetbrains.kotlin.platform.konan.isNative import org.jetbrains.plugins.gradle.util.GradleConstants import org.junit.Assert.* import org.junit.Test @@ -111,7 +111,7 @@ private fun assertValidModule(module: Module, projectRoot: String) { detectLibraryKind(library.getFiles(OrderRootType.CLASSES)) == NativeLibraryKind } - if (module.platform.isKotlinNative) { + if (module.platform.isNative()) { assertFalse("No Kotlin/Native libraries in $module", nativeLibraries.isEmpty()) nativeLibraries.forEach { assertValidNativeLibrary(it, projectRoot) } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.kt index d71ee88f97d..bf23d1e2882 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleModuleConfigurator.kt @@ -16,14 +16,13 @@ package org.jetbrains.kotlin.idea.configuration -import com.intellij.facet.FacetManager import com.intellij.openapi.module.Module import com.intellij.openapi.projectRoots.Sdk import com.intellij.psi.PsiFile import org.jetbrains.kotlin.idea.core.isAndroidModule import org.jetbrains.kotlin.idea.versions.getDefaultJvmTarget -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms class KotlinGradleModuleConfigurator : KotlinWithGradleConfigurator() { @@ -31,7 +30,7 @@ class KotlinGradleModuleConfigurator : KotlinWithGradleConfigurator() { get() = NAME override val targetPlatform: TargetPlatform - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform override val presentableText: String get() = "Java with Gradle" diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt index 44be31810bd..ab05451ab73 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinJsGradleModuleConfigurator.kt @@ -20,13 +20,13 @@ import com.intellij.openapi.projectRoots.Sdk import com.intellij.psi.PsiFile import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms class KotlinJsGradleModuleConfigurator : KotlinWithGradleConfigurator() { override val name: String = "gradle-js" override val presentableText: String = "JavaScript with Gradle" - override val targetPlatform: TargetPlatform = JsPlatform + override val targetPlatform: TargetPlatform = JsPlatforms.defaultJsPlatform override val kotlinPluginName: String = KOTLIN_JS override fun getKotlinPluginExpression(forKotlinDsl: Boolean): String = if (forKotlinDsl) "id(\"kotlin2js\")" else "id 'kotlin2js'" diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index df0820ee413..b293c340ac4 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -47,12 +47,12 @@ import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.idea.util.projectStructure.sdk -import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isJavaScript -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.Assert import org.junit.Ignore @@ -933,9 +933,9 @@ class GradleFacetImportTest : GradleImportingTestCase() { configureByFiles() importProject() - checkStableModuleName("project_main", "project", JsPlatform, isProduction = true) + checkStableModuleName("project_main", "project", JsPlatforms.defaultJsPlatform, isProduction = true) // Note "_test" suffix: this is current behavior of K2JS Compiler - checkStableModuleName("project_test", "project_test", JsPlatform, isProduction = false) + checkStableModuleName("project_test", "project_test", JsPlatforms.defaultJsPlatform, isProduction = false) assertAllModulesConfigured() } @@ -945,8 +945,8 @@ class GradleFacetImportTest : GradleImportingTestCase() { configureByFiles() importProject() - checkStableModuleName("project_main", "project", JvmPlatform, isProduction = true) - checkStableModuleName("project_test", "project", JvmPlatform, isProduction = false) + checkStableModuleName("project_main", "project", JvmPlatforms.defaultJvmPlatform, isProduction = true) + checkStableModuleName("project_test", "project", JvmPlatforms.defaultJvmPlatform, isProduction = false) assertAllModulesConfigured() } diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 05e89af0508..aaa4ea66c9a 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.cli.common.arguments.copyBean import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.utils.DescriptionAware @Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR) diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt index 4ce422fdba7..47b73516883 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.platform import com.intellij.openapi.components.ServiceManager import org.jetbrains.kotlin.config.isJps import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.resolve.TargetPlatform interface DefaultIdeTargetPlatformKindProvider { val defaultPlatform: IdePlatform<*, *> diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt index 7778fdbc343..c0aee27190c 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.platform import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.utils.DescriptionAware abstract class IdePlatform, out Arguments : CommonCompilerArguments> : DescriptionAware { diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt index 7c7b7adaf00..06c2f46e77e 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult abstract class IdePlatformKind> { diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt index 48f8018be6b..edcc1a4355a 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt @@ -6,12 +6,12 @@ @file:JvmName("CommonIdePlatformUtil") package org.jetbrains.kotlin.platform.impl -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatformVersion object CommonIdePlatformKind : IdePlatformKind() { @@ -20,7 +20,7 @@ object CommonIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = CommonPlatform + override val compilerPlatform get() = CommonPlatforms.defaultCommonPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt index 26f86068749..19b30a8932c 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt @@ -8,10 +8,10 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion -import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.js.JsPlatforms object JsIdePlatformKind : IdePlatformKind() { @@ -20,7 +20,7 @@ object JsIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = JsPlatform + override val compilerPlatform get() = JsPlatforms.defaultJsPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt index f3dccb02eab..16ee456012d 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms object JvmIdePlatformKind : IdePlatformKind() { @@ -26,7 +26,7 @@ object JvmIdePlatformKind : IdePlatformKind() { } else null } - override val compilerPlatform get() = JvmPlatform + override val compilerPlatform get() = JvmPlatforms.defaultJvmPlatform override val platforms = JvmTarget.values().map { ver -> Platform(ver) } override val defaultPlatform get() = Platform(JvmTarget.DEFAULT) diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt index 1d766132e7a..57006df588b 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatforms object NativeIdePlatformKind : IdePlatformKind() { @@ -19,7 +19,7 @@ object NativeIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = KonanPlatform + override val compilerPlatform get() = KonanPlatforms.defaultKonanPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt index 5401f01f441..fb6d534746a 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt @@ -12,8 +12,8 @@ import com.intellij.openapi.ui.Messages import com.intellij.util.PlatformUtils import org.jetbrains.kotlin.idea.configuration.* import org.jetbrains.kotlin.idea.util.projectStructure.allModules -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm abstract class ConfigureKotlinInProjectAction : AnAction() { @@ -44,7 +44,7 @@ abstract class ConfigureKotlinInProjectAction : AnAction() { class ConfigureKotlinJsInProjectAction: ConfigureKotlinInProjectAction() { override fun getApplicableConfigurators(project: Project) = getAbleToRunConfigurators(project).filter { - it.targetPlatform == JsPlatform + it.targetPlatform.isJs() } override fun update(e: AnActionEvent) { @@ -57,6 +57,6 @@ class ConfigureKotlinJsInProjectAction: ConfigureKotlinInProjectAction() { class ConfigureKotlinJavaInProjectAction: ConfigureKotlinInProjectAction() { override fun getApplicableConfigurators(project: Project) = getAbleToRunConfigurators(project).filter { - it.targetPlatform is JvmPlatform + it.targetPlatform.isJvm() } } \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt index e787c1debc0..d23f74344c5 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt @@ -40,8 +40,8 @@ import org.jetbrains.kotlin.idea.util.projectStructure.sdk import org.jetbrains.kotlin.idea.util.projectStructure.version import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibraryConfigurator() { override fun isApplicable(module: Module): Boolean { @@ -71,7 +71,7 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr get() = NAME override val targetPlatform: TargetPlatform - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform override fun getLibraryJarDescriptors(sdk: Sdk?): List { var result = listOf( diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt index 567e25115f9..7b2d9b4577c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJsModuleConfigurator.kt @@ -32,15 +32,15 @@ import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor import org.jetbrains.kotlin.js.JavaScript -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms open class KotlinJsModuleConfigurator : KotlinWithLibraryConfigurator() { override val name: String get() = NAME override val targetPlatform: TargetPlatform - get() = JsPlatform + get() = JsPlatforms.defaultJsPlatform override val presentableText: String get() = JavaScript.FULL_NAME diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.kt index 28d480efeb9..fa7da49247a 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinProjectConfigurator.kt @@ -24,7 +24,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform enum class ConfigureKotlinStatus { /** Kotlin is correctly configured using this configurator. */ diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt index 1778c3feb23..37699b0517b 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.idea.versions.SuppressNotificationState import org.jetbrains.kotlin.idea.versions.UnsupportedAbiVersionNotificationPanelProvider import org.jetbrains.kotlin.idea.versions.createComponentActionLabel import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm // Code is partially copied from com.intellij.codeInsight.daemon.impl.SetupSDKNotificationProvider class KotlinSetupEnvironmentNotificationProvider( @@ -68,7 +68,8 @@ class KotlinSetupEnvironmentNotificationProvider( } if (ModuleRootManager.getInstance(module).sdk == null && - TargetPlatformDetector.getPlatform(psiFile) == JvmPlatform) { + TargetPlatformDetector.getPlatform(psiFile).isJvm() + ) { return createSetupSdkPanel(myProject, psiFile) } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/DebuggerFieldSyntheticScopeProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/DebuggerFieldSyntheticScopeProvider.kt index 562812b8d97..14c8a426aa5 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/DebuggerFieldSyntheticScopeProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/DebuggerFieldSyntheticScopeProvider.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea.debugger.evaluate -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations @@ -27,7 +26,8 @@ import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.DescriptorFactory import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.SyntheticScope import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered @@ -78,7 +78,7 @@ class DebuggerFieldSyntheticScope(val javaSyntheticPropertiesScope: JavaSyntheti val containingFile = element.containingFile?.takeIf { it.isValid } as? KtFile ?: return false val platform = containingFile.platform - if (platform !is JvmPlatform && platform !is CommonPlatform) { + if (!platform.isJvm() && !platform.isCommon()) { return false } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/DebugLabelPropertyDescriptorProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/DebugLabelPropertyDescriptorProvider.kt index a9c97e4be6b..fcc767a491f 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/DebugLabelPropertyDescriptorProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/DebugLabelPropertyDescriptorProvider.kt @@ -28,6 +28,8 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.externalDescriptors +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -176,6 +178,9 @@ private object DebugLabelModuleDescriptor } } + override val platform: TargetPlatform? + get() = JvmPlatforms.defaultJvmPlatform + override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection { return emptyList() } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt index 1d28be52e11..aba4001fe1b 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleBuilder.kt @@ -24,14 +24,14 @@ import com.intellij.openapi.projectRoots.SdkTypeId import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ui.configuration.ModulesProvider import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.idea.statistics.FUSEventGroups import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import javax.swing.Icon class KotlinModuleBuilder( - val targetPlatform: TargetPlatform, val builderName: String, val builderDescription: String, val icon: Icon + val targetPlatform: TargetPlatform, val builderName: String, val builderDescription: String, val icon: Icon ) : JavaModuleBuilder() { private var wizardContext: WizardContext? = null @@ -51,15 +51,15 @@ class KotlinModuleBuilder( return KotlinModuleSettingStep(targetPlatform, this, settingsStep, wizardContext) } - override fun isSuitableSdkType(sdkType: SdkTypeId?) = when (targetPlatform) { - is JvmPlatform -> super.isSuitableSdkType(sdkType) + override fun isSuitableSdkType(sdkType: SdkTypeId?) = when { + targetPlatform.isJvm() -> super.isSuitableSdkType(sdkType) else -> sdkType is KotlinSdkType } override fun setupRootModel(rootModel: ModifiableRootModel) { KotlinFUSLogger.log(FUSEventGroups.NPWizards, this.javaClass.simpleName + ": ${this.targetPlatform}") super.setupRootModel(rootModel) - if (targetPlatform !is JvmPlatform) { + if (!targetPlatform.isJvm()) { migrateNonJvmSourceFolders(rootModel) } } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java index 62f1f3e47cf..45ca3d13d02 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinModuleSettingStep.java @@ -46,9 +46,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.formatter.KotlinStyleGuideCodeStyle; import org.jetbrains.kotlin.idea.formatter.ProjectCodeStyleImporter; -import org.jetbrains.kotlin.js.resolve.JsPlatform; -import org.jetbrains.kotlin.resolve.TargetPlatform; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.TargetPlatformKt; +import org.jetbrains.kotlin.platform.js.JsPlatformKt; +import org.jetbrains.kotlin.platform.jvm.JvmPlatformKt; import javax.swing.*; import java.lang.reflect.Field; @@ -83,7 +84,7 @@ public class KotlinModuleSettingStep extends ModuleWizardStep { ) { isNewProject = wizardContext != null && wizardContext.isCreatingNewProject(); - if (!(targetPlatform instanceof JvmPlatform)) { + if (!(JvmPlatformKt.isJvm(targetPlatform))) { KotlinSdkType.Companion.setUpIfNeeded(); } @@ -139,15 +140,15 @@ public class KotlinModuleSettingStep extends ModuleWizardStep { @NotNull protected String getLibraryLabelText() { - if (targetPlatform == JvmPlatform.INSTANCE) return "Kotlin runtime"; - if (targetPlatform == JsPlatform.INSTANCE) return "Kotlin JS library"; + if (JvmPlatformKt.isJvm(targetPlatform)) return "Kotlin runtime"; + if (JsPlatformKt.isJs(targetPlatform)) return "Kotlin JS library"; throw new IllegalStateException("Only JS and JVM target are supported"); } @NotNull protected CustomLibraryDescription getCustomLibraryDescription(@Nullable Project project) { - if (targetPlatform == JvmPlatform.INSTANCE) return new JavaRuntimeLibraryDescription(project); - if (targetPlatform == JsPlatform.INSTANCE) return new JSLibraryStdDescription(project); + if (JvmPlatformKt.isJvm(targetPlatform)) return new JavaRuntimeLibraryDescription(project); + if (JsPlatformKt.isJs(targetPlatform)) return new JSLibraryStdDescription(project); throw new IllegalStateException("Only JS and JVM target are supported"); } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt index b519a4e47db..dae924c018c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/KotlinTemplatesFactory.kt @@ -24,8 +24,8 @@ import com.intellij.platform.ProjectTemplate import com.intellij.platform.ProjectTemplatesFactory import com.intellij.platform.templates.BuilderBasedTemplate import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms class KotlinTemplatesFactory : ProjectTemplatesFactory() { companion object { @@ -39,15 +39,22 @@ class KotlinTemplatesFactory : ProjectTemplatesFactory() { override fun createTemplates(group: String?, context: WizardContext?): Array { val result = mutableListOf( - BuilderBasedTemplate(KotlinModuleBuilder(JvmPlatform, - "JVM | IDEA", - "Kotlin project with a JVM target based on the IntelliJ IDEA build system", - KotlinIcons.SMALL_LOGO)), - - BuilderBasedTemplate(KotlinModuleBuilder(JsPlatform, "JS | IDEA", - "Kotlin project with a JavaScript target based on the IntelliJ IDEA build system", - KotlinIcons.JS) + BuilderBasedTemplate( + KotlinModuleBuilder( + JvmPlatforms.defaultJvmPlatform, + "JVM | IDEA", + "Kotlin project with a JVM target based on the IntelliJ IDEA build system", + KotlinIcons.SMALL_LOGO ) + ), + + BuilderBasedTemplate( + KotlinModuleBuilder( + JsPlatforms.defaultJsPlatform, "JS | IDEA", + "Kotlin project with a JavaScript target based on the IntelliJ IDEA build system", + KotlinIcons.JS + ) + ) ) result.addAll(Extensions.getExtensions(EP_NAME).map { BuilderBasedTemplate(it) }) return result.toTypedArray() diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.kt index 3e2be4467b2..bb3e87c5e8b 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.util.Pair import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.wm.ToolWindow import com.intellij.util.Alarm -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory import org.jetbrains.kotlin.backend.jvm.jvmPhases @@ -43,7 +42,10 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.config.JvmTarget +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.utils.join import java.awt.BorderLayout import java.awt.FlowLayout @@ -281,10 +283,10 @@ class KotlinBytecodeToolWindow(private val myProject: Project, private val toolW configuration: CompilerConfiguration ): GenerationState? { val platform = ktFile.platform - if (platform !is CommonPlatform && platform !is JvmPlatform) return null + if (!platform.isCommon() && !platform.isJvm()) return null val resolutionFacade = KotlinCacheService.getInstance(ktFile.project) - .getResolutionFacadeByFile(ktFile, JvmPlatform) + .getResolutionFacadeByFile(ktFile, JvmPlatforms.defaultJvmPlatform) ?: return null val bindingContextForFile = resolutionFacade.analyzeWithAllCompilerChecks(listOf(ktFile)).bindingContext diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinTestNgConfigurationProducer.java b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinTestNgConfigurationProducer.java index 85c2a272f2d..48736ce85bd 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinTestNgConfigurationProducer.java +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinTestNgConfigurationProducer.java @@ -41,7 +41,7 @@ import org.jetbrains.kotlin.asJava.LightClassUtilsKt; import org.jetbrains.kotlin.idea.project.TargetPlatformDetector; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; +import org.jetbrains.kotlin.platform.jvm.JvmPlatformKt; import java.util.List; @@ -116,7 +116,7 @@ public class KotlinTestNgConfigurationProducer extends TestNGConfigurationProduc KtFile ktFile = (KtFile) leaf.getContainingFile(); - if (TargetPlatformDetector.getPlatform(ktFile) != JvmPlatform.INSTANCE) { + if (!JvmPlatformKt.isJvm(TargetPlatformDetector.getPlatform(ktFile))) { return false; } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/UnsupportedAbiVersionNotificationPanelProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/UnsupportedAbiVersionNotificationPanelProvider.kt index b0ed3f7d40b..1c777898aff 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/UnsupportedAbiVersionNotificationPanelProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/versions/UnsupportedAbiVersionNotificationPanelProvider.kt @@ -37,9 +37,9 @@ import org.jetbrains.kotlin.idea.KotlinPluginUpdater import org.jetbrains.kotlin.idea.KotlinPluginUtil import org.jetbrains.kotlin.idea.PluginUpdateStatus import org.jetbrains.kotlin.idea.project.TargetPlatformDetector -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm import java.awt.event.ComponentAdapter import java.awt.event.ComponentEvent import java.text.MessageFormat @@ -325,9 +325,10 @@ class UnsupportedAbiVersionNotificationPanelProvider(private val project: Projec } fun collectBadRoots(module: Module): Collection> { - val badRoots = when (TargetPlatformDetector.getPlatform(module)) { - JvmPlatform -> getLibraryRootsWithAbiIncompatibleKotlinClasses(module) - JsPlatform -> getLibraryRootsWithAbiIncompatibleForKotlinJs(module) + val platform = TargetPlatformDetector.getPlatform(module) + val badRoots = when { + platform.isJvm() -> getLibraryRootsWithAbiIncompatibleKotlinClasses(module) + platform.isJs() -> getLibraryRootsWithAbiIncompatibleForKotlinJs(module) else -> return emptyList() } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt index f771ff4783d..202514ed09d 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt @@ -26,8 +26,8 @@ import org.jetbrains.kotlin.idea.configuration.hasKotlinJvmRuntimeInScope import org.jetbrains.kotlin.idea.maven.PomFile import org.jetbrains.kotlin.idea.versions.getDefaultJvmTarget import org.jetbrains.kotlin.idea.versions.getStdlibArtifactId -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms class KotlinJavaMavenConfigurator : KotlinMavenConfigurator( KotlinJavaMavenConfigurator.TEST_LIB_ID, @@ -68,7 +68,7 @@ class KotlinJavaMavenConfigurator : KotlinMavenConfigurator( } override val targetPlatform: TargetPlatform - get() = JvmPlatform + get() = JvmPlatforms.defaultJvmPlatform companion object { private const val NAME = "maven" diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt index a93c1b8c553..1ead5fa0f46 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt @@ -21,8 +21,8 @@ import org.jetbrains.idea.maven.dom.model.MavenDomPlugin import org.jetbrains.kotlin.idea.configuration.hasKotlinJsRuntimeInScope import org.jetbrains.kotlin.idea.maven.PomFile import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms class KotlinJavascriptMavenConfigurator : KotlinMavenConfigurator(null, false, KotlinJavascriptMavenConfigurator.NAME, KotlinJavascriptMavenConfigurator.PRESENTABLE_TEXT) { @@ -43,7 +43,7 @@ class KotlinJavascriptMavenConfigurator : } override val targetPlatform: TargetPlatform - get() = JsPlatform + get() = JsPlatforms.defaultJsPlatform override fun getMinimumSupportedVersion() = "1.1.0" diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt index a95a75dff98..6342aaa8c99 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt @@ -46,13 +46,13 @@ import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.refactoring.toPsiFile -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.junit.Assert import org.junit.runner.RunWith import java.io.File @@ -2970,8 +2970,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() - checkStableModuleName("project", "project", JvmPlatform, isProduction = true) - checkStableModuleName("project", "project", JvmPlatform, isProduction = false) + checkStableModuleName("project", "project", JvmPlatforms.defaultJvmPlatform, isProduction = true) + checkStableModuleName("project", "project", JvmPlatforms.defaultJvmPlatform, isProduction = false) } fun testStableModuleNameWhileUsngMaven_JS() { @@ -3031,8 +3031,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { // Note that we check name induced by '-output-file' -- may be it's not the best // decision, but we don't have a better one - checkStableModuleName("project", "test", JsPlatform, isProduction = true) - checkStableModuleName("project", "test", JsPlatform, isProduction = false) + checkStableModuleName("project", "test", JsPlatforms.defaultJsPlatform, isProduction = true) + checkStableModuleName("project", "test", JsPlatforms.defaultJsPlatform, isProduction = false) } private fun checkStableModuleName(projectName: String, expectedName: String, platform: TargetPlatform, isProduction: Boolean) { diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt index 3253948487e..937d0bcecb1 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtNamedDeclaration -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import javax.swing.Icon class NativeIdePlatformKindTooling : IdePlatformKindTooling() { diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt index 8cca62e0a09..c9165e51256 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt @@ -29,11 +29,10 @@ import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.library.* import org.jetbrains.kotlin.konan.util.KonanFactories +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind -import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration -import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatforms +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult class NativePlatformKindResolution : IdePlatformKindResolution { @@ -122,7 +121,7 @@ private fun createKotlinNativeBuiltIns(settings: PlatformAnalysisSettings, proje } // TODO: It depends on a random module's stdlib, propagate the actual module here. -private fun findNativeStdlib(project: Project): NativeLibraryInfo? = getModuleInfosFromIdeaModel(project, KonanPlatform) +private fun findNativeStdlib(project: Project): NativeLibraryInfo? = getModuleInfosFromIdeaModel(project, KonanPlatforms.defaultKonanPlatform) .firstNotNullResult { it.asNativeStdlib() } private fun IdeaModuleInfo.asNativeStdlib(): NativeLibraryInfo? = if ((this as? NativeLibraryInfo)?.isStdlib == true) this else null @@ -149,7 +148,7 @@ class NativeLibraryInfo(project: Project, library: Library, root: File) : Librar ) override val platform: TargetPlatform - get() = KonanPlatform + get() = KonanPlatforms.defaultKonanPlatform override fun toString() = "Native" + super.toString() diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt index 6c3312bc2e7..3405793007c 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.ide.konan.analyzer import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider @@ -15,10 +14,9 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve import org.jetbrains.kotlin.ide.konan.NativeLibraryInfo import org.jetbrains.kotlin.ide.konan.createPackageFragmentProvider +import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer import org.jetbrains.kotlin.resolve.TargetEnvironment -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformCompilerServices import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService.Companion.createDeclarationProviderFactory @@ -31,8 +29,7 @@ object NativeResolverForModuleFactory : ResolverForModuleFactory() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - targetPlatformVersion: TargetPlatformVersion + languageVersionSettings: LanguageVersionSettings ): ResolverForModule { val declarationProviderFactory = createDeclarationProviderFactory( @@ -47,8 +44,7 @@ object NativeResolverForModuleFactory : ResolverForModuleFactory() { moduleContext, declarationProviderFactory, CodeAnalyzerInitializer.getInstance(moduleContext.project).createTrace(), - KonanPlatform, - TargetPlatformVersion.NoVersion, + KonanPlatforms.defaultKonanPlatform, NativePlatformCompilerServices, targetEnvironment, languageVersionSettings diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateEqualsAndHashcodeAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateEqualsAndHashcodeAction.kt index b3a4a3f8746..1027df0fd70 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateEqualsAndHashcodeAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/generate/KotlinGenerateEqualsAndHashcodeAction.kt @@ -23,7 +23,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiNameIdentifierOwner import com.intellij.util.IncorrectOperationException -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageFeature @@ -39,12 +38,13 @@ import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.application.runWriteAction -import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny import org.jetbrains.kotlin.resolve.source.getPsi @@ -131,9 +131,9 @@ class KotlinGenerateEqualsAndHashcodeAction : KotlinGenerateMemberActionBase "other == null || this::class.js != $paramName::class.js" - is CommonPlatform -> "other == null || this::class != $paramName::class" + return when { + targetClass.platform.isJs() -> "other == null || this::class.js != $paramName::class.js" + targetClass.platform.isCommon() -> "other == null || this::class != $paramName::class" else -> defaultExpression } } @@ -141,9 +141,9 @@ class KotlinGenerateEqualsAndHashcodeAction : KotlinGenerateMemberActionBase "this::class.js" - is CommonPlatform -> "this::class" + return when { + targetClass.platform.isJs() -> "this::class.js" + targetClass.platform.isCommon() -> "this::class" else -> defaultExpression } } diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt index 3b08af676cf..f95aef38fec 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/PlatformExpectedAnnotator.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.highlighter import com.intellij.lang.annotation.AnnotationHolder import com.intellij.lang.annotation.Annotator import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors @@ -35,6 +34,7 @@ import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.resolve.jvm.multiplatform.JavaActualAnnotationArgumentExtractor class PlatformExpectedAnnotator : Annotator { @@ -42,7 +42,7 @@ class PlatformExpectedAnnotator : Annotator { val declaration = element as? KtNamedDeclaration ?: return if (!isExpectedDeclaration(declaration)) return - if (TargetPlatformDetector.getPlatform(declaration.containingKtFile) !is CommonPlatform) return + if (!TargetPlatformDetector.getPlatform(declaration.containingKtFile).isCommon()) return val implementingModules = declaration.findModuleDescriptor().implementingDescriptors if (implementingModules.isEmpty()) return diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt index 739aab682ce..126541c6578 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/HasActualMarker.kt @@ -25,22 +25,21 @@ import org.jetbrains.kotlin.idea.core.isAndroidModule import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform +import org.jetbrains.kotlin.platform.isCommon -private fun ModuleDescriptor?.getMultiTargetPlatformName(): String? { +private fun ModuleDescriptor?.getPlatformName(): String? { if (this == null) return null val moduleInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo if (moduleInfo != null && moduleInfo.module.isAndroidModule()) { return "Android" } - val platform = getMultiTargetPlatform() ?: return null - return when (platform) { - is MultiTargetPlatform.Specific -> - platform.platform - MultiTargetPlatform.Common -> - "common" + val platform = platform ?: return null + + // TODO(dsavvinov): use better description + return when { + platform.isCommon() -> "common" + else -> platform.single().platformName } } @@ -50,7 +49,7 @@ fun getPlatformActualTooltip(declaration: KtDeclaration): String? { return actualDeclarations.asSequence() .mapNotNull { it.toDescriptor()?.module } - .groupBy { it.getMultiTargetPlatformName() } + .groupBy { it.getPlatformName() } .filter { (platform, _) -> platform != null } .entries .joinToString(prefix = "Has actuals in ") { (platform, modules) -> diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/OptionalExpectationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/OptionalExpectationInspection.kt index 76f8235e22b..c1809b4c622 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/OptionalExpectationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/OptionalExpectationInspection.kt @@ -15,16 +15,16 @@ import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.quickfix.expectactual.CreateActualClassFix +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.classOrObjectVisitor import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier -import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker.Companion.allStrongIncompatibilities import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver +import org.jetbrains.kotlin.platform.oldFashionedDescription class OptionalExpectationInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession) = @@ -49,12 +49,14 @@ class OptionalExpectationInspection : AbstractKotlinInspection() { expectedOnes != null && ExpectedActualResolver.Compatibility.Compatible in expectedOnes.keys }) ) continue - val platform = (actualModuleDescriptor.getMultiTargetPlatform() as? MultiTargetPlatform.Specific) ?: continue + val platform = actualModuleDescriptor.platform ?: continue + if (platform.isCommon()) continue + val displayedName = actualModuleDescriptor.getCapability(ModuleInfo.Capability)?.displayedName ?: "" val actualModule = (actualModuleDescriptor.getCapability(ModuleInfo.Capability) as? ModuleSourceInfo)?.module ?: continue holder.registerProblem( classOrObject.nameIdentifier ?: classOrObject, - "Optionally expected annotation has no actual annotation in module $displayedName for platform ${platform.platform}", + "Optionally expected annotation has no actual annotation in module $displayedName for platform ${platform.oldFashionedDescription}", // NB: some highlighting is not suggested for this inspection ProblemHighlightType.INFORMATION, IntentionWrapper(CreateActualClassFix(classOrObject, actualModule, platform), classOrObject.containingFile) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceWithEnumMapInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceWithEnumMapInspection.kt index a2ccce1a0c5..972a279ef73 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceWithEnumMapInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceWithEnumMapInspection.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.types.typeUtil.isEnum private val hashMapCreationFqNames = setOf( @@ -34,7 +34,7 @@ private val hashMapCreationFqNames = setOf( class ReplaceWithEnumMapInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { return callExpressionVisitor(fun(element: KtCallExpression) { - if (element.platform !is JvmPlatform) return + if (!element.platform.isJvm()) return val context = element.analyze() val fqName = element.getResolvedCall(context)?.resultingDescriptor?.fqNameUnsafe?.asString() ?: return if (!hashMapCreationFqNames.contains(fqName)) return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousAsDynamicInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousAsDynamicInspection.kt index bb082150681..da30997291b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousAsDynamicInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SuspiciousAsDynamicInspection.kt @@ -12,16 +12,16 @@ import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.project.Project import org.jetbrains.kotlin.idea.intentions.getCallableDescriptor import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.callExpressionVisitor import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.types.DynamicType class SuspiciousAsDynamicInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = callExpressionVisitor(fun(call) { - if (call.platform != JsPlatform) return + if (!call.platform.isJs()) return if (call.calleeExpression?.text != "asDynamic") return if (call.getQualifiedExpressionForSelector()?.receiverExpression?.getCallableDescriptor()?.returnType !is DynamicType) return holder.registerProblem( diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt index 91a4a7e6c96..cb379acc7b8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt @@ -35,7 +35,6 @@ import org.jetbrains.kotlin.idea.intentions.isReceiverExpressionWithValue import org.jetbrains.kotlin.idea.intentions.toResolvedCall import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -48,6 +47,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.getKotlinTypeWithPossibleSmartCastToFP +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -87,7 +87,7 @@ class ReplaceCallWithBinaryOperatorInspection : AbstractApplicabilityBasedInspec override fun inspectionHighlightType(element: KtDotQualifiedExpression): ProblemHighlightType { val calleeExpression = element.callExpression?.calleeExpression as? KtSimpleNameExpression val identifier = calleeExpression?.getReferencedNameAsName() - if (element.platform == JsPlatform && identifier == OperatorNameConventions.EQUALS) { + if (element.platform.isJs() && identifier == OperatorNameConventions.EQUALS) { val context = element.analyze(BodyResolveMode.PARTIAL) if (element.receiverExpression.getType(context)?.isDynamic() == true) { return ProblemHighlightType.INFORMATION diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmOverloadsIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmOverloadsIntention.kt index 1a25f2fd384..40292a9bf3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmOverloadsIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmOverloadsIntention.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm private val annotationFqName = FqName("kotlin.jvm.JvmOverloads") @@ -69,7 +69,7 @@ class AddJvmOverloadsIntention : SelfTargetingIntention( text = "Add '@JvmOverloads' annotation to $targetName" - return TargetPlatformDetector.getPlatform(element.containingKtFile) == JvmPlatform + return TargetPlatformDetector.getPlatform(element.containingKtFile).isJvm() && parameters.any { it.hasDefaultValue() } && element.findAnnotation(annotationFqName) == null } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddThrowsAnnotationIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddThrowsAnnotationIntention.kt index 46bc82bda71..6976c794df6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddThrowsAnnotationIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddThrowsAnnotationIntention.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.getAbbreviatedType @@ -30,7 +30,7 @@ class AddThrowsAnnotationIntention : SelfTargetingIntention( ) { override fun isApplicableTo(element: KtThrowExpression, caretOffset: Int): Boolean { - if (element.platform != JvmPlatform) return false + if (!element.platform.isJvm()) return false val containingDeclaration = element.getContainingDeclaration() ?: return false val type = element.thrownExpression?.resolveToCall()?.resultingDescriptor?.returnType ?: return false diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTestFunctionToSpacedIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTestFunctionToSpacedIntention.kt index 2ca87f1ef6a..368b8b198bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTestFunctionToSpacedIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTestFunctionToSpacedIntention.kt @@ -27,13 +27,13 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import com.intellij.refactoring.rename.RenameProcessor -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.application.runWriteAction -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeSmart import org.jetbrains.kotlin.utils.SmartList @@ -54,7 +54,7 @@ sealed class ConvertTestFunctionToSpacedIntention(case: String) : SelfTargetingR override fun applicabilityRange(element: KtNamedFunction): TextRange? { val platform = element.platform - if (platform is CommonPlatform || platform is JsPlatform) return null + if (platform.isCommon() || platform.isJs()) return null val range = element.nameIdentifier?.textRange ?: return null val name = element.name ?: return null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt index f3f3e54e1c3..9c387abc1ed 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt @@ -8,19 +8,19 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull +import org.jetbrains.kotlin.platform.js.isJs class ConvertUnsafeCastCallToUnsafeCastIntention : SelfTargetingIntention( KtDotQualifiedExpression::class.java, "Convert to unsafe cast" ) { override fun isApplicableTo(element: KtDotQualifiedExpression, caretOffset: Int): Boolean { - if (element.platform != JsPlatform) return false + if (!element.platform.isJs()) return false if ((element.selectorExpression as? KtCallExpression)?.calleeExpression?.text != "unsafeCast") return false val fqName = element.resolveToCall()?.resultingDescriptor?.fqNameOrNull()?.asString() ?: return false diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastToUnsafeCastCallIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastToUnsafeCastCallIntention.kt index 0fd3224fbb5..d6e3d687ac7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastToUnsafeCastCallIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastToUnsafeCastCallIntention.kt @@ -8,12 +8,12 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.TypeUtils @@ -22,7 +22,7 @@ class ConvertUnsafeCastToUnsafeCastCallIntention : SelfTargetingIntention getJvmClassesByName(name) +private fun KotlinIndicesHelper.getClassesByName(expressionForPlatform: KtExpression, name: String): Collection { + val platform = TargetPlatformDetector.getPlatform(expressionForPlatform.containingKtFile) + return when { + platform.isJvm() -> getJvmClassesByName(name) else -> getKotlinClasses({ it == name }, // Enum entries should be contributes with members import fix psiFilter = { ktDeclaration -> ktDeclaration !is KtEnumEntry }, kindFilter = { kind -> kind != ClassKind.ENUM_ENTRY }) } +} private fun CallTypeAndReceiver<*, *>.toFilter() = { descriptor: DeclarationDescriptor -> callType.descriptorKindFilter.accepts(descriptor) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt index c644d93eb10..f6c8373ca2a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt @@ -73,9 +73,9 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.resolve.AnnotationChecker +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -365,7 +365,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { if (!modifierBuilder.isValid) return emptyList() val resolutionFacade = KotlinCacheService.getInstance(targetContainer.project) - .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatform) ?: return emptyList() + .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatforms.defaultJvmPlatform) ?: return emptyList() val returnTypeInfo = request.returnType.toKotlinTypeInfo(resolutionFacade) val parameters = request.parameters as List>> val parameterInfos = parameters.map { (suggestedNames, expectedTypes) -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 index f1ab4f338b8..3049e2dc68a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 @@ -73,9 +73,9 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.resolve.AnnotationChecker +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -409,7 +409,7 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { if (!modifierBuilder.isValid) return emptyList() val resolutionFacade = KotlinCacheService.getInstance(targetContainer.project) - .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatform) ?: return emptyList() + .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatforms.defaultJvmPlatform) ?: return emptyList() val returnTypeInfo = request.returnType.toKotlinTypeInfo(resolutionFacade) val parameters = request.parameters as List>> val parameterInfos = parameters.map { (suggestedNames, expectedTypes) -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt index bf522fde405..e1af24a98e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt @@ -32,17 +32,17 @@ import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier -import org.jetbrains.kotlin.resolve.MultiTargetPlatform -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform sealed class CreateActualFix( declaration: D, actualModule: Module, - private val actualPlatform: MultiTargetPlatform.Specific, + private val actualPlatform: TargetPlatform, generateIt: KtPsiFactory.(Project, D) -> D? ) : AbstractCreateDeclarationFix(declaration, actualModule, generateIt) { - override fun getText() = "Create actual $elementType for module ${module.name} (${actualPlatform.platform})" + override fun getText() = + "Create actual $elementType for module ${module.name} (${actualPlatform.singleOrNull()?.platformName ?: actualPlatform})" final override fun invoke(project: Project, editor: Editor?, file: KtFile) { val actualFile = getOrCreateImplementationFile() ?: return @@ -71,7 +71,7 @@ sealed class CreateActualFix( if (compatibility.isNotEmpty() && declaration !is KtFunction) return null val actualModuleDescriptor = d.b val actualModule = (actualModuleDescriptor.getCapability(ModuleInfo.Capability) as? ModuleSourceInfo)?.module ?: return null - val actualPlatform = actualModuleDescriptor.getMultiTargetPlatform() as? MultiTargetPlatform.Specific ?: return null + val actualPlatform = actualModuleDescriptor.platform ?: return null return when (declaration) { is KtClassOrObject -> CreateActualClassFix(declaration, actualModule, actualPlatform) is KtFunction -> CreateActualFunctionFix(declaration, actualModule, actualPlatform) @@ -85,7 +85,7 @@ sealed class CreateActualFix( class CreateActualClassFix( klass: KtClassOrObject, actualModule: Module, - actualPlatform: MultiTargetPlatform.Specific + actualPlatform: TargetPlatform ) : CreateActualFix(klass, actualModule, actualPlatform, { project, element -> generateClassOrObject(project, false, element) }) @@ -93,7 +93,7 @@ class CreateActualClassFix( class CreateActualPropertyFix( property: KtProperty, actualModule: Module, - actualPlatform: MultiTargetPlatform.Specific + actualPlatform: TargetPlatform ) : CreateActualFix(property, actualModule, actualPlatform, { project, element -> val descriptor = element.toDescriptor() as? PropertyDescriptor descriptor?.let { generateProperty(project, false, element, descriptor) } @@ -102,7 +102,7 @@ class CreateActualPropertyFix( class CreateActualFunctionFix( function: KtFunction, actualModule: Module, - actualPlatform: MultiTargetPlatform.Specific + actualPlatform: TargetPlatform ) : CreateActualFix(function, actualModule, actualPlatform, { project, element -> val descriptor = element.toDescriptor() as? FunctionDescriptor descriptor?.let { generateFunction(project, false, element, descriptor) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt index ee7ad8ff225..192cb2875e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt @@ -36,12 +36,11 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker import org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.module -import org.jetbrains.kotlin.resolve.getMultiTargetPlatform +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.types.AbbreviatedType import org.jetbrains.kotlin.types.KotlinType @@ -296,7 +295,7 @@ private fun KotlinType.checkAccessibility(accessibleClasses: List) -> Boolean> = mapOf( - JvmPlatform to { roots: Array -> JavaRuntimeDetectionUtil.getRuntimeJar(roots.toList()) != null }, - JsPlatform to { roots: Array -> JsLibraryStdDetectionUtil.getJsStdLibJar(roots.toList()) != null }, - CommonPlatform to { roots: Array -> getLibraryJar(roots, PathUtil.KOTLIN_STDLIB_COMMON_JAR_PATTERN) != null } + JvmPlatforms.defaultJvmPlatform to { roots: Array -> JavaRuntimeDetectionUtil.getRuntimeJar(roots.toList()) != null }, + JsPlatforms.defaultJsPlatform to { roots: Array -> JsLibraryStdDetectionUtil.getJsStdLibJar(roots.toList()) != null }, + CommonPlatforms.defaultCommonPlatform to { roots: Array -> getLibraryJar(roots, PathUtil.KOTLIN_STDLIB_COMMON_JAR_PATTERN) != null } ) } @@ -148,7 +152,7 @@ class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jv .forEach { val stdlibPlatform = it.stdlibPlatform if (stdlibPlatform != null) { - if (stdlibPlatform == CommonPlatform) { + if (stdlibPlatform.isCommon()) { hasCommonStdlib = true } else { return stdlibPlatform @@ -156,13 +160,13 @@ class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jv } } - return if (hasCommonStdlib) CommonPlatform else null + return if (hasCommonStdlib) CommonPlatforms.defaultCommonPlatform else null } private fun ModuleSettings.detectPlatform(): TargetPlatform { return detectPlatformByFacet() ?: detectPlatformByDependencies() - ?: JvmPlatform + ?: JvmPlatforms.defaultJvmPlatform } private fun ModuleSettings.getSourceFolderElements(): List { @@ -192,7 +196,7 @@ class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jv } val targetPlatform = settings.detectPlatform() - return (targetPlatform != JvmPlatform) + return (!targetPlatform.isJvm()) } override fun process(settings: ModuleSettings) { diff --git a/idea/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt index 3a5a96d95bc..1a12c413da6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt @@ -13,7 +13,7 @@ import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProv import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState import com.intellij.openapi.roots.ui.configuration.OutputEditor import org.jetbrains.kotlin.idea.project.TargetPlatformDetector -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm class NonJvmKotlinModuleEditorsProvider : ModuleConfigurationEditorProviderEx { override fun isCompleteEditorSet() = true @@ -23,7 +23,7 @@ class NonJvmKotlinModuleEditorsProvider : ModuleConfigurationEditorProviderEx { val module = rootModel.module if (ModuleType.get(module) !is JavaModuleType) return ModuleConfigurationEditor.EMPTY val targetPlatform = TargetPlatformDetector.getPlatform(module) - if (targetPlatform is JvmPlatform) return ModuleConfigurationEditor.EMPTY + if (targetPlatform.isJvm()) return ModuleConfigurationEditor.EMPTY val moduleName = module.name return arrayOf( diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/AbstractCodeInsightActionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/AbstractCodeInsightActionTest.kt index 8aa2f449b0a..3630001333a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/AbstractCodeInsightActionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/generate/AbstractCodeInsightActionTest.kt @@ -14,14 +14,14 @@ import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.TestActionEvent import junit.framework.ComparisonFailure import junit.framework.TestCase -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.idea.project.forcedTargetPlatform import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.CommonPlatforms +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File @@ -78,9 +78,9 @@ abstract class AbstractCodeInsightActionTest : KotlinLightCodeInsightFixtureTest val targetPlatformName = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// PLATFORM: ") if (targetPlatformName != null) { val targetPlatform = when (targetPlatformName) { - "JVM" -> JvmPlatform - "JavaScript" -> JsPlatform - "Common" -> CommonPlatform + "JVM" -> JvmPlatforms.defaultJvmPlatform + "JavaScript" -> JsPlatforms.defaultJsPlatform + "Common" -> CommonPlatforms.defaultCommonPlatform else -> error("Unexpected platform name: $targetPlatformName") } mainPsiFile.forcedTargetPlatform = targetPlatform diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt index adc4d1ff6c2..24a8670e0ad 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.runner.RunWith @@ -60,7 +60,8 @@ class CodeFragmentCompletionInLibraryTest : AbstractJvmBasicCompletionTest() { private fun testCompletionInLibraryCodeFragment(fragmentText: String, vararg completionDirectives: String) { setupFixtureByCodeFragment(fragmentText) val directives = completionDirectives.map { "//$it" }.joinToString(separator = "\n") - testCompletion(directives, JvmPlatform, { completionType, count -> myFixture.complete(completionType, count) }) + testCompletion(directives, + JvmPlatforms.defaultJvmPlatform, { completionType, count -> myFixture.complete(completionType, count) }) } private fun setupFixtureByCodeFragment(fragmentText: String) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/repl/AbstractIdeReplCompletionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/repl/AbstractIdeReplCompletionTest.kt index a57cda6d0a5..1a856616265 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/repl/AbstractIdeReplCompletionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/repl/AbstractIdeReplCompletionTest.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.completion.test.testCompletion import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.runWriteAction -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File @@ -37,7 +37,7 @@ abstract class AbstractIdeReplCompletionTest : KotlinFixtureCompletionBaseTestCa super.tearDown() } - override fun getPlatform() = JvmPlatform + override fun getPlatform() = JvmPlatforms.defaultJvmPlatform override fun defaultCompletionType() = CompletionType.BASIC override fun doTest(testPath: String) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationCompletionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationCompletionTest.kt index c21eb0cf685..0a92d48a9a6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationCompletionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationCompletionTest.kt @@ -6,15 +6,19 @@ package org.jetbrains.kotlin.idea.script import org.jetbrains.kotlin.idea.completion.test.testCompletion -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms abstract class AbstractScriptConfigurationCompletionTest : AbstractScriptConfigurationTest() { fun doTest(path: String) { configureScriptFile(path) - testCompletion(file.text, JvmPlatform, additionalValidDirectives = switches, complete = { completionType, count -> - setType(completionType) - complete(count) - myItems - }) + testCompletion( + file.text, + JvmPlatforms.defaultJvmPlatform, + additionalValidDirectives = switches, + complete = { completionType, count -> + setType(completionType) + complete(count) + myItems + }) } } \ No newline at end of file diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index 2e5329ab1f6..d44ca720cc0 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.frontend.js.di import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useInstance @@ -28,7 +27,6 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.js.resolve.JsPlatformCompilerServices import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer @@ -46,7 +44,12 @@ fun createTopDownAnalyzerForJs( additionalPackages: List ): LazyTopDownAnalyzer { val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatformCompilerServices) { - configureModule(moduleContext, JsPlatform, TargetPlatformVersion.NoVersion, JsPlatformCompilerServices, bindingTrace) + configureModule( + moduleContext, + DefaultBuiltInPlatforms.jsPlatform, + JsPlatformCompilerServices, + bindingTrace + ) useInstance(declarationProviderFactory) useImpl() 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 b1ecb5a5965..8d891e86c38 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 @@ -67,7 +67,7 @@ object TopDownAnalyzerFacadeForJS { ProjectContext(project), Name.special("<$moduleName>"), builtIns, - multiTargetPlatform = null + platform = null ) val additionalPackages = mutableListOf() 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 deleted file mode 100644 index 8947e261a11..00000000000 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatform.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.resolve.* - -object JsPlatform : TargetPlatform("JS") { - override val platform: MultiTargetPlatform - get() = MultiTargetPlatform.Specific(platformName) -} diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsResolverForModuleFactory.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsResolverForModuleFactory.kt index 5148ce1ae74..96ec5eea350 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsResolverForModuleFactory.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsResolverForModuleFactory.kt @@ -1,30 +1,20 @@ /* - * 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. - * 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. + * 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.js.resolve import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.js.JsPlatform import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.lazy.ResolveSession @@ -41,8 +31,7 @@ object JsResolverForModuleFactory : ResolverForModuleFactory() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - targetPlatformVersion: TargetPlatformVersion + languageVersionSettings: LanguageVersionSettings ): ResolverForModule { val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project @@ -58,8 +47,7 @@ object JsResolverForModuleFactory : ResolverForModuleFactory() { moduleContext, declarationProviderFactory, BindingTraceContext(/* allowSliceRewrite = */ true), - JsPlatform, - TargetPlatformVersion.NoVersion, + moduleDescriptor.platform!!, JsPlatformCompilerServices, targetEnvironment, languageVersionSettings diff --git a/js/js.frontend/src/org/jetbrains/kotlin/platform/js/JsPlatform.kt b/js/js.frontend/src/org/jetbrains/kotlin/platform/js/JsPlatform.kt new file mode 100644 index 00000000000..b20cc4e433b --- /dev/null +++ b/js/js.frontend/src/org/jetbrains/kotlin/platform/js/JsPlatform.kt @@ -0,0 +1,23 @@ +/* + * 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.platform.js + +import org.jetbrains.kotlin.platform.SimplePlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.toTargetPlatform + +abstract class JsPlatform : SimplePlatform("JS") { + override val oldFashionedDescription: String + get() = "JavaScript " +} + +object JsPlatforms { + val defaultJsPlatform: TargetPlatform = object : JsPlatform() {}.toTargetPlatform() + + val allJsPlatforms: List = listOf(defaultJsPlatform) +} + +fun TargetPlatform?.isJs(): Boolean = this?.singleOrNull() is JsPlatform \ No newline at end of file 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 deleted file mode 100644 index 8a72506fb74..00000000000 --- a/konan/library-reader/src/org/jetbrains/kotlin/resolve/konan/platform/KonanPlatform.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. - * 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.* - -object KonanPlatform : TargetPlatform("Native") { - override val platform = MultiTargetPlatform.Specific(platformName) -} diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt index 2ccccec5cea..f0d2c95560f 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt @@ -40,10 +40,10 @@ import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.utils.decodePluginOptions object AndroidConfigurationKeys { @@ -163,9 +163,9 @@ class AndroidComponentRegistrar : ComponentRegistrar { class AndroidExtensionPropertiesComponentContainerContributor : StorageComponentContainerContributor { override fun registerModuleComponents( - container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor + container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor ) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return container.useInstance(AndroidExtensionPropertiesCallChecker()) container.useInstance(ParcelableDeclarationChecker()) diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt index 4d1b6108a50..cba19870c6d 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/synthetic/idea/ExperimentalUtils.kt @@ -29,7 +29,7 @@ import org.jetbrains.kotlin.android.synthetic.AndroidComponentRegistrar.Companio import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption import org.jetbrains.kotlin.idea.core.unwrapModuleSourceInfo import org.jetbrains.kotlin.idea.facet.KotlinFacet -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm private val ANNOTATION_OPTION_PREFIX = "plugin:$ANDROID_COMPILER_PLUGIN_ID:" @@ -53,7 +53,7 @@ private fun isTestMode(module: Module): Boolean { internal val Module.androidExtensionsIsEnabled: Boolean get() = isTestMode(this) || getOptionValueInFacet(ENABLED_OPTION) == "true" -internal fun ModuleInfo.findAndroidModuleInfo() = unwrapModuleSourceInfo()?.takeIf { it.platform is JvmPlatform } +internal fun ModuleInfo.findAndroidModuleInfo() = unwrapModuleSourceInfo()?.takeIf { it.platform.isJvm() } internal val ModuleInfo.androidExtensionsIsEnabled: Boolean get() { diff --git a/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt b/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt index 41409c6f1bf..788ae4a6c85 100644 --- a/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt +++ b/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidCompletionTest.kt @@ -20,7 +20,7 @@ import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.completion.CompletionType import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.idea.completion.test.testCompletion -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import java.io.File abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { @@ -48,7 +48,8 @@ abstract class AbstractAndroidCompletionTest : KotlinAndroidTestCase() { val virtualFile = myFixture.copyFileToProject(path + getTestName(true) + ".kt", "src/" + getTestName(true) + ".kt") myFixture.configureFromExistingVirtualFile(virtualFile) val fileText = FileUtil.loadFile(File(path + getTestName(true) + ".kt"), true) - testCompletion(fileText, JvmPlatform, { completionType, count -> myFixture.complete(completionType, count) }) + testCompletion(fileText, + JvmPlatforms.defaultJvmPlatform, { completionType, count -> myFixture.complete(completionType, count) }) } override fun tearDown() { diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt index 7bd9d1151c6..88fa543dd05 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.base.kapt3.* import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot @@ -45,9 +44,9 @@ import org.jetbrains.kotlin.kapt3.base.util.KaptLogger import org.jetbrains.kotlin.kapt3.util.MessageCollectorBackedKaptLogger import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingTrace -import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.utils.decodePluginOptions import java.io.ByteArrayInputStream import java.io.File @@ -242,7 +241,7 @@ class Kapt3ComponentRegistrar : ComponentRegistrar { platform: TargetPlatform, moduleDescriptor: ModuleDescriptor ) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return container.useInstance(KaptAnonymousTypeTransformer()) } } diff --git a/plugins/noarg/noarg-cli/src/NoArgPlugin.kt b/plugins/noarg/noarg-cli/src/NoArgPlugin.kt index 43c6acb6dbf..5dd7dbc4414 100644 --- a/plugins/noarg/noarg-cli/src/NoArgPlugin.kt +++ b/plugins/noarg/noarg-cli/src/NoArgPlugin.kt @@ -30,8 +30,8 @@ import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.ANNOTATION import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.INVOKE_INITIALIZERS import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.PRESET import org.jetbrains.kotlin.noarg.diagnostic.CliNoArgDeclarationChecker -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm object NoArgConfigurationKeys { val ANNOTATION: CompilerConfigurationKey> = @@ -89,9 +89,9 @@ class NoArgComponentRegistrar : ComponentRegistrar { class CliNoArgComponentContainerContributor(val annotations: List) : StorageComponentContainerContributor { override fun registerModuleComponents( - container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor + container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor ) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return container.useInstance(CliNoArgDeclarationChecker(annotations)) } diff --git a/plugins/noarg/noarg-ide/src/IdeStorageComponentContainerContributor.kt b/plugins/noarg/noarg-ide/src/IdeStorageComponentContainerContributor.kt index cfb6762be81..25b97e506e9 100644 --- a/plugins/noarg/noarg-ide/src/IdeStorageComponentContainerContributor.kt +++ b/plugins/noarg/noarg-ide/src/IdeStorageComponentContainerContributor.kt @@ -21,14 +21,14 @@ import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm class IdeNoArgComponentContainerContributor(val project: Project) : StorageComponentContainerContributor { override fun registerModuleComponents( - container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor + container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor ) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return container.useInstance(IdeNoArgDeclarationChecker(project)) } diff --git a/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverPlugin.kt b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverPlugin.kt index e7780e9b087..0cbb78d3ae5 100644 --- a/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverPlugin.kt +++ b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverPlugin.kt @@ -24,8 +24,8 @@ import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverCommandLineProcessor.Companion.SUPPORTED_PRESETS import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverConfigurationKeys.ANNOTATION import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverConfigurationKeys.PRESET @@ -74,7 +74,7 @@ class SamWithReceiverComponentRegistrar : ComponentRegistrar { class CliSamWithReceiverComponentContributor(val annotations: List): StorageComponentContainerContributor { override fun registerModuleComponents(container: StorageComponentContainer, platform: TargetPlatform, moduleDescriptor: ModuleDescriptor) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return container.useInstance(SamWithReceiverResolverExtension(annotations)) } diff --git a/plugins/sam-with-receiver/sam-with-receiver-ide/src/IdeSamWithReceiverComponentContributor.kt b/plugins/sam-with-receiver/sam-with-receiver-ide/src/IdeSamWithReceiverComponentContributor.kt index 0e43b2fb4e3..88efe8510b8 100644 --- a/plugins/sam-with-receiver/sam-with-receiver-ide/src/IdeSamWithReceiverComponentContributor.kt +++ b/plugins/sam-with-receiver/sam-with-receiver-ide/src/IdeSamWithReceiverComponentContributor.kt @@ -31,8 +31,8 @@ import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor import org.jetbrains.kotlin.idea.caches.project.ModuleProductionSourceInfo import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesInfo import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverCommandLineProcessor.Companion.ANNOTATION_OPTION import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverCommandLineProcessor.Companion.PLUGIN_ID import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverResolverExtension @@ -57,11 +57,11 @@ class IdeSamWithReceiverComponentContributor(val project: Project) : StorageComp override fun registerModuleComponents( - container: StorageComponentContainer, - platform: TargetPlatform, - moduleDescriptor: ModuleDescriptor + container: StorageComponentContainer, + platform: TargetPlatform, + moduleDescriptor: ModuleDescriptor ) { - if (platform != JvmPlatform) return + if (!platform.isJvm()) return val moduleInfo = moduleDescriptor.getCapability(ModuleInfo.Capability) val annotations = diff --git a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt index 30ca1091795..12d4a26acba 100644 --- a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt +++ b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt @@ -36,7 +36,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.calls.callUtil.getCall -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService @@ -55,11 +55,11 @@ class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { val containingFile = psiElement.containingFile if (containingFile is KtFile) { - return TargetPlatformDetector.getPlatform(containingFile) is JvmPlatform + return TargetPlatformDetector.getPlatform(containingFile).isJvm() } val module = psiElement.module - return module == null || TargetPlatformDetector.getPlatform(module) is JvmPlatform + return module == null || TargetPlatformDetector.getPlatform(module).isJvm() } override fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings { @@ -78,7 +78,7 @@ class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { .getCachedValue(project, { Result.create( ModuleManager.getInstance(project).modules.all { module -> - TargetPlatformDetector.getPlatform(module) is JvmPlatform + TargetPlatformDetector.getPlatform(module).isJvm() }, ProjectRootModificationTracker.getInstance(project) ) diff --git a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt.182 b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt.182 index 4805ad6b8a4..1eb04bffafb 100644 --- a/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt.182 +++ b/plugins/uast-kotlin-idea/src/IdeaKotlinUastResolveProviderService.kt.182 @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.uast.kotlin.KotlinUastResolveProviderService @@ -51,11 +51,11 @@ class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { val containingFile = psiElement.containingFile if (containingFile is KtFile) { - return TargetPlatformDetector.getPlatform(containingFile) is JvmPlatform + return TargetPlatformDetector.getPlatform(containingFile).isJvm() } val module = psiElement.module - return module == null || TargetPlatformDetector.getPlatform(module) is JvmPlatform + return module == null || TargetPlatformDetector.getPlatform(module).isJvm() } override fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings { @@ -67,7 +67,7 @@ class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderService { .getCachedValue(project, { Result.create( ModuleManager.getInstance(project).modules.all { module -> - TargetPlatformDetector.getPlatform(module) is JvmPlatform + TargetPlatformDetector.getPlatform(module).isJvm() }, ProjectRootModificationTracker.getInstance(project) )