It is more correct to resolve default imports this way

This commit is contained in:
Valentin Kipyatkov
2015-01-16 12:07:15 +03:00
parent 7ce3925d71
commit e117e5aa16
2 changed files with 10 additions and 6 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.resolve.JetModuleUtil
import org.jetbrains.kotlin.resolve.NoSubpackagesInPackageScope import org.jetbrains.kotlin.resolve.NoSubpackagesInPackageScope
import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.name.FqName
class LazyFileScope private( class LazyFileScope private(
private val aliasImportsScope: LazyImportScope, private val aliasImportsScope: LazyImportScope,
@@ -71,13 +72,16 @@ class LazyFileScope private(
file.getImportDirectives() file.getImportDirectives()
val packageView = getPackageViewDescriptor(file, resolveSession) val packageView = getPackageViewDescriptor(file, resolveSession)
val inRootPackage = packageView.getFqName().isRoot()
val rootPackageView = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT)
?: throw IllegalStateException("Root package not found")
val currentPackageMembersScope = NoSubpackagesInPackageScope(packageView) val currentPackageMembersScope = NoSubpackagesInPackageScope(packageView)
val rootPackagesScope = JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()) val rootPackagesScope = JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor())
val aliasImportsScope = LazyImportScope(resolveSession, packageView, AliasImportsIndexed(imports), traceForImportResolve, "Alias imports in $debugName") val aliasImportsScope = LazyImportScope(resolveSession, packageView, AliasImportsIndexed(imports), traceForImportResolve, "Alias imports in $debugName", inRootPackage)
val allUnderImportsScope = LazyImportScope(resolveSession, packageView, AllUnderImportsIndexed(imports), traceForImportResolve, "All under imports in $debugName") val allUnderImportsScope = LazyImportScope(resolveSession, packageView, AllUnderImportsIndexed(imports), traceForImportResolve, "All under imports in $debugName", inRootPackage)
val defaultAliasImportsScope = LazyImportScope(resolveSession, packageView, AliasImportsIndexed(defaultImports), traceForDefaultImportResolve, "Default alias imports in $debugName") val defaultAliasImportsScope = LazyImportScope(resolveSession, rootPackageView, AliasImportsIndexed(defaultImports), traceForDefaultImportResolve, "Default alias imports in $debugName", false)
val defaultAllUnderImportsScope = LazyImportScope(resolveSession, packageView, AllUnderImportsIndexed(defaultImports), traceForDefaultImportResolve, "Default all under imports in $debugName") val defaultAllUnderImportsScope = LazyImportScope(resolveSession, rootPackageView, AllUnderImportsIndexed(defaultImports), traceForDefaultImportResolve, "Default all under imports in $debugName", false)
return LazyFileScope(aliasImportsScope, allUnderImportsScope, defaultAliasImportsScope, defaultAllUnderImportsScope, return LazyFileScope(aliasImportsScope, allUnderImportsScope, defaultAliasImportsScope, defaultAllUnderImportsScope,
currentPackageMembersScope, rootPackagesScope, additionalScopes, currentPackageMembersScope, rootPackagesScope, additionalScopes,
@@ -66,13 +66,13 @@ class LazyImportScope(
private val containingDeclaration: PackageViewDescriptor, private val containingDeclaration: PackageViewDescriptor,
private val indexedImports: IndexedImports, private val indexedImports: IndexedImports,
private val traceForImportResolve: BindingTrace, private val traceForImportResolve: BindingTrace,
private val debugName: String private val debugName: String,
private val inRootPackage: Boolean
) : JetScope { ) : JetScope {
private val importedScopesProvider = resolveSession.getStorageManager().createMemoizedFunction { private val importedScopesProvider = resolveSession.getStorageManager().createMemoizedFunction {
(directive: JetImportDirective) -> ImportDirectiveResolveCache(directive) (directive: JetImportDirective) -> ImportDirectiveResolveCache(directive)
} }
private val inRootPackage = containingDeclaration.getFqName().isRoot()
private val rootScope = JetModuleUtil.getImportsResolutionScope(resolveSession.getModuleDescriptor(), inRootPackage) private val rootScope = JetModuleUtil.getImportsResolutionScope(resolveSession.getModuleDescriptor(), inRootPackage)
private var directiveUnderResolve: JetImportDirective? = null private var directiveUnderResolve: JetImportDirective? = null