Fixed EA-63622 - IAE: FqName.validateFqName

This commit is contained in:
Valentin Kipyatkov
2014-12-24 15:10:51 +03:00
parent 64da34e78b
commit 9f6d32f1f6
4 changed files with 34 additions and 5 deletions
@@ -30,7 +30,6 @@ import org.jetbrains.jet.plugin.completion.handlers.*
import org.jetbrains.jet.renderer.DescriptorRenderer
import com.intellij.psi.PsiClass
import org.jetbrains.jet.asJava.KotlinLightClass
import org.jetbrains.jet.lang.resolve.java.JavaResolverUtils
import com.intellij.codeInsight.lookup.LookupElementDecorator
import com.intellij.codeInsight.lookup.LookupElementPresentation
import org.jetbrains.jet.lang.types.JetType
@@ -178,10 +177,15 @@ public class LookupElementFactory(
if (descriptor is CallableDescriptor) {
if (descriptor.getExtensionReceiverParameter() != null) {
val container = descriptor.getContainingDeclaration()
val containerPresentation = if (container is ClassDescriptor)
DescriptorUtils.getFqNameFromTopLevelClass(container)
else
DescriptorUtils.getFqName(container)
val containerPresentation = if (container is ClassDescriptor) {
if (container.getKind() != ClassKind.CLASS_OBJECT)
DescriptorUtils.getFqNameFromTopLevelClass(container).toString()
else
"class object for " + DescriptorUtils.getFqNameFromTopLevelClass(container.getContainingDeclaration())
}
else {
DescriptorUtils.getFqName(container).toString()
}
val originalReceiver = descriptor.getOriginal().getExtensionReceiverParameter()!!
val receiverPresentation = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(originalReceiver.getType())
element = element.appendTailText(" for $receiverPresentation in $containerPresentation", true)
@@ -0,0 +1,13 @@
package p
class B
class R {
class object {
fun B.f() {
this.<caret>
}
}
}
// EXIST: { itemText: "f", tailText: "() for B in class object for R" }
@@ -160,6 +160,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("ExtensionFunctionInClassObject.kt")
public void testExtensionFunctionInClassObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ExtensionFunctionInClassObject.kt");
doTest(fileName);
}
@TestMetadata("ExtensionInsideFunction.kt")
public void testExtensionInsideFunction() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ExtensionInsideFunction.kt");
@@ -160,6 +160,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("ExtensionFunctionInClassObject.kt")
public void testExtensionFunctionInClassObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ExtensionFunctionInClassObject.kt");
doTest(fileName);
}
@TestMetadata("ExtensionInsideFunction.kt")
public void testExtensionInsideFunction() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ExtensionInsideFunction.kt");