Minor: use more clear and specific naming for LazyClassContext.typeChecker (relevant for MPP with type refinement)

This commit is contained in:
Dmitry Savvinov
2021-02-25 18:02:05 +03:00
parent 168c692a27
commit 42345b9c49
6 changed files with 27 additions and 12 deletions
@@ -45,8 +45,24 @@ interface LazyClassContext {
val syntheticResolveExtension: SyntheticResolveExtension val syntheticResolveExtension: SyntheticResolveExtension
val delegationFilter: DelegationFilter val delegationFilter: DelegationFilter
val wrappedTypeFactory: WrappedTypeFactory val wrappedTypeFactory: WrappedTypeFactory
val kotlinTypeChecker: NewKotlinTypeChecker
val samConversionResolver: SamConversionResolver val samConversionResolver: SamConversionResolver
val additionalClassPartsProvider: AdditionalClassPartsProvider val additionalClassPartsProvider: AdditionalClassPartsProvider
val sealedClassInheritorsProvider: SealedClassInheritorsProvider val sealedClassInheritorsProvider: SealedClassInheritorsProvider
/**
* Important notice!
*
* This is the type checker of *owner* module, i.e. the module which has declared the class.
*
* In MPP, we have different "views" on the one and the same class. I.e. if we have a common 'class Foo : Expect',
* and on JVM we have 'actual typealias Expect = CharSequence', then from "common view" Foo isn't assigneable to CharSequence,
* while from the "JVM view" it is.
*
* LazyClassContext is usually shared across all such views, so be careful - using this typechecker in "platform views" is not correct.
* Relevant entities usually have a separate instance of KotlinTypeChecker/KotlinTypeRefiner, see for example
* [org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassMemberScope].
*
* See also KT-44898 for example of issues which might happen if the wrong typechecker is used in "platform view".
*/
val kotlinTypeCheckerOfOwnerModule: NewKotlinTypeChecker
} }
@@ -504,7 +504,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
@NotNull @NotNull
@Override @Override
public NewKotlinTypeChecker getKotlinTypeChecker() { public NewKotlinTypeChecker getKotlinTypeCheckerOfOwnerModule() {
return kotlinTypeChecker; return kotlinTypeChecker;
} }
@@ -327,16 +327,15 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
return ScopesHolderForClass.Companion.create( return ScopesHolderForClass.Companion.create(
this, this,
c.getStorageManager(), c.getStorageManager(),
c.getKotlinTypeChecker().getKotlinTypeRefiner(), c.getKotlinTypeCheckerOfOwnerModule().getKotlinTypeRefiner(),
kotlinTypeRefiner -> { kotlinTypeRefinerForDependentModule -> {
LazyClassMemberScope scopeForDeclaredMembers = LazyClassMemberScope scopeForDeclaredMembers =
!kotlinTypeRefiner.isRefinementNeededForModule(c.getModuleDescriptor()) !kotlinTypeRefinerForDependentModule.isRefinementNeededForModule(c.getModuleDescriptor())
? null ? null
// TODO: or kotlinTypeRefiner.getModuleDescriptor() : scopesHolderForClass.getScope(c.getKotlinTypeCheckerOfOwnerModule().getKotlinTypeRefiner()); // essentially, a scope for owner-module
: scopesHolderForClass.getScope(c.getKotlinTypeChecker().getKotlinTypeRefiner());
return new LazyClassMemberScope( return new LazyClassMemberScope(
c, declarationProvider, this, c.getTrace(), kotlinTypeRefiner, c, declarationProvider, this, c.getTrace(), kotlinTypeRefinerForDependentModule,
scopeForDeclaredMembers scopeForDeclaredMembers
); );
} }
@@ -53,7 +53,7 @@ open class LazyClassMemberScope(
declarationProvider: ClassMemberDeclarationProvider, declarationProvider: ClassMemberDeclarationProvider,
thisClass: ClassDescriptorWithResolutionScopes, thisClass: ClassDescriptorWithResolutionScopes,
trace: BindingTrace, trace: BindingTrace,
private val kotlinTypeRefiner: KotlinTypeRefiner = c.kotlinTypeChecker.kotlinTypeRefiner, private val kotlinTypeRefiner: KotlinTypeRefiner = c.kotlinTypeCheckerOfOwnerModule.kotlinTypeRefiner,
scopeForDeclaredMembers: LazyClassMemberScope? = null scopeForDeclaredMembers: LazyClassMemberScope? = null
) : AbstractLazyMemberScope<ClassDescriptorWithResolutionScopes, ClassMemberDeclarationProvider>( ) : AbstractLazyMemberScope<ClassDescriptorWithResolutionScopes, ClassMemberDeclarationProvider>(
c, declarationProvider, thisClass, trace, scopeForDeclaredMembers c, declarationProvider, thisClass, trace, scopeForDeclaredMembers
@@ -184,7 +184,7 @@ class LocalClassDescriptorHolder(
override val syntheticResolveExtension = this@LocalClassDescriptorHolder.syntheticResolveExtension override val syntheticResolveExtension = this@LocalClassDescriptorHolder.syntheticResolveExtension
override val delegationFilter: DelegationFilter = this@LocalClassDescriptorHolder.delegationFilter override val delegationFilter: DelegationFilter = this@LocalClassDescriptorHolder.delegationFilter
override val wrappedTypeFactory: WrappedTypeFactory = this@LocalClassDescriptorHolder.wrappedTypeFactory override val wrappedTypeFactory: WrappedTypeFactory = this@LocalClassDescriptorHolder.wrappedTypeFactory
override val kotlinTypeChecker: NewKotlinTypeChecker = this@LocalClassDescriptorHolder.kotlinTypeChecker override val kotlinTypeCheckerOfOwnerModule: NewKotlinTypeChecker = this@LocalClassDescriptorHolder.kotlinTypeChecker
override val samConversionResolver: SamConversionResolver = this@LocalClassDescriptorHolder.samConversionResolver override val samConversionResolver: SamConversionResolver = this@LocalClassDescriptorHolder.samConversionResolver
override val additionalClassPartsProvider: AdditionalClassPartsProvider = override val additionalClassPartsProvider: AdditionalClassPartsProvider =
this@LocalClassDescriptorHolder.additionalClassPartsProvider this@LocalClassDescriptorHolder.additionalClassPartsProvider
@@ -148,11 +148,11 @@ class LazyScriptDescriptor(
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
visitor.visitScriptDescriptor(this, data) visitor.visitScriptDescriptor(this, data)
override fun createMemberScope( override fun createScopesHolderForClass(
c: LazyClassContext, c: LazyClassContext,
declarationProvider: ClassMemberDeclarationProvider declarationProvider: ClassMemberDeclarationProvider
): ScopesHolderForClass<LazyClassMemberScope> = ): ScopesHolderForClass<LazyClassMemberScope> =
ScopesHolderForClass.create(this, c.storageManager, c.kotlinTypeChecker.kotlinTypeRefiner) { ScopesHolderForClass.create(this, c.storageManager, c.kotlinTypeCheckerOfOwnerModule.kotlinTypeRefiner) {
LazyScriptClassMemberScope( LazyScriptClassMemberScope(
// Must be a ResolveSession for scripts // Must be a ResolveSession for scripts
c as ResolveSession, c as ResolveSession,