KTIJ-664 [SealedClassInheritorsProvider]: IDE-specific implementation

This commit is contained in:
Andrei Klunnyi
2020-12-10 15:09:16 +01:00
parent f02b73103b
commit 3af0257b38
17 changed files with 181 additions and 24 deletions
@@ -41,10 +41,8 @@ import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.tower.ImplicitsExtensionsResolutionFilter
import org.jetbrains.kotlin.resolve.createContainer
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.JvmDiagnosticComponents
import org.jetbrains.kotlin.resolve.jvm.multiplatform.OptionalAnnotationPackageFragmentProvider
@@ -68,8 +66,12 @@ fun createContainerForLazyResolveWithJava(
configureJavaClassFinder: (StorageComponentContainer.() -> Unit)? = null,
javaClassTracker: JavaClassesTracker? = null,
implicitsResolutionFilter: ImplicitsExtensionsResolutionFilter? = null,
sealedInheritorsProvider: SealedClassInheritorsProvider = CliSealedClassInheritorsProvider
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatformAnalyzerServices) {
configureModule(moduleContext, jvmPlatform, JvmPlatformAnalyzerServices, bindingTrace, languageVersionSettings)
configureModule(
moduleContext, jvmPlatform, JvmPlatformAnalyzerServices, bindingTrace, languageVersionSettings,
sealedInheritorsProvider
)
configureIncrementalCompilation(lookupTracker, expectActualTracker)
configureStandardResolveComponents()
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.SealedClassInheritorsProvider
import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
@@ -54,7 +55,8 @@ class JvmResolverForModuleFactory(
moduleContext: ModuleContext,
moduleContent: ModuleContent<M>,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
sealedInheritorsProvider: SealedClassInheritorsProvider
): ResolverForModule {
val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent
val project = moduleContext.project
@@ -108,6 +110,7 @@ class JvmResolverForModuleFactory(
ExpectActualTracker.DoNothing,
packagePartProvider,
languageVersionSettings,
sealedInheritorsProvider = sealedInheritorsProvider,
useBuiltInsProvider = false // TODO: load built-ins from module dependencies in IDE
)
@@ -32,6 +32,8 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.TargetPlatformVersion
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.SealedClassInheritorsProvider
import org.jetbrains.kotlin.resolve.CliSealedClassInheritorsProvider
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.storage.getValue
import java.util.*
@@ -119,7 +121,8 @@ abstract class ResolverForModuleFactory {
moduleContext: ModuleContext,
moduleContent: ModuleContent<M>,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
sealedInheritorsProvider: SealedClassInheritorsProvider = CliSealedClassInheritorsProvider
): ResolverForModule
}
@@ -85,7 +85,8 @@ class CommonResolverForModuleFactory(
moduleContext: ModuleContext,
moduleContent: ModuleContent<M>,
resolverForProject: ResolverForProject<M>,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
sealedInheritorsProvider: SealedClassInheritorsProvider
): ResolverForModule {
val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent
val project = moduleContext.project
@@ -51,8 +51,10 @@ fun StorageComponentContainer.configureModule(
platform: TargetPlatform,
analyzerServices: PlatformDependentAnalyzerServices,
trace: BindingTrace,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
sealedProvider: SealedClassInheritorsProvider = CliSealedClassInheritorsProvider
) {
useInstance(sealedProvider)
useInstance(moduleContext)
useInstance(moduleContext.module)
useInstance(moduleContext.project)
@@ -103,7 +105,6 @@ private fun StorageComponentContainer.configurePlatformIndependentComponents() {
useImpl<ClassicTypeSystemContextForCS>()
useImpl<ClassicConstraintSystemUtilContext>()
useInstance(ProgressManagerBasedCancellationChecker)
useInstance(SealedClassInheritorsProviderImpl)
}
/**