diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt index b04712051d4..4dc6f00f186 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt @@ -19,16 +19,18 @@ package org.jetbrains.kotlin.idea.codeInsight import com.intellij.lang.ExpressionTypeProvider import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf +import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.RenderingFormat import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -36,6 +38,14 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinExpressionTypeProvider : ExpressionTypeProvider() { private val typeRenderer = DescriptorRenderer.COMPACT_WITH_SHORT_TYPES.withOptions { textFormat = RenderingFormat.HTML + classifierNamePolicy = object : ClassifierNamePolicy { + override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { + if (DescriptorUtils.isAnonymousObject(classifier)) { + return "<anonymous object>" + } + return ClassifierNamePolicy.SHORT.renderClassifier(classifier, renderer) + } + } } override fun getExpressionsAt(elementAt: PsiElement): List { diff --git a/idea/testData/codeInsight/expressionType/AnonymousObject.kt b/idea/testData/codeInsight/expressionType/AnonymousObject.kt new file mode 100644 index 00000000000..40e6c1a5f00 --- /dev/null +++ b/idea/testData/codeInsight/expressionType/AnonymousObject.kt @@ -0,0 +1,6 @@ +fun baz() = run { + val a = object {} + a // empty box +} + +// TYPE: a -> <anonymous object> diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/ExpressionTypeTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/ExpressionTypeTestGenerated.java index ce8a590c08d..a8d7ad40c80 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/ExpressionTypeTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/ExpressionTypeTestGenerated.java @@ -36,6 +36,12 @@ public class ExpressionTypeTestGenerated extends AbstractExpressionTypeTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/codeInsight/expressionType"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("AnonymousObject.kt") + public void testAnonymousObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/expressionType/AnonymousObject.kt"); + doTest(fileName); + } + @TestMetadata("BlockBodyFunction.kt") public void testBlockBodyFunction() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/expressionType/BlockBodyFunction.kt");