Changed priority for default imports + default imports include all built-ins explicitly for java module

#KT-4374 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-01-19 19:17:23 +03:00
parent ae9ebbec7d
commit b9d47ffe7a
14 changed files with 76 additions and 86 deletions
@@ -26,14 +26,13 @@ import java.util.ArrayList
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.utils.Printer
public class Importer(private val platformToKotlinClassMap: PlatformToKotlinClassMap) {
public class Importer {
private val allUnderImportScopes = ArrayList<JetScope>()
private val explicitImports = ArrayList<Pair<DeclarationDescriptor, Name>>()
public fun addAllUnderImport(descriptor: DeclarationDescriptor) {
if (descriptor is PackageViewDescriptor) {
val scope = NoSubpackagesInPackageScope(descriptor)
allUnderImportScopes.add(createFilteringScope(scope, descriptor, platformToKotlinClassMap))
allUnderImportScopes.add(NoSubpackagesInPackageScope(descriptor))
}
else if (descriptor is ClassDescriptor && descriptor.getKind() != ClassKind.OBJECT) {
allUnderImportScopes.add(descriptor.getStaticScope())
@@ -45,12 +44,6 @@ public class Importer(private val platformToKotlinClassMap: PlatformToKotlinClas
}
}
private fun createFilteringScope(scope: JetScope, descriptor: PackageViewDescriptor, platformToKotlinClassMap: PlatformToKotlinClassMap): JetScope {
val kotlinAnalogsForClassesInside = platformToKotlinClassMap.mapPlatformClassesInside(descriptor)
if (kotlinAnalogsForClassesInside.isEmpty()) return scope
return FilteringScope(scope) { descriptor -> kotlinAnalogsForClassesInside.all { it.getName() != descriptor.getName() } }
}
public fun addAliasImport(descriptor: DeclarationDescriptor, aliasName: Name) {
explicitImports.add(descriptor to aliasName)
}
@@ -99,7 +99,7 @@ public class ImportsResolver {
) {
@NotNull JetScope rootScope = JetModuleUtil.getSubpackagesOfRootScope(module);
Importer importer = new Importer(module.getPlatformToKotlinClassMap());
Importer importer = new Importer();
if (lookupMode == LookupMode.EVERYTHING) {
fileScope.clearImports();
}
@@ -40,7 +40,7 @@ class LazyFileScope private(
debugName: String
) : ChainedScope(containingDeclaration,
debugName,
*(listOf(aliasImportsScope, defaultAliasImportsScope, currentPackageMembersScope, rootPackagesScope, allUnderImportsScope, defaultAllUnderImportsScope) + additionalScopes).copyToArray()) {
*(listOf(aliasImportsScope, currentPackageMembersScope, rootPackagesScope, defaultAliasImportsScope, defaultAllUnderImportsScope, allUnderImportsScope) + additionalScopes).copyToArray()) {
public fun forceResolveAllImports() {
aliasImportsScope.forceResolveAllContents()
@@ -98,7 +98,7 @@ class LazyImportScope(
val directiveImportScope = WritableScopeImpl(JetScope.Empty, containingDeclaration, RedeclarationHandler.DO_NOTHING, "Scope for import '" + directive.getDebugText() + "' resolve in " + toString())
directiveImportScope.changeLockLevel(WritableScope.LockLevel.BOTH)
val importer = Importer(resolveSession.getModuleDescriptor().platformToKotlinClassMap)
val importer = Importer()
directiveUnderResolve = directive
val descriptors: Collection<DeclarationDescriptor>