Fixed completion of explicitly imported non-top level packages broken by optimization before

This commit is contained in:
Valentin Kipyatkov
2015-07-16 17:26:26 +03:00
parent 4cfe92f1e5
commit ace38ac57f
7 changed files with 43 additions and 22 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindExclude
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.JetScopeImpl
import org.jetbrains.kotlin.utils.Printer
@@ -47,6 +48,7 @@ public class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, pr
override fun getDescriptors(kindFilter: DescriptorKindFilter,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
if (!kindFilter.acceptsKinds(DescriptorKindFilter.PACKAGES_MASK)) return listOf()
if (fqName.isRoot() && kindFilter.excludes.contains(DescriptorKindExclude.TopLevelPackages)) return listOf()
val subFqNames = moduleDescriptor.getSubPackagesOf(fqName, nameFilter)
val result = ArrayList<DeclarationDescriptor>(subFqNames.size())
@@ -229,4 +229,17 @@ public trait DescriptorKindExclude {
override val fullyExcludedDescriptorKinds: Int get() = 0
}
public object TopLevelPackages : DescriptorKindExclude {
override fun excludes(descriptor: DeclarationDescriptor): Boolean {
val fqName = when (descriptor) {
is PackageFragmentDescriptor -> descriptor.fqName
is PackageViewDescriptor -> descriptor.fqName
else -> return false
}
return fqName.parent().isRoot()
}
override val fullyExcludedDescriptorKinds: Int get() = 0
}
}