From f2c5fee1cf131a165806d1ce58185c3f4fa6ba91 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 7 Oct 2016 20:44:28 +0300 Subject: [PATCH] Consider only direct children of non-kotlin default imported packages when looking for aliased types. --- .../descriptors/impl/ModuleDescriptorImpl.kt | 14 +++++++++++--- .../src/org/jetbrains/kotlin/name/FqNamesUtil.kt | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 691096e3b97..e7d05e850bd 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -54,14 +55,21 @@ class ModuleDescriptorImpl @JvmOverloads constructor( val packagesWithAliases = listOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.TEXT_PACKAGE_FQ_NAME) val dependencies = this.dependencies.sure { "Dependencies of module $id were not set" } val builtinTypeAliases = dependencies.allDependencies.filter { it != this }.flatMap { - System.out.flush() packagesWithAliases.map(it::getPackage).flatMap { it.memberScope.getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES).filterIsInstance() } } - val nonKotlinDefaultImportedPackages = defaultImports.filter { it.isAllUnder }.mapNotNull { it.fqnPart().check { !it.isSubpackageOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) } } - val nonKotlinAliasedTypeFqNames = builtinTypeAliases.mapNotNull { it.expandedType.constructor.declarationDescriptor?.fqNameSafe }.filter { nonKotlinDefaultImportedPackages.any(it::isSubpackageOf) } + val nonKotlinDefaultImportedPackages = + defaultImports + .filter { it.isAllUnder } + .mapNotNull { + it.fqnPart().check { !it.isSubpackageOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) } + } + val nonKotlinAliasedTypeFqNames = + builtinTypeAliases + .mapNotNull { it.expandedType.constructor.declarationDescriptor?.fqNameSafe } + .filter { nonKotlinDefaultImportedPackages.any(it::isChildOf) } excludedImports + nonKotlinAliasedTypeFqNames } diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt index 89f724e1cea..b71e4f5a67e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt @@ -24,6 +24,8 @@ fun FqName.isSubpackageOf(packageName: FqName): Boolean { } } +fun FqName.isChildOf(packageName: FqName): Boolean = parentOrNull() == packageName + private fun isSubpackageOf(subpackageNameStr: String, packageNameStr: String): Boolean { return subpackageNameStr.startsWith(packageNameStr) && subpackageNameStr[packageNameStr.length] == '.' }