From cc6bfcfc7c848ba29b0d42d3cc9f9adf35719c34 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 31 Aug 2017 19:23:54 +0200 Subject: [PATCH] Attach super line marker to name identifier #KT-19843 Fixed --- .../markers/KotlinLineMarkerProvider.kt | 2 +- .../markers/SuperDeclarationMarker.kt | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt index 18dbfc079e6..0b1ca4ff7d2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/KotlinLineMarkerProvider.kt @@ -220,7 +220,7 @@ private fun collectSuperDeclarationMarkers(declaration: KtDeclaration, result: M // clearing the whole BindingTrace. result.add(LineMarkerInfo( - declaration, + anchor, anchor.textRange, if (implements) IMPLEMENTING_MARK else OVERRIDING_MARK, Pass.LINE_MARKERS, diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/SuperDeclarationMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/SuperDeclarationMarker.kt index 9644467de37..885aea1b1b3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/SuperDeclarationMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/SuperDeclarationMarker.kt @@ -32,13 +32,15 @@ import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations import org.jetbrains.kotlin.idea.search.usagesSearch.propertyDescriptor import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.RenderingFormat import java.awt.event.MouseEvent import java.util.* -object SuperDeclarationMarkerTooltip: Function { - override fun `fun`(ktDeclaration: KtDeclaration?): String? { +object SuperDeclarationMarkerTooltip: Function { + override fun `fun`(element: PsiElement): String? { + val ktDeclaration = element.getParentOfType(false) ?: return null val (elementDescriptor, overriddenDescriptors) = resolveDeclarationWithParents(ktDeclaration!!) if (overriddenDescriptors.isEmpty()) return "" @@ -63,25 +65,21 @@ object SuperDeclarationMarkerTooltip: Function { } } -class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandler, TestableLineMarkerNavigator { - override fun navigate(e: MouseEvent?, element: KtDeclaration?) { +class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandler, TestableLineMarkerNavigator { + override fun navigate(e: MouseEvent?, element: PsiElement?) { getTargetsPopupDescriptor(element)?.showPopup(e) } override fun getTargetsPopupDescriptor(element: PsiElement?): NavigationPopupDescriptor? { - if (element !is KtDeclaration) return null + val declaration = element?.getParentOfType(false) ?: return null - val (elementDescriptor, overriddenDescriptors) = resolveDeclarationWithParents(element) + val (elementDescriptor, overriddenDescriptors) = resolveDeclarationWithParents(declaration) if (overriddenDescriptors.isEmpty()) return null val superDeclarations = ArrayList() for (overriddenMember in overriddenDescriptors) { val declarations = DescriptorToSourceUtilsIde.getAllDeclarations(element.project, overriddenMember) - for (declaration in declarations) { - if (declaration is NavigatablePsiElement) { - superDeclarations.add(declaration) - } - } + superDeclarations += declarations.filterIsInstance() } val elementName = elementDescriptor!!.name