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
@@ -22,7 +22,6 @@ 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.PackagePartProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve
@@ -38,7 +37,6 @@ import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
object JsAnalyzerFacade : ResolverForModuleFactory() {
override fun <M : ModuleInfo> createResolverForModule(
moduleDescriptor: ModuleDescriptorImpl,
moduleContext: ModuleContext,
@@ -47,8 +45,7 @@ object JsAnalyzerFacade : ResolverForModuleFactory() {
targetEnvironment: TargetEnvironment,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings,
targetPlatformVersion: TargetPlatformVersion,
packagePartProvider: PackagePartProvider
targetPlatformVersion: TargetPlatformVersion
): ResolverForModule {
val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent
val project = moduleContext.project
@@ -24,6 +24,7 @@ import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.util.containers.SLRUCache
import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.analyzer.common.CommonAnalysisParameters
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
@@ -41,7 +42,9 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.CompositeBindingContext
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
internal class ProjectResolutionFacade(
@@ -116,10 +119,17 @@ internal class ProjectResolutionFacade(
ModuleContent(module, syntheticFilesByModule[module] ?: listOf(), module.contentScope())
}
val jvmPlatformParameters = JvmPlatformParameters { javaClass: JavaClass ->
val psiClass = (javaClass as JavaClassImpl).psi
psiClass.getNullableModuleInfo()
}
val jvmPlatformParameters = JvmPlatformParameters(
packagePartProviderFactory = { IDEPackagePartProvider(it.moduleContentScope) },
moduleByJavaClass = { javaClass: JavaClass ->
val psiClass = (javaClass as JavaClassImpl).psi
psiClass.getNullableModuleInfo()
}
)
val commonPlatformParameters = CommonAnalysisParameters(
packagePartProviderFactory = { IDEPackagePartProvider(it.moduleContentScope) }
)
val resolverForProject = ResolverForProjectImpl(
resolverDebugName,
@@ -132,11 +142,16 @@ internal class ProjectResolutionFacade(
val platform = modulePlatform ?: settings.platform
IdePlatformSupport.facades[platform] ?: throw UnsupportedOperationException("Unsupported platform $platform")
},
platformParameters = jvmPlatformParameters,
platformParameters = { platform ->
when (platform) {
is JvmPlatform -> jvmPlatformParameters
is TargetPlatform.Common -> commonPlatformParameters
else -> PlatformAnalysisParameters.Empty
}
},
targetEnvironment = IdeaEnvironment,
builtIns = builtIns,
delegateResolver = delegateResolverForProject,
packagePartProviderFactory = { moduleContent -> IDEPackagePartProvider(moduleContent.moduleContentScope) },
firstDependency = settings.sdk?.let { SdkInfo(project, it) },
packageOracleFactory = ServiceManager.getService(project, IdePackageOracleFactory::class.java),
invalidateOnOOCB = invalidateOnOOCB