Move ModuleDescriptor.Capability to :core:descriptors.common module

This commit is contained in:
Dmitriy Novozhilov
2020-08-17 09:56:19 +03:00
parent 6f0cd14afa
commit 3a48265077
18 changed files with 59 additions and 52 deletions
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.fir.descriptors
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
@@ -46,7 +43,7 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
override val expectedByModules: List<ModuleDescriptor>
get() = TODO("not implemented")
override fun <T> getCapability(capability: ModuleDescriptor.Capability<T>): T? {
override fun <T> getCapability(capability: ModuleCapability<T>): T? {
return null
}
@@ -75,4 +72,4 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor {
override val annotations: Annotations
get() = Annotations.EMPTY
}
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.analyzer
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
@@ -18,7 +18,7 @@ interface ModuleInfo {
val platform: TargetPlatform
val analyzerServices: PlatformDependentAnalyzerServices
fun modulesWhoseInternalsAreVisible(): Collection<ModuleInfo> = listOf()
val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
val capabilities: Map<ModuleCapability<*>, Any?>
get() = mapOf(Capability to this)
val stableName: Name?
get() = null
@@ -35,9 +35,6 @@ interface ModuleInfo {
enum class DependencyOnBuiltIns { NONE, AFTER_SDK, LAST }
companion object {
val Capability = ModuleDescriptor.Capability<ModuleInfo>("ModuleInfo")
val Capability = ModuleCapability<ModuleInfo>("ModuleInfo")
}
}
val ModuleDescriptor.moduleInfo: ModuleInfo?
get() = getCapability(ModuleInfo.Capability)
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDependencies
@@ -213,4 +214,7 @@ interface ResolverForModuleComputationTracker {
@Suppress("UNCHECKED_CAST")
fun <T> ModuleInfo.getCapability(capability: ModuleDescriptor.Capability<T>) = capabilities[capability] as? T
fun <T> ModuleInfo.getCapability(capability: ModuleCapability<T>) = capabilities[capability] as? T
val ModuleDescriptor.moduleInfo: ModuleInfo?
get() = getCapability(ModuleInfo.Capability)
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
@@ -61,7 +62,7 @@ class CommonResolverForModuleFactory(
) : ResolverForModuleFactory() {
private class SourceModuleInfo(
override val name: Name,
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>,
override val capabilities: Map<ModuleCapability<*>, Any?>,
private val dependencies: Iterable<ModuleInfo>,
override val expectedBy: List<ModuleInfo>,
override val platform: TargetPlatform,
@@ -116,7 +117,7 @@ class CommonResolverForModuleFactory(
fun analyzeFiles(
files: Collection<KtFile>, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings,
targetPlatform: TargetPlatform,
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap(),
capabilities: Map<ModuleCapability<*>, Any?> = emptyMap(),
dependenciesContainer: CommonDependenciesContainer? = null,
metadataPartProviderFactory: (ModuleContent<ModuleInfo>) -> MetadataPartProvider
): AnalysisResult {
@@ -225,4 +226,4 @@ private fun createContainerToResolveCommonCode(
fun StorageComponentContainer.configureCommonSpecificComponents() {
useImpl<MetadataPackageFragmentProvider>()
}
}
@@ -5,15 +5,12 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.FqName
object ImplicitIntegerCoercion {
val MODULE_CAPABILITY = ModuleDescriptor.Capability<Boolean>("ImplicitIntegerCoercion")
val MODULE_CAPABILITY = ModuleCapability<Boolean>("ImplicitIntegerCoercion")
fun isEnabledForParameter(descriptor: ParameterDescriptor): Boolean = isEnabledFor(descriptor)
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.context.SimpleGlobalContext
import org.jetbrains.kotlin.context.withModule
import org.jetbrains.kotlin.context.withProject
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
@@ -759,6 +760,6 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
companion object {
private val HASH_SANITIZER = fun(s: String): String = s.replace("@(\\d)+".toRegex(), "")
private val MODULE_FILES = ModuleDescriptor.Capability<List<KtFile>>("")
private val MODULE_FILES = ModuleCapability<List<KtFile>>("")
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.descriptors.konan
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.name.Name
@@ -21,7 +22,7 @@ interface KlibModuleDescriptorFactory {
storageManager: StorageManager,
builtIns: KotlinBuiltIns,
origin: KlibModuleOrigin,
customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap()
customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap()
): ModuleDescriptorImpl
/**
@@ -32,6 +33,6 @@ interface KlibModuleDescriptorFactory {
name: Name,
storageManager: StorageManager,
origin: KlibModuleOrigin,
customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap()
customCapabilities: Map<ModuleCapability<*>, Any?> = emptyMap()
): ModuleDescriptorImpl
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.descriptors.konan
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.isInterop
@@ -12,7 +13,7 @@ import org.jetbrains.kotlin.library.isInterop
sealed class KlibModuleOrigin {
companion object {
val CAPABILITY = ModuleDescriptor.Capability<KlibModuleOrigin>("KlibModuleOrigin")
val CAPABILITY = ModuleCapability<KlibModuleOrigin>("KlibModuleOrigin")
}
}
@@ -6,9 +6,10 @@
package org.jetbrains.kotlin.descriptors.konan.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.descriptors.konan.*
import org.jetbrains.kotlin.descriptors.konan.KlibModuleDescriptorFactory
import org.jetbrains.kotlin.descriptors.konan.KlibModuleOrigin
import org.jetbrains.kotlin.descriptors.konan.isInteropLibrary
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.konan.NativePlatforms
@@ -22,7 +23,7 @@ internal class KlibModuleDescriptorFactoryImpl(val createBuiltIns: (StorageManag
storageManager: StorageManager,
builtIns: KotlinBuiltIns,
origin: KlibModuleOrigin,
customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?>
customCapabilities: Map<ModuleCapability<*>, Any?>
) = ModuleDescriptorImpl(
name,
storageManager,
@@ -39,7 +40,7 @@ internal class KlibModuleDescriptorFactoryImpl(val createBuiltIns: (StorageManag
name: Name,
storageManager: StorageManager,
origin: KlibModuleOrigin,
customCapabilities: Map<ModuleDescriptor.Capability<*>, Any?>
customCapabilities: Map<ModuleCapability<*>, Any?>
): ModuleDescriptorImpl {
val builtIns = createBuiltIns(storageManager)
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2020 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.descriptors
class ModuleCapability<T>(val name: String) {
override fun toString() = name
}
@@ -52,7 +52,7 @@ interface ModuleDescriptor : DeclarationDescriptor {
val expectedByModules: List<ModuleDescriptor>
fun <T> getCapability(capability: Capability<T>): T?
fun <T> getCapability(capability: ModuleCapability<T>): T?
class Capability<T>(val name: String) {
override fun toString() = name
@@ -17,10 +17,7 @@
package org.jetbrains.kotlin.descriptors.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.InvalidModuleException
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -37,10 +34,10 @@ class ModuleDescriptorImpl @JvmOverloads constructor(
override val builtIns: KotlinBuiltIns,
// May be null in compiler context, should be not-null in IDE context
override val platform: TargetPlatform? = null,
capabilities: Map<ModuleDescriptor.Capability<*>, Any?> = emptyMap(),
capabilities: Map<ModuleCapability<*>, Any?> = emptyMap(),
override val stableName: Name? = null,
) : DeclarationDescriptorImpl(Annotations.EMPTY, moduleName), ModuleDescriptor {
private val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
private val capabilities: Map<ModuleCapability<*>, Any?>
init {
if (!moduleName.isSpecial) {
@@ -151,7 +148,7 @@ class ModuleDescriptorImpl @JvmOverloads constructor(
}
@Suppress("UNCHECKED_CAST")
override fun <T> getCapability(capability: ModuleDescriptor.Capability<T>) = capabilities[capability] as? T
override fun <T> getCapability(capability: ModuleCapability<T>) = capabilities[capability] as? T
}
interface ModuleDependencies {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
interface ResolutionAnchorProvider {
@@ -17,4 +18,4 @@ interface ResolutionAnchorProvider {
}
}
val RESOLUTION_ANCHOR_PROVIDER_CAPABILITY = ModuleDescriptor.Capability<ResolutionAnchorProvider>("ResolutionAnchorProvider")
val RESOLUTION_ANCHOR_PROVIDER_CAPABILITY = ModuleCapability<ResolutionAnchorProvider>("ResolutionAnchorProvider")
@@ -55,7 +55,7 @@ public class ErrorUtils {
ERROR_MODULE = new ModuleDescriptor() {
@Nullable
@Override
public <T> T getCapability(@NotNull Capability<T> capability) {
public <T> T getCapability(@NotNull ModuleCapability<T> capability) {
return null;
}
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeConstructor
import org.jetbrains.kotlin.types.UnwrappedType
import org.jetbrains.kotlin.types.refinement.TypeRefinement
@DefaultImplementation(impl = KotlinTypeRefiner.Default::class)
@@ -79,4 +78,4 @@ fun KotlinTypeRefiner.refineTypes(types: Iterable<KotlinType>): List<KotlinType>
class Ref<T : Any>(var value: T?)
@TypeRefinement
val REFINER_CAPABILITY = ModuleDescriptor.Capability<Ref<KotlinTypeRefiner>>("KotlinTypeRefiner")
val REFINER_CAPABILITY = ModuleCapability<Ref<KotlinTypeRefiner>>("KotlinTypeRefiner")
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
import org.jetbrains.kotlin.caches.resolve.resolution
import org.jetbrains.kotlin.config.SourceKotlinRootType
import org.jetbrains.kotlin.config.TestSourceKotlinRootType
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.idea.KotlinIdeaAnalysisBundle
import org.jetbrains.kotlin.idea.caches.resolve.util.enlargedSearchScope
import org.jetbrains.kotlin.idea.caches.trackers.KotlinModuleOutOfCodeBlockModificationTracker
@@ -64,7 +64,6 @@ import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.types.typeUtil.closure
import org.jetbrains.kotlin.utils.addIfNotNull
import java.lang.StringBuilder
import java.util.*
internal val LOG = Logger.getInstance(IdeaModuleInfo::class.java)
@@ -77,7 +76,7 @@ interface IdeaModuleInfo : org.jetbrains.kotlin.idea.caches.resolve.IdeaModuleIn
val project: Project?
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
override val capabilities: Map<ModuleCapability<*>, Any?>
get() = super.capabilities + mapOf(OriginCapability to moduleOrigin)
override fun dependencies(): List<IdeaModuleInfo>
@@ -494,7 +493,7 @@ private class SdkScope(project: Project, val sdk: Sdk) :
fun IdeaModuleInfo.isLibraryClasses() = this is SdkInfo || this is LibraryInfo
val OriginCapability = ModuleDescriptor.Capability<ModuleOrigin>("MODULE_ORIGIN")
val OriginCapability = ModuleCapability<ModuleOrigin>("MODULE_ORIGIN")
enum class ModuleOrigin {
MODULE,
@@ -538,7 +537,7 @@ data class PlatformModuleInfo(
override val platformModule: ModuleSourceInfo,
private val commonModules: List<ModuleSourceInfo> // NOTE: usually contains a single element for current implementation
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
override val capabilities: Map<ModuleCapability<*>, Any?>
get() = platformModule.capabilities
override fun contentScope() = GlobalSearchScope.union(containedModules.map { it.contentScope() }.toTypedArray())
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.caches.resolve.IdePlatformKindResolution
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleCapability
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
@@ -37,14 +38,14 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.isInterop
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion
import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
import org.jetbrains.kotlin.library.nativeTargets
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
import org.jetbrains.kotlin.platform.konan.NativePlatforms
import org.jetbrains.kotlin.platform.konan.NativePlatforms.nativePlatformByTargetNames
import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion
import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl
import org.jetbrains.kotlin.storage.StorageManager
@@ -156,7 +157,7 @@ class NativeKlibLibraryInfo(project: Project, library: Library, libraryRoot: Str
// If you're changing this, please take a look at ideaModelDependencies as well
val isStdlib: Boolean get() = libraryRoot.endsWith(KONAN_STDLIB_NAME)
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
override val capabilities: Map<ModuleCapability<*>, Any?>
get() {
val capabilities = super.capabilities.toMutableMap()
capabilities += KlibModuleOrigin.CAPABILITY to DeserializedKlibModuleOrigin(resolvedKotlinLibrary)
@@ -189,7 +189,7 @@ private object DebugLabelModuleDescriptor : DeclarationDescriptorImpl(Annotation
override val expectedByModules: List<ModuleDescriptor>
get() = emptyList()
override fun <T> getCapability(capability: ModuleDescriptor.Capability<T>): T? = null
override fun <T> getCapability(capability: ModuleCapability<T>): T? = null
override val isValid: Boolean
get() = true