Filter out typealiases invisible due to API_VERSION < their SinceKotlin version, when determining excluded imports.

This commit is contained in:
Ilya Gorbunov
2016-10-20 21:23:21 +03:00
parent 11b03ebbb3
commit 82364ad3e5
8 changed files with 54 additions and 6 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.resolve.lazy
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.name.FqName
@@ -24,6 +25,7 @@ import org.jetbrains.kotlin.name.isChildOf
import org.jetbrains.kotlin.name.isSubpackageOf
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.checkSinceKotlinVersionAccessibility
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.storage.StorageManager
@@ -33,18 +35,22 @@ import org.jetbrains.kotlin.utils.addToStdlib.check
class DefaultImportProvider(
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
private val targetPlatform: TargetPlatform
private val targetPlatform: TargetPlatform,
private val languageVersionSettings: LanguageVersionSettings
) {
val defaultImports: List<ImportPath>
get() = targetPlatform.defaultImports
val excludedImports: List<FqName> by storageManager.createLazyValue {
val packagesWithAliases = listOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.TEXT_PACKAGE_FQ_NAME)
val builtinTypeAliases = moduleDescriptor.allDependentModules.flatMap { dependentModule ->
packagesWithAliases.map(dependentModule::getPackage).flatMap {
it.memberScope.getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES).filterIsInstance<TypeAliasDescriptor>()
}
}
val builtinTypeAliases = moduleDescriptor.allDependentModules
.flatMap { dependentModule ->
packagesWithAliases.map(dependentModule::getPackage).flatMap {
it.memberScope.getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES).filterIsInstance<TypeAliasDescriptor>()
}
}
.filter { it.checkSinceKotlinVersionAccessibility(languageVersionSettings) }
val nonKotlinDefaultImportedPackages =
defaultImports