Refactoring: collect callbacks for collecting module info in one place
This commit is contained in:
@@ -85,17 +85,17 @@ class ResolverForProjectImpl<M : ModuleInfo>(
|
||||
private val debugName: String,
|
||||
private val projectContext: ProjectContext,
|
||||
modules: Collection<M>,
|
||||
private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory,
|
||||
private val modulesContent: (M) -> ModuleContent<M>,
|
||||
private val modulePlatforms: (M) -> MultiTargetPlatform?,
|
||||
private val moduleLanguageSettingsProvider: LanguageSettingsProvider,
|
||||
private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory,
|
||||
private val platformParameters: 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 modulePlatforms: (M) -> MultiTargetPlatform?,
|
||||
private val packageOracleFactory: PackageOracleFactory = PackageOracleFactory.OptimisticFactory,
|
||||
private val languageSettingsProvider: LanguageSettingsProvider = LanguageSettingsProvider.Default,
|
||||
private val invalidateOnOOCB: Boolean = true
|
||||
) : ResolverForProject<M>() {
|
||||
|
||||
@@ -174,8 +174,8 @@ class ResolverForProjectImpl<M : ModuleInfo>(
|
||||
val packagePartProvider = packagePartProviderFactory(moduleContent)
|
||||
val resolverForModuleFactory = resolverForModuleFactoryByPlatform(module.platform)
|
||||
|
||||
val languageVersionSettings = languageSettingsProvider.getLanguageVersionSettings(module, projectContext.project)
|
||||
val targetPlatformVersion = languageSettingsProvider.getTargetPlatform(module)
|
||||
val languageVersionSettings = moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project)
|
||||
val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module)
|
||||
|
||||
resolverForModuleFactory.createResolverForModule(
|
||||
descriptor as ModuleDescriptorImpl,
|
||||
|
||||
@@ -80,15 +80,15 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() {
|
||||
"sources for metadata serializer",
|
||||
ProjectContext(project),
|
||||
listOf(moduleInfo),
|
||||
resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade },
|
||||
modulesContent = { ModuleContent(it, files, GlobalSearchScope.allScope(project)) },
|
||||
platformParameters = object : PlatformAnalysisParameters {},
|
||||
languageSettingsProvider = object : LanguageSettingsProvider {
|
||||
modulePlatforms = { MultiTargetPlatform.Common },
|
||||
moduleLanguageSettingsProvider = object : LanguageSettingsProvider {
|
||||
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project) = multiplatformLanguageSettings
|
||||
override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion
|
||||
},
|
||||
packagePartProviderFactory = packagePartProviderFactory,
|
||||
modulePlatforms = { MultiTargetPlatform.Common }
|
||||
resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade },
|
||||
platformParameters = object : PlatformAnalysisParameters {},
|
||||
packagePartProviderFactory = packagePartProviderFactory
|
||||
)
|
||||
|
||||
val moduleDescriptor = resolver.descriptorForModule(moduleInfo)
|
||||
|
||||
+8
-6
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.lazy
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider
|
||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl
|
||||
@@ -37,12 +38,13 @@ fun createResolveSessionForFiles(
|
||||
val projectContext = ProjectContext(project)
|
||||
val testModule = TestModule(addBuiltIns)
|
||||
val resolverForProject = ResolverForProjectImpl(
|
||||
"test",
|
||||
projectContext, listOf(testModule),
|
||||
{ JvmAnalyzerFacade },
|
||||
{ ModuleContent(it, syntheticFiles, GlobalSearchScope.allScope(project)) },
|
||||
JvmPlatformParameters { testModule },
|
||||
modulePlatforms = { JvmPlatform.multiTargetPlatform }
|
||||
"test",
|
||||
projectContext, listOf(testModule),
|
||||
{ ModuleContent(it, syntheticFiles, GlobalSearchScope.allScope(project)) },
|
||||
modulePlatforms = { JvmPlatform.multiTargetPlatform },
|
||||
moduleLanguageSettingsProvider = LanguageSettingsProvider.Default,
|
||||
resolverForModuleFactoryByPlatform = { JvmAnalyzerFacade },
|
||||
platformParameters = JvmPlatformParameters { testModule }
|
||||
)
|
||||
return resolverForProject.resolverForModule(testModule).componentProvider.get<ResolveSession>()
|
||||
}
|
||||
|
||||
+13
-16
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.jvm.compiler
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
||||
import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl
|
||||
import org.jetbrains.kotlin.analyzer.*
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
@@ -36,7 +33,6 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.constants.EnumValue
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
@@ -69,17 +65,18 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() {
|
||||
val projectContext = ProjectContext(environment.project)
|
||||
val builtIns = JvmBuiltIns(projectContext.storageManager)
|
||||
val resolverForProject = ResolverForProjectImpl(
|
||||
"test",
|
||||
projectContext, modules,
|
||||
{ JvmAnalyzerFacade },
|
||||
modulesContent = { module -> ModuleContent(module, module.kotlinFiles, module.javaFilesScope) },
|
||||
platformParameters = JvmPlatformParameters {
|
||||
javaClass ->
|
||||
val moduleName = javaClass.name.asString().toLowerCase().first().toString()
|
||||
modules.first { it._name == moduleName }
|
||||
},
|
||||
builtIns = builtIns,
|
||||
modulePlatforms = { JvmPlatform.multiTargetPlatform }
|
||||
"test",
|
||||
projectContext, modules,
|
||||
modulesContent = { module -> ModuleContent(module, module.kotlinFiles, module.javaFilesScope) },
|
||||
modulePlatforms = { JvmPlatform.multiTargetPlatform },
|
||||
moduleLanguageSettingsProvider = LanguageSettingsProvider.Default,
|
||||
resolverForModuleFactoryByPlatform = { JvmAnalyzerFacade },
|
||||
platformParameters = JvmPlatformParameters {
|
||||
javaClass ->
|
||||
val moduleName = javaClass.name.asString().toLowerCase().first().toString()
|
||||
modules.first { it._name == moduleName }
|
||||
},
|
||||
builtIns = builtIns
|
||||
)
|
||||
|
||||
builtIns.initialize(
|
||||
|
||||
+8
-8
@@ -123,20 +123,20 @@ internal class ProjectResolutionFacade(
|
||||
resolverDebugName,
|
||||
globalContext.withProject(project),
|
||||
modulesToCreateResolversFor,
|
||||
{ modulePlatform ->
|
||||
modulesContentFactory,
|
||||
modulePlatforms = { module -> module.platform?.multiTargetPlatform },
|
||||
moduleLanguageSettingsProvider = IDELanguageSettingsProvider,
|
||||
resolverForModuleFactoryByPlatform = { modulePlatform ->
|
||||
val platform = modulePlatform ?: settings.platform
|
||||
IdePlatformSupport.facades[platform] ?: throw UnsupportedOperationException("Unsupported platform $platform")
|
||||
},
|
||||
modulesContentFactory,
|
||||
jvmPlatformParameters,
|
||||
IdeaEnvironment,
|
||||
builtIns,
|
||||
delegateResolverForProject,
|
||||
platformParameters = jvmPlatformParameters,
|
||||
targetEnvironment = IdeaEnvironment,
|
||||
builtIns = builtIns,
|
||||
delegateResolver = delegateResolverForProject,
|
||||
packagePartProviderFactory = { moduleContent -> IDEPackagePartProvider(moduleContent.moduleContentScope) },
|
||||
firstDependency = settings.sdk?.let { SdkInfo(project, it) },
|
||||
modulePlatforms = { module -> module.platform?.multiTargetPlatform },
|
||||
packageOracleFactory = ServiceManager.getService(project, IdePackageOracleFactory::class.java),
|
||||
languageSettingsProvider = IDELanguageSettingsProvider,
|
||||
invalidateOnOOCB = invalidateOnOOCB
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user