diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/hints/KotlinLambdasHintsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/hints/KotlinLambdasHintsProvider.kt index 0db01dbca73..3dbe6d3b84f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/hints/KotlinLambdasHintsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/hints/KotlinLambdasHintsProvider.kt @@ -7,10 +7,16 @@ package org.jetbrains.kotlin.idea.codeInsight.hints import com.intellij.codeInsight.hints.ImmediateConfigurable import com.intellij.codeInsight.hints.InlayHintsSink +import com.intellij.codeInsight.hints.presentation.InlayPresentation import com.intellij.codeInsight.hints.presentation.PresentationRenderer import com.intellij.openapi.editor.Editor +import com.intellij.openapi.editor.EditorCustomElementRenderer +import com.intellij.openapi.editor.Inlay +import com.intellij.openapi.editor.markup.TextAttributes import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.util.application.invokeLater +import java.awt.Graphics +import java.awt.Rectangle /** * Please note that the executable test class is currently not generated. The thing is that [KotlinLambdasHintsProvider] utilizes a hack @@ -49,8 +55,11 @@ class KotlinLambdasHintsProvider : KotlinAbstractHintsProvider - editor.inlayModel.getAfterLineEndElementsInRange(p.offset, p.offset).singleOrNull()?.dispose() - editor.inlayModel.addAfterLineEndElement(p.offset, p.relatesToPrecedingText, PresentationRenderer(p.presentation)) + val logicalLine = editor.offsetToLogicalPosition(p.offset).line + editor.inlayModel.getAfterLineEndElementsForLogicalLine(logicalLine) + .filter { it.renderer is LambdaHintsRenderer } + .forEach { it.dispose() } + editor.inlayModel.addAfterLineEndElement(p.offset, p.relatesToPrecedingText, LambdaHintsRenderer(p.presentation)) } } } @@ -73,4 +82,29 @@ class KotlinLambdasHintsProvider : KotlinAbstractHintsProvider, g: Graphics, targetRegion: Rectangle, textAttributes: TextAttributes) { + delegate.paint(inlay, g, targetRegion, textAttributes) + } + + override fun calcWidthInPixels(inlay: Inlay<*>): Int { + return delegate.calcWidthInPixels(inlay) + } + + // this should not be shown anywhere + override fun getContextMenuGroupId(inlay: Inlay<*>): String { + return "DummyActionGroup" + } + + override fun toString(): String { + return delegate.toString() + } + } } \ No newline at end of file