Always pass moduleDescriptor to QualifiedExpressionResolver#processImportReference

Passing package view descriptor has the same effect
This commit is contained in:
Pavel V. Talanov
2015-05-13 17:43:40 +03:00
parent 7585cbfe22
commit 39e78cad2a
3 changed files with 23 additions and 21 deletions
@@ -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)