From 468f7f234f55465ee7e43eeddc4e21782a9df749 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 23 May 2018 15:10:06 +0300 Subject: [PATCH] Don't show default companion name in inlay type hints (KT-22432) #KT-22432 Fixed --- .../kotlin/idea/parameterInfo/TypeHints.kt | 18 +++++++++++- .../idea/parameterInfo/InlayTypeHintsTest.kt | 28 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt index bcc98537c5b..0b972f6e121 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt @@ -11,6 +11,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall @@ -25,7 +26,10 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.RenderingFormat +import org.jetbrains.kotlin.renderer.renderFqName import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.isCompanionObject +import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier import org.jetbrains.kotlin.types.KotlinType @@ -48,7 +52,19 @@ class ImportAwareClassifierNamePolicy( } } - return ClassifierNamePolicy.SHORT.renderClassifier(classifier, renderer) + return shortNameWithCompanionNameSkip(classifier, renderer) + } + + private fun shortNameWithCompanionNameSkip(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { + if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name) + + val qualifiedNameParts = classifier.parentsWithSelf + .takeWhile { it is ClassifierDescriptor } + .filter { !(it.isCompanionObject() && it.name == SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) } + .mapTo(ArrayList()) { it.name } + .reversed() + + return renderFqName(qualifiedNameParts) } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt index 66329bc81ad..b2d7d9c82eb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt @@ -128,4 +128,32 @@ class InlayTypeHintsTest : KotlinLightCodeInsightFixtureTestCase() { """val entries = mapOf(1 to "1").entries""" ) } + + fun testTypeInCompanion() { + checkPropertyHint( + """ + class A { + companion object { + class InA + fun provideInA() = InA() + } + } + val inA = A.provideInA() + """.trimIndent() + ) + } + + fun testTypeInNonDefaultCompanion() { + checkPropertyHint( + """ + class A { + companion object N { + class InA + fun provideInA() = InA() + } + } + val inA = A.provideInA() + """.trimIndent() + ) + } }