[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.
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
+3
-7
@@ -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<M>,
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user