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 com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.idea.presentation.KtLightClassListCellRenderer
|
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 {
|
class KotlinGotoTargetRenderProvider : GotoTargetRendererProvider {
|
||||||
override fun getRenderer(element: PsiElement, gotoData: GotoTargetHandler.GotoData): PsiElementListCellRenderer<*>? {
|
override fun getRenderer(element: PsiElement, gotoData: GotoTargetHandler.GotoData): PsiElementListCellRenderer<*>? {
|
||||||
@@ -30,6 +33,13 @@ class KotlinGotoTargetRenderProvider : GotoTargetRendererProvider {
|
|||||||
// Need to override default Java render
|
// Need to override default Java render
|
||||||
KtLightClassListCellRenderer()
|
KtLightClassListCellRenderer()
|
||||||
}
|
}
|
||||||
|
is KtDeclaration -> {
|
||||||
|
if (element.isEffectivelyActual()) {
|
||||||
|
DeclarationByModuleRenderer()
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import com.intellij.codeInsight.daemon.impl.MarkerType
|
|||||||
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
|
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
|
||||||
import com.intellij.codeInsight.navigation.ListBackgroundUpdaterTask
|
import com.intellij.codeInsight.navigation.ListBackgroundUpdaterTask
|
||||||
import com.intellij.icons.AllIcons
|
import com.intellij.icons.AllIcons
|
||||||
import com.intellij.ide.util.PsiClassOrFunctionalExpressionListCellRenderer
|
|
||||||
import com.intellij.openapi.actionSystem.IdeActions
|
import com.intellij.openapi.actionSystem.IdeActions
|
||||||
import com.intellij.openapi.editor.colors.CodeInsightColors
|
import com.intellij.openapi.editor.colors.CodeInsightColors
|
||||||
import com.intellij.openapi.editor.colors.EditorColorsManager
|
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.isInheritable
|
||||||
import org.jetbrains.kotlin.idea.core.isOverridable
|
import org.jetbrains.kotlin.idea.core.isOverridable
|
||||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
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.search.declarationsSearch.toPossiblyFakeLightMethods
|
||||||
import org.jetbrains.kotlin.idea.util.*
|
import org.jetbrains.kotlin.idea.util.*
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -151,20 +151,14 @@ interface TestableLineMarkerNavigator {
|
|||||||
fun getTargetsPopupDescriptor(element: PsiElement?): NavigationPopupDescriptor?
|
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(
|
private val SUBCLASSED_CLASS = MarkerType(
|
||||||
"SUBCLASSED_CLASS",
|
"SUBCLASSED_CLASS",
|
||||||
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
||||||
object : LineMarkerNavigator() {
|
object : LineMarkerNavigator() {
|
||||||
override fun browse(e: MouseEvent?, element: PsiElement?) {
|
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.isInheritable
|
||||||
import org.jetbrains.kotlin.idea.core.isOverridable
|
import org.jetbrains.kotlin.idea.core.isOverridable
|
||||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
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.search.declarationsSearch.toPossiblyFakeLightMethods
|
||||||
import org.jetbrains.kotlin.idea.util.*
|
import org.jetbrains.kotlin.idea.util.*
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -155,7 +156,7 @@ private val SUBCLASSED_CLASS = MarkerType(
|
|||||||
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
|
||||||
object : LineMarkerNavigator() {
|
object : LineMarkerNavigator() {
|
||||||
override fun browse(e: MouseEvent?, element: PsiElement?) {
|
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
|
package org.jetbrains.kotlin.idea.presentation
|
||||||
|
|
||||||
import com.intellij.ide.util.PsiElementListCellRenderer
|
|
||||||
import com.intellij.psi.presentation.java.ClassPresentationUtil
|
import com.intellij.psi.presentation.java.ClassPresentationUtil
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
class KtLightClassListCellRenderer : PsiElementListCellRenderer<KtLightClass>() {
|
class KtLightClassListCellRenderer : KtModuleSpecificListCellRenderer<KtLightClass>() {
|
||||||
override fun getElementText(element: KtLightClass) = ClassPresentationUtil.getNameForClass(element, false)
|
override fun getElementText(element: KtLightClass) = ClassPresentationUtil.getNameForClass(element, false)
|
||||||
|
|
||||||
// TODO: correct text for local, anonymous, enum entries ... etc
|
// TODO: correct text for local, anonymous, enum entries ... etc
|
||||||
override fun getContainerText(element: KtLightClass, name: String) = element.qualifiedName?.let { qName ->
|
override fun getContainerText(element: KtLightClass, name: String) = element.qualifiedName?.let { qName ->
|
||||||
"(" + FqName(qName).parent().asString() + ")"
|
"(" + 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