Always pass moduleDescriptor to QualifiedExpressionResolver#processImportReference
Passing package view descriptor has the same effect
This commit is contained in:
@@ -75,11 +75,11 @@ public class QualifiedExpressionResolver {
|
|||||||
public JetScope processImportReference(
|
public JetScope processImportReference(
|
||||||
@NotNull JetImportDirective importDirective,
|
@NotNull JetImportDirective importDirective,
|
||||||
@NotNull JetScope scope,
|
@NotNull JetScope scope,
|
||||||
@NotNull DeclarationDescriptor shouldBeVisibleFrom,
|
@NotNull ModuleDescriptor moduleDescriptor,
|
||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
@NotNull LookupMode lookupMode
|
@NotNull LookupMode lookupMode
|
||||||
) {
|
) {
|
||||||
return importDirectiveProcessor.processImportReference(importDirective, scope, shouldBeVisibleFrom, trace, lookupMode);
|
return importDirectiveProcessor.processImportReference(importDirective, scope, moduleDescriptor, trace, lookupMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
|
import org.jetbrains.kotlin.utils.sure
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|
||||||
class LazyFileScope private constructor(
|
class LazyFileScope private constructor(
|
||||||
@@ -71,31 +72,31 @@ class LazyFileScope private constructor(
|
|||||||
file.getImportDirectives()
|
file.getImportDirectives()
|
||||||
|
|
||||||
val packageView = getPackageViewDescriptor(file, resolveSession)
|
val packageView = getPackageViewDescriptor(file, resolveSession)
|
||||||
val rootPackageView = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT)
|
val moduleDescriptor = resolveSession.getModuleDescriptor()
|
||||||
?: throw IllegalStateException("Root package not found")
|
|
||||||
val packageFragment = resolveSession.getPackageFragment(file.getPackageFqName())
|
val packageFragment = resolveSession.getPackageFragment(file.getPackageFqName())
|
||||||
|
.sure { "Could not find fragment ${file.getPackageFqName()} for file ${file.getName()}" }
|
||||||
|
|
||||||
val aliasImportResolver = LazyImportResolver(resolveSession, packageView, AliasImportsIndexed(imports), traceForImportResolve, true)
|
val aliasImportResolver = LazyImportResolver(resolveSession, moduleDescriptor, AliasImportsIndexed(imports), traceForImportResolve, true)
|
||||||
val allUnderImportResolver = LazyImportResolver(resolveSession, packageView, AllUnderImportsIndexed(imports), traceForImportResolve, true)
|
val allUnderImportResolver = LazyImportResolver(resolveSession, moduleDescriptor, AllUnderImportsIndexed(imports), traceForImportResolve, true)
|
||||||
val defaultAliasImportResolver = LazyImportResolver(resolveSession, rootPackageView, AliasImportsIndexed(defaultImports), traceForDefaultImportResolve, false)
|
val defaultAliasImportResolver = LazyImportResolver(resolveSession, moduleDescriptor, AliasImportsIndexed(defaultImports), traceForDefaultImportResolve, false)
|
||||||
val defaultAllUnderImportResolver = LazyImportResolver(resolveSession, rootPackageView, AllUnderImportsIndexed(defaultImports), traceForDefaultImportResolve, false)
|
val defaultAllUnderImportResolver = LazyImportResolver(resolveSession, moduleDescriptor, AllUnderImportsIndexed(defaultImports), traceForDefaultImportResolve, false)
|
||||||
|
|
||||||
val scopeChain = ArrayList<JetScope>()
|
val scopeChain = ArrayList<JetScope>()
|
||||||
|
|
||||||
scopeChain.add(LazyImportScope(aliasImportResolver, LazyImportScope.FilteringKind.ALL, "Alias imports in $debugName"))
|
scopeChain.add(LazyImportScope(packageFragment, aliasImportResolver, LazyImportScope.FilteringKind.ALL, "Alias imports in $debugName"))
|
||||||
|
|
||||||
scopeChain.add(NoSubpackagesInPackageScope(packageView)) //TODO: problems with visibility too
|
scopeChain.add(NoSubpackagesInPackageScope(packageView)) //TODO: problems with visibility too
|
||||||
scopeChain.add(JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()))
|
scopeChain.add(JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor))
|
||||||
|
|
||||||
scopeChain.add(LazyImportScope(defaultAliasImportResolver, LazyImportScope.FilteringKind.ALL, "Default alias imports in $debugName"))
|
scopeChain.add(LazyImportScope(packageFragment, defaultAliasImportResolver, LazyImportScope.FilteringKind.ALL, "Default alias imports in $debugName"))
|
||||||
|
|
||||||
scopeChain.add(LazyImportScope(defaultAllUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "Default all under imports in $debugName (visible classes)"))
|
scopeChain.add(LazyImportScope(packageFragment, defaultAllUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "Default all under imports in $debugName (visible classes)"))
|
||||||
scopeChain.add(LazyImportScope(allUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "All under imports in $debugName (visible classes)"))
|
scopeChain.add(LazyImportScope(packageFragment, allUnderImportResolver, LazyImportScope.FilteringKind.VISIBLE_CLASSES, "All under imports in $debugName (visible classes)"))
|
||||||
|
|
||||||
scopeChain.addAll(additionalScopes)
|
scopeChain.addAll(additionalScopes)
|
||||||
|
|
||||||
scopeChain.add(LazyImportScope(defaultAllUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "Default all under imports in $debugName (invisible classes only)"))
|
scopeChain.add(LazyImportScope(packageFragment, defaultAllUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "Default all under imports in $debugName (invisible classes only)"))
|
||||||
scopeChain.add(LazyImportScope(allUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "All under imports in $debugName (invisible classes only)"))
|
scopeChain.add(LazyImportScope(packageFragment, allUnderImportResolver, LazyImportScope.FilteringKind.INVISIBLE_CLASSES, "All under imports in $debugName (invisible classes only)"))
|
||||||
|
|
||||||
return LazyFileScope(scopeChain, aliasImportResolver, allUnderImportResolver, packageFragment, debugName)
|
return LazyFileScope(scopeChain, aliasImportResolver, allUnderImportResolver, packageFragment, debugName)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class AliasImportsIndexed(allImports: Collection<JetImportDirective>) : IndexedI
|
|||||||
|
|
||||||
class LazyImportResolver(
|
class LazyImportResolver(
|
||||||
val resolveSession: ResolveSession,
|
val resolveSession: ResolveSession,
|
||||||
val packageView: PackageViewDescriptor,
|
val moduleDescriptor: ModuleDescriptor,
|
||||||
val indexedImports: IndexedImports,
|
val indexedImports: IndexedImports,
|
||||||
private val traceForImportResolve: BindingTrace,
|
private val traceForImportResolve: BindingTrace,
|
||||||
includeRootPackageClasses: Boolean
|
includeRootPackageClasses: Boolean
|
||||||
@@ -101,11 +101,11 @@ class LazyImportResolver(
|
|||||||
try {
|
try {
|
||||||
val resolver = resolveSession.getQualifiedExpressionResolver()
|
val resolver = resolveSession.getQualifiedExpressionResolver()
|
||||||
val directiveImportScope = resolver.processImportReference(
|
val directiveImportScope = resolver.processImportReference(
|
||||||
directive, rootScope, packageView, traceForImportResolve, mode)
|
directive, rootScope, moduleDescriptor, traceForImportResolve, mode)
|
||||||
val descriptors = if (directive.isAllUnder()) emptyList() else directiveImportScope.getAllDescriptors()
|
val descriptors = if (directive.isAllUnder()) emptyList() else directiveImportScope.getAllDescriptors()
|
||||||
|
|
||||||
if (mode == LookupMode.EVERYTHING) {
|
if (mode == LookupMode.EVERYTHING) {
|
||||||
PlatformTypesMappedToKotlinChecker.checkPlatformTypesMappedToKotlin(packageView.getModule(), traceForImportResolve, directive, descriptors)
|
PlatformTypesMappedToKotlinChecker.checkPlatformTypesMappedToKotlin(moduleDescriptor, traceForImportResolve, directive, descriptors)
|
||||||
}
|
}
|
||||||
|
|
||||||
importResolveStatus = ImportResolveStatus(mode, directiveImportScope, descriptors)
|
importResolveStatus = ImportResolveStatus(mode, directiveImportScope, descriptors)
|
||||||
@@ -219,6 +219,7 @@ class LazyImportResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class LazyImportScope(
|
class LazyImportScope(
|
||||||
|
private val containingDeclaration: DeclarationDescriptor,
|
||||||
private val importResolver: LazyImportResolver,
|
private val importResolver: LazyImportResolver,
|
||||||
private val filteringKind: LazyImportScope.FilteringKind,
|
private val filteringKind: LazyImportScope.FilteringKind,
|
||||||
private val debugName: String
|
private val debugName: String
|
||||||
@@ -235,7 +236,7 @@ class LazyImportScope(
|
|||||||
val visibility = descriptor.getVisibility()
|
val visibility = descriptor.getVisibility()
|
||||||
val includeVisible = filteringKind == FilteringKind.VISIBLE_CLASSES
|
val includeVisible = filteringKind == FilteringKind.VISIBLE_CLASSES
|
||||||
if (!visibility.mustCheckInImports()) return includeVisible
|
if (!visibility.mustCheckInImports()) return includeVisible
|
||||||
return Visibilities.isVisible(ReceiverValue.IRRELEVANT_RECEIVER, descriptor, importResolver.packageView) == includeVisible
|
return Visibilities.isVisible(ReceiverValue.IRRELEVANT_RECEIVER, descriptor, importResolver.moduleDescriptor) == includeVisible
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifier(name: Name): ClassifierDescriptor? {
|
override fun getClassifier(name: Name): ClassifierDescriptor? {
|
||||||
@@ -285,7 +286,7 @@ class LazyImportScope(
|
|||||||
|
|
||||||
override fun getOwnDeclaredDescriptors() = listOf<DeclarationDescriptor>()
|
override fun getOwnDeclaredDescriptors() = listOf<DeclarationDescriptor>()
|
||||||
|
|
||||||
override fun getContainingDeclaration() = importResolver.packageView
|
override fun getContainingDeclaration() = containingDeclaration
|
||||||
|
|
||||||
override fun toString() = "LazyImportScope: " + debugName
|
override fun toString() = "LazyImportScope: " + debugName
|
||||||
|
|
||||||
@@ -293,7 +294,7 @@ class LazyImportScope(
|
|||||||
p.println(javaClass.getSimpleName(), ": ", debugName, " {")
|
p.println(javaClass.getSimpleName(), ": ", debugName, " {")
|
||||||
p.pushIndent()
|
p.pushIndent()
|
||||||
|
|
||||||
p.println("packageDescriptor = ", importResolver.packageView)
|
p.println("containingDeclaration = ", containingDeclaration)
|
||||||
|
|
||||||
importResolver.printScopeStructure(p)
|
importResolver.printScopeStructure(p)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user