Pass LanguageSettingsProvider to AnalyzerFacade explicitly
This way is more flexible for example for tests, where configuring the service implementation may be tricky (it's usually done in KotlinCoreEnvironment in production code)
This commit is contained in:
@@ -164,6 +164,7 @@ abstract class AnalyzerFacade<in P : PlatformAnalysisParameters> {
|
||||
analyzerFacade: (M) -> AnalyzerFacade<P>,
|
||||
modulesContent: (M) -> ModuleContent,
|
||||
platformParameters: P,
|
||||
languageSettingsProvider: LanguageSettingsProvider = LanguageSettingsProvider.Default,
|
||||
targetEnvironment: TargetEnvironment = CompilerEnvironment,
|
||||
builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance,
|
||||
delegateResolver: ResolverForProject<M> = EmptyResolverForProject(),
|
||||
@@ -220,7 +221,7 @@ abstract class AnalyzerFacade<in P : PlatformAnalysisParameters> {
|
||||
|
||||
analyzerFacade(module).createResolverForModule(
|
||||
module, descriptor, projectContext.withModule(descriptor), modulesContent(module),
|
||||
platformParameters, targetEnvironment, resolverForProject,
|
||||
platformParameters, targetEnvironment, resolverForProject, languageSettingsProvider,
|
||||
packagePartProviderFactory(module, content)
|
||||
)
|
||||
}
|
||||
@@ -243,6 +244,7 @@ abstract class AnalyzerFacade<in P : PlatformAnalysisParameters> {
|
||||
platformParameters: P,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
resolverForProject: ResolverForProject<M>,
|
||||
languageSettingsProvider: LanguageSettingsProvider,
|
||||
packagePartProvider: PackagePartProvider
|
||||
): ResolverForModule
|
||||
|
||||
@@ -301,10 +303,6 @@ interface LanguageSettingsProvider {
|
||||
|
||||
override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion = TargetPlatformVersion.NoVersion
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getInstance(project: Project) = ServiceManager.getService(project, LanguageSettingsProvider::class.java) ?: Default
|
||||
}
|
||||
}
|
||||
|
||||
interface ResolverForModuleComputationTracker {
|
||||
@@ -314,4 +312,4 @@ interface ResolverForModuleComputationTracker {
|
||||
companion object {
|
||||
fun getInstance(project: Project): ResolverForModuleComputationTracker? = ServiceManager.getService(project, ResolverForModuleComputationTracker::class.java) ?: null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.analyzer.common
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.*
|
||||
import org.jetbrains.kotlin.config.*
|
||||
@@ -69,11 +70,16 @@ object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
||||
): AnalysisResult {
|
||||
val moduleInfo = SourceModuleInfo(moduleName, capabilities, dependOnBuiltIns)
|
||||
val project = files.firstOrNull()?.project ?: throw AssertionError("No files to analyze")
|
||||
@Suppress("NAME_SHADOWING")
|
||||
val resolver = setupResolverForProject(
|
||||
"sources for metadata serializer",
|
||||
ProjectContext(project), listOf(moduleInfo), { DefaultAnalyzerFacade },
|
||||
{ ModuleContent(files, GlobalSearchScope.allScope(project)) },
|
||||
object : PlatformAnalysisParameters {},
|
||||
object : LanguageSettingsProvider {
|
||||
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project) = languageVersionSettings
|
||||
override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion
|
||||
},
|
||||
packagePartProviderFactory = packagePartProviderFactory,
|
||||
modulePlatforms = { MultiTargetPlatform.Common }
|
||||
)
|
||||
@@ -94,6 +100,7 @@ object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
||||
platformParameters: PlatformAnalysisParameters,
|
||||
targetEnvironment: TargetEnvironment,
|
||||
resolverForProject: ResolverForProject<M>,
|
||||
languageSettingsProvider: LanguageSettingsProvider,
|
||||
packagePartProvider: PackagePartProvider
|
||||
): ResolverForModule {
|
||||
val (syntheticFiles, moduleContentScope) = moduleContent
|
||||
|
||||
Reference in New Issue
Block a user