Add module-specific cell renderers to navigate to actuals correctly
So #KT-23685 Fixed
This commit is contained in:
@@ -22,6 +22,9 @@ import com.intellij.ide.util.PsiElementListCellRenderer
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.idea.presentation.KtLightClassListCellRenderer
|
||||
import org.jetbrains.kotlin.idea.presentation.DeclarationByModuleRenderer
|
||||
import org.jetbrains.kotlin.idea.util.isEffectivelyActual
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
|
||||
class KotlinGotoTargetRenderProvider : GotoTargetRendererProvider {
|
||||
override fun getRenderer(element: PsiElement, gotoData: GotoTargetHandler.GotoData): PsiElementListCellRenderer<*>? {
|
||||
@@ -30,6 +33,13 @@ class KotlinGotoTargetRenderProvider : GotoTargetRendererProvider {
|
||||
// Need to override default Java render
|
||||
KtLightClassListCellRenderer()
|
||||
}
|
||||
is KtDeclaration -> {
|
||||
if (element.isEffectivelyActual()) {
|
||||
DeclarationByModuleRenderer()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
null
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.intellij.codeInsight.daemon.impl.MarkerType
|
||||
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
|
||||
import com.intellij.codeInsight.navigation.ListBackgroundUpdaterTask
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.util.PsiClassOrFunctionalExpressionListCellRenderer
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.openapi.editor.colors.CodeInsightColors
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager
|
||||
@@ -41,6 +40,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.isInheritable
|
||||
import org.jetbrains.kotlin.idea.core.isOverridable
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.presentation.DeclarationByModuleRenderer
|
||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods
|
||||
import org.jetbrains.kotlin.idea.util.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -151,20 +151,14 @@ interface TestableLineMarkerNavigator {
|
||||
fun getTargetsPopupDescriptor(element: PsiElement?): NavigationPopupDescriptor?
|
||||
}
|
||||
|
||||
private class SubclassRenderer : PsiClassOrFunctionalExpressionListCellRenderer() {
|
||||
override fun getComparingObject(element: NavigatablePsiElement?): Comparable<Nothing> {
|
||||
val baseText = super.getComparingObject(element)
|
||||
val moduleName = element?.module?.name ?: return baseText
|
||||
return "$baseText [$moduleName]"
|
||||
}
|
||||
}
|
||||
|
||||
private val SUBCLASSED_CLASS = MarkerType(
|
||||
"SUBCLASSED_CLASS",
|
||||
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
||||
object : LineMarkerNavigator() {
|
||||
override fun browse(e: MouseEvent?, element: PsiElement?) {
|
||||
getPsiClass(element)?.let { MarkerType.navigateToSubclassedClass(e, it, SubclassRenderer()) }
|
||||
getPsiClass(element)?.let {
|
||||
MarkerType.navigateToSubclassedClass(e, it, DeclarationByModuleRenderer())
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
+2
-1
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.isInheritable
|
||||
import org.jetbrains.kotlin.idea.core.isOverridable
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.presentation.DeclarationByModuleRenderer
|
||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods
|
||||
import org.jetbrains.kotlin.idea.util.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -155,7 +156,7 @@ private val SUBCLASSED_CLASS = MarkerType(
|
||||
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
||||
object : LineMarkerNavigator() {
|
||||
override fun browse(e: MouseEvent?, element: PsiElement?) {
|
||||
getPsiClass(element)?.let { MarkerType.navigateToSubclassedClass(e, it) }
|
||||
getPsiClass(element)?.let { MarkerType.navigateToSubclassedClass(e, it, DeclarationByModuleRenderer()) }
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.presentation
|
||||
|
||||
import com.intellij.psi.NavigatablePsiElement
|
||||
import com.intellij.psi.presentation.java.SymbolPresentationUtil
|
||||
|
||||
class DeclarationByModuleRenderer : KtModuleSpecificListCellRenderer<NavigatablePsiElement>() {
|
||||
override fun getContainerText(element: NavigatablePsiElement?, name: String?) = ""
|
||||
|
||||
override fun getElementText(element: NavigatablePsiElement): String =
|
||||
SymbolPresentationUtil.getSymbolPresentableText(element)
|
||||
}
|
||||
@@ -16,18 +16,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.presentation
|
||||
|
||||
import com.intellij.ide.util.PsiElementListCellRenderer
|
||||
import com.intellij.psi.presentation.java.ClassPresentationUtil
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
class KtLightClassListCellRenderer : PsiElementListCellRenderer<KtLightClass>() {
|
||||
class KtLightClassListCellRenderer : KtModuleSpecificListCellRenderer<KtLightClass>() {
|
||||
override fun getElementText(element: KtLightClass) = ClassPresentationUtil.getNameForClass(element, false)
|
||||
|
||||
// TODO: correct text for local, anonymous, enum entries ... etc
|
||||
override fun getContainerText(element: KtLightClass, name: String) = element.qualifiedName?.let { qName ->
|
||||
"(" + FqName(qName).parent().asString() + ")"
|
||||
} ?: ""
|
||||
|
||||
override fun getIconFlags() = 0
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.presentation
|
||||
|
||||
import com.intellij.ide.util.PsiElementListCellRenderer
|
||||
import com.intellij.psi.NavigatablePsiElement
|
||||
import org.jetbrains.kotlin.idea.util.module
|
||||
|
||||
abstract class KtModuleSpecificListCellRenderer<T : NavigatablePsiElement> : PsiElementListCellRenderer<T>() {
|
||||
override fun getIconFlags() = 0
|
||||
|
||||
override fun getComparingObject(element: T?): Comparable<Nothing> {
|
||||
val baseText = super.getComparingObject(element)
|
||||
val moduleName = element?.module?.name ?: return baseText
|
||||
return "$baseText [$moduleName]"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user