Completion: corrected for class nested into class object

This commit is contained in:
Valentin Kipyatkov
2014-08-27 22:07:29 +04:00
parent 89aaa018fe
commit ed5c5426e6
6 changed files with 56 additions and 7 deletions
@@ -26,6 +26,8 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.renderer.DescriptorRenderer
import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.descriptors.ClassKind
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
enum class ItemPriority {
DEFAULT
@@ -63,13 +65,14 @@ fun qualifiedNameForSourceCode(descriptor: ClassDescriptor): String? {
val name = descriptor.getName()
if (name.isSpecial()) return null
val nameString = DescriptorRenderer.SOURCE_CODE.renderName(name)
val parent = descriptor.getContainingDeclaration()
val qualifier = when (parent) {
is ClassDescriptor -> qualifiedNameForSourceCode(parent)
is PackageViewDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(parent.getFqName())
is PackageFragmentDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(parent.fqName)
else -> null
}
val qualifier = qualifierName(descriptor.getContainingDeclaration())
return if (qualifier != null && qualifier != "") qualifier + "." + nameString else nameString
}
private fun qualifierName(descriptor: DeclarationDescriptor): String? = when (descriptor) {
is ClassDescriptor -> if (descriptor.getKind() != ClassKind.CLASS_OBJECT) qualifiedNameForSourceCode(descriptor) else qualifierName(descriptor.getContainingDeclaration())
is PackageViewDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(descriptor.getFqName())
is PackageFragmentDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(descriptor.fqName)
else -> null
}
@@ -0,0 +1,9 @@
class A {
class object {
class Inner {}
}
}
val v: A.Inner = <caret>
// ELEMENT: Inner
@@ -0,0 +1,9 @@
class A {
class object {
class Inner {}
}
}
val v: A.Inner = A.Inner()<caret>
// ELEMENT: Inner
@@ -0,0 +1,9 @@
class A {
object O {
class Inner {}
val v: Inner = <caret>
}
}
// ELEMENT: Inner
@@ -0,0 +1,9 @@
class A {
object O {
class Inner {}
val v: Inner = Inner()<caret>
}
}
// ELEMENT: Inner
@@ -88,6 +88,16 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
doTest("idea/testData/completion/handlers/smart/AutoCompleteAfterAs3.kt");
}
@TestMetadata("ClassInClassObject.kt")
public void testClassInClassObject() throws Exception {
doTest("idea/testData/completion/handlers/smart/ClassInClassObject.kt");
}
@TestMetadata("ClassInObject.kt")
public void testClassInObject() throws Exception {
doTest("idea/testData/completion/handlers/smart/ClassInObject.kt");
}
@TestMetadata("ClassObjectMethod1.kt")
public void testClassObjectMethod1() throws Exception {
doTest("idea/testData/completion/handlers/smart/ClassObjectMethod1.kt");