Remove PackagePartProvider from ResolverForProjectImpl

To be able to move it to JVM-specific modules, and to provide a
replacement for common module analysis
This commit is contained in:
Alexander Udalov
2018-01-18 16:21:02 +01:00
parent 33bd1b23a2
commit e25bc2865f
7 changed files with 54 additions and 31 deletions
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.context.withModule
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDependencies
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.name.FqName
@@ -89,11 +88,10 @@ class ResolverForProjectImpl<M : ModuleInfo>(
private val modulePlatforms: (M) -> MultiTargetPlatform?,
private val moduleLanguageSettingsProvider: LanguageSettingsProvider,
private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory,
private val platformParameters: PlatformAnalysisParameters,
private val platformParameters: (TargetPlatform) -> PlatformAnalysisParameters,
private val targetEnvironment: TargetEnvironment = CompilerEnvironment,
override val builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance,
private val delegateResolver: ResolverForProject<M> = EmptyResolverForProject(),
private val packagePartProviderFactory: (ModuleContent<M>) -> PackagePartProvider = { _ -> PackagePartProvider.Empty },
private val firstDependency: M? = null,
private val packageOracleFactory: PackageOracleFactory = PackageOracleFactory.OptimisticFactory,
private val invalidateOnOOCB: Boolean = true
@@ -176,7 +174,6 @@ class ResolverForProjectImpl<M : ModuleInfo>(
ResolverForModuleComputationTracker.getInstance(projectContext.project)?.onResolverComputed(module)
val moduleContent = modulesContent(module)
val packagePartProvider = packagePartProviderFactory(moduleContent)
val resolverForModuleFactory = resolverForModuleFactoryByPlatform(module.platform)
val languageVersionSettings = moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project)
@@ -186,12 +183,11 @@ class ResolverForProjectImpl<M : ModuleInfo>(
descriptor as ModuleDescriptorImpl,
projectContext.withModule(descriptor),
moduleContent,
platformParameters,
platformParameters(resolverForModuleFactory.targetPlatform),
targetEnvironment,
this@ResolverForProjectImpl,
languageVersionSettings,
targetPlatformVersion,
packagePartProvider
targetPlatformVersion
)
}
}
@@ -267,7 +263,9 @@ data class ModuleContent<out M : ModuleInfo>(
val moduleContentScope: GlobalSearchScope
)
interface PlatformAnalysisParameters
interface PlatformAnalysisParameters {
object Empty : PlatformAnalysisParameters
}
interface ModuleInfo {
val name: Name
@@ -322,8 +320,7 @@ abstract class ResolverForModuleFactory {
targetEnvironment: TargetEnvironment,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings,
targetPlatformVersion: TargetPlatformVersion,
packagePartProvider: PackagePartProvider
targetPlatformVersion: TargetPlatformVersion
): ResolverForModule
abstract val targetPlatform: TargetPlatform
@@ -45,6 +45,10 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmentProvider
class CommonAnalysisParameters(
val packagePartProviderFactory: (ModuleContent<*>) -> PackagePartProvider
) : PlatformAnalysisParameters
/**
* A facade that is used to analyze common (platform-independent) modules in multi-platform projects.
* See [TargetPlatform.Common]
@@ -87,8 +91,7 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() {
override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion
},
resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade },
platformParameters = object : PlatformAnalysisParameters {},
packagePartProviderFactory = packagePartProviderFactory
platformParameters = { _ -> CommonAnalysisParameters(packagePartProviderFactory) }
)
val moduleDescriptor = resolver.descriptorForModule(moduleInfo)
@@ -107,8 +110,7 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() {
targetEnvironment: TargetEnvironment,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings,
targetPlatformVersion: TargetPlatformVersion,
packagePartProvider: PackagePartProvider
targetPlatformVersion: TargetPlatformVersion
): ResolverForModule {
val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent
val project = moduleContext.project
@@ -118,6 +120,7 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() {
moduleInfo
)
val packagePartProvider = (platformParameters as CommonAnalysisParameters).packagePartProviderFactory(moduleContent)
val trace = CodeAnalyzerInitializer.getInstance(project).createTrace()
val container = createContainerToResolveCommonCode(
moduleContext, trace, declarationProviderFactory, moduleContentScope, targetEnvironment, packagePartProvider,