Better presentation for non-root packages in completion

This commit is contained in:
Valentin Kipyatkov
2015-07-16 14:20:50 +03:00
parent 16d503aed0
commit 4226b0b2b7
2 changed files with 17 additions and 8 deletions
@@ -205,14 +205,13 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
if (isNoQualifierContext() && (completionKind.descriptorKindFilter?.kindMask ?: 0).and(DescriptorKindFilter.PACKAGES_MASK) != 0) {
//TODO: move this code somewhere else
val packageNames = PackageIndexUtil.getSubPackageFqNames(FqName.ROOT, originalSearchScope, project, prefixMatcher.asNameFilter())
.map { it.shortName() }
.toMutableSet()
if (!ProjectStructureUtil.isJsKotlinModule(parameters.getOriginalFile() as JetFile)) {
JavaPsiFacade.getInstance(project).findPackage("")?.getSubPackages(originalSearchScope)?.forEach { psiPackage ->
val name = psiPackage.getName()
if (Name.isValidIdentifier(name!!)) {
packageNames.add(Name.identifier(name))
packageNames.add(FqName(name))
}
}
}
@@ -141,10 +141,17 @@ public class LookupElementFactory(
return element.withIconFromLookupObject()
}
public fun createLookupElementForPackage(shortName: Name): LookupElement {
return LookupElementBuilder.create(PackageLookupObject(shortName), shortName.asString())
.withInsertHandler(BaseDeclarationInsertHandler())
.withIconFromLookupObject()
public fun createLookupElementForPackage(name: FqName): LookupElement {
val shortName = name.shortName()
var element = LookupElementBuilder.create(PackageLookupObject(shortName), shortName.asString())
element = element.withInsertHandler(BaseDeclarationInsertHandler())
if (!name.parent().isRoot()) {
element = element.appendTailText(" (${name.asString()})", true)
}
return element.withIconFromLookupObject()
}
private data class PackageLookupObject(override val name: Name) : DeclarationLookupObject {
@@ -174,8 +181,11 @@ public class LookupElementFactory(
return createLookupElementForJavaClass(declaration, qualifyNestedClasses, includeClassTypeArguments)
}
if (descriptor is PackageViewDescriptor || descriptor is PackageFragmentDescriptor) {
return createLookupElementForPackage(descriptor.getName())
if (descriptor is PackageViewDescriptor) {
return createLookupElementForPackage(descriptor.fqName)
}
if (descriptor is PackageFragmentDescriptor) {
return createLookupElementForPackage(descriptor.fqName)
}
// for constructor use name and icon of containing class