diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt index ec7ffa27fe0..653f77474bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt @@ -8,12 +8,15 @@ package org.jetbrains.kotlin.idea.parameterInfo import com.intellij.application.options.CodeStyle import com.intellij.codeInsight.hints.InlayInfo import com.intellij.psi.PsiElement +import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention +import org.jetbrains.kotlin.idea.intentions.branchedTransformations.lineCount +import org.jetbrains.kotlin.idea.refactoring.getLineNumber import org.jetbrains.kotlin.idea.references.resolveMainReferenceToDescriptors import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.incremental.components.NoLookupLocation @@ -35,6 +38,7 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.containsError import org.jetbrains.kotlin.types.typeUtil.immediateSupertypes import org.jetbrains.kotlin.types.typeUtil.isEnum +import org.jetbrains.kotlin.types.typeUtil.isUnit //hack to separate type presentation from param info presentation const val TYPE_INFO_PREFIX = "@TYPE@" @@ -99,7 +103,20 @@ fun provideTypeHint(element: KtCallableDeclaration, offset: Int): List 1) { + val propertyLine = element.getLineNumber() + val equalsTokenLine = element.equalsToken?.getLineNumber() ?: -1 + val initializerLine = element.initializer?.getLineNumber() ?: -1 + if (propertyLine == equalsTokenLine && propertyLine != initializerLine) { + val spaceBeforeProperty = (element.prevSibling as? PsiWhiteSpace)?.text?.reversed()?.takeWhile { it != '\n' } + val spaceBeforeInitializer = (element.initializer?.prevSibling as? PsiWhiteSpace)?.text?.reversed()?.takeWhile { it != '\n' } + if (spaceBeforeProperty == spaceBeforeInitializer) { + return emptyList() + } + } + } + return if (isUnclearType(type, element)) { val settings = CodeStyle.getCustomSettings(element.containingFile, KotlinCodeStyleSettings::class.java) val declString = buildString { diff --git a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt index b31a62f7278..00ccd5874ef 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayTypeHintsTest.kt @@ -252,4 +252,37 @@ class InlayTypeHintsTest : KotlinLightCodeInsightFixtureTestCase() { """ ) } + + fun testUnitLocalVariable() { + checkLocalVariable( + """ + fun foo() { + val x = + + println("Foo") + } + """ + ) + } + + fun testUnitLocalVariable2() { + checkLocalVariable( + """ + fun foo() { + val x = + println("Foo") + } + """ + ) + } + + fun testUnitLocalVariable3() { + checkLocalVariable( + """ + fun foo() { + val x = println("Foo") + } + """ + ) + } }