[FE] Extract computation of sealed class inheritors into separate component
This is needed to provide more optimal provider in IDE plugin
This commit is contained in:
committed by
TeamCityServer
parent
c0a1aecf9b
commit
6809adee9c
@@ -103,6 +103,7 @@ private fun StorageComponentContainer.configurePlatformIndependentComponents() {
|
||||
useImpl<ClassicTypeSystemContextForCS>()
|
||||
useImpl<ClassicConstraintSystemUtilContext>()
|
||||
useInstance(ProgressManagerBasedCancellationChecker)
|
||||
useInstance(SealedClassInheritorsProviderImpl)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,4 +48,5 @@ interface LazyClassContext {
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker
|
||||
val samConversionResolver: SamConversionResolver
|
||||
val additionalClassPartsProvider: AdditionalClassPartsProvider
|
||||
val sealedClassInheritorsProvider: SealedClassInheritorsProvider
|
||||
}
|
||||
|
||||
@@ -85,6 +85,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
||||
private WrappedTypeFactory wrappedTypeFactory;
|
||||
private PlatformDiagnosticSuppressor platformDiagnosticSuppressor;
|
||||
private SamConversionResolver samConversionResolver;
|
||||
private SealedClassInheritorsProvider sealedClassInheritorsProvider;
|
||||
|
||||
private AdditionalClassPartsProvider additionalClassPartsProvider;
|
||||
|
||||
@@ -164,6 +165,11 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
||||
this.additionalClassPartsProvider = additionalClassPartsProvider;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setSealedClassInheritorsProvider(@NotNull SealedClassInheritorsProvider sealedClassInheritorsProvider) {
|
||||
this.sealedClassInheritorsProvider = sealedClassInheritorsProvider;
|
||||
}
|
||||
|
||||
// Only calls from injectors expected
|
||||
@Deprecated
|
||||
public ResolveSession(
|
||||
@@ -513,4 +519,10 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
|
||||
public AdditionalClassPartsProvider getAdditionalClassPartsProvider() {
|
||||
return additionalClassPartsProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public SealedClassInheritorsProvider getSealedClassInheritorsProvider() {
|
||||
return sealedClassInheritorsProvider;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -270,9 +270,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
||||
)
|
||||
);
|
||||
|
||||
// TODO: only consider classes from the same file, not the whole package fragment
|
||||
boolean freedomForSealedInterfacesSupported = c.getLanguageVersionSettings().supportsFeature(LanguageFeature.FreedomForSealedClasses);
|
||||
this.sealedSubclasses = storageManager.createLazyValue(() -> DescriptorUtilsKt.computeSealedSubclasses(this, freedomForSealedInterfacesSupported));
|
||||
this.sealedSubclasses = storageManager.createLazyValue(() -> c.getSealedClassInheritorsProvider().computeSealedSubclasses(this, freedomForSealedInterfacesSupported));
|
||||
}
|
||||
|
||||
private static boolean isIllegalInner(@NotNull DeclarationDescriptor descriptor) {
|
||||
|
||||
+4
@@ -71,6 +71,7 @@ class LocalClassifierAnalyzer(
|
||||
private val kotlinTypeChecker: NewKotlinTypeChecker,
|
||||
private val samConversionResolver: SamConversionResolver,
|
||||
private val additionalClassPartsProvider: AdditionalClassPartsProvider,
|
||||
private val sealedClassInheritorsProvider: SealedClassInheritorsProvider
|
||||
) {
|
||||
fun processClassOrObject(
|
||||
scope: LexicalWritableScope?,
|
||||
@@ -107,6 +108,7 @@ class LocalClassifierAnalyzer(
|
||||
kotlinTypeChecker,
|
||||
samConversionResolver,
|
||||
additionalClassPartsProvider,
|
||||
sealedClassInheritorsProvider
|
||||
),
|
||||
analyzerServices
|
||||
)
|
||||
@@ -138,6 +140,7 @@ class LocalClassDescriptorHolder(
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker,
|
||||
val samConversionResolver: SamConversionResolver,
|
||||
val additionalClassPartsProvider: AdditionalClassPartsProvider,
|
||||
val sealedClassInheritorsProvider: SealedClassInheritorsProvider
|
||||
) {
|
||||
// We do not need to synchronize here, because this code is used strictly from one thread
|
||||
private var classDescriptor: ClassDescriptor? = null
|
||||
@@ -181,6 +184,7 @@ class LocalClassDescriptorHolder(
|
||||
override val samConversionResolver: SamConversionResolver = this@LocalClassDescriptorHolder.samConversionResolver
|
||||
override val additionalClassPartsProvider: AdditionalClassPartsProvider =
|
||||
this@LocalClassDescriptorHolder.additionalClassPartsProvider
|
||||
override val sealedClassInheritorsProvider: SealedClassInheritorsProvider = this@LocalClassDescriptorHolder.sealedClassInheritorsProvider
|
||||
},
|
||||
containingDeclaration,
|
||||
classOrObject.nameAsSafeName,
|
||||
|
||||
Reference in New Issue
Block a user