@@ -11,6 +11,7 @@ import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder
1111import com.intellij.codeInsight.navigation.impl.PsiTargetPresentationRenderer
1212import com.intellij.icons.AllIcons
1313import com.intellij.ide.util.ModuleRendererFactory
14+ import com.intellij.navigation.GotoRelatedItem
1415import com.intellij.openapi.components.service
1516import com.intellij.openapi.module.Module
1617import com.intellij.openapi.module.ModuleUtil
@@ -20,7 +21,8 @@ import com.intellij.platform.backend.presentation.TargetPresentation
2021import com.intellij.psi.PsiDirectory
2122import com.intellij.psi.PsiElement
2223import com.intellij.psi.PsiFile
23- import com.intellij.psi.presentation.java.SymbolPresentationUtil
24+ import com.intellij.psi.presentation.java.SymbolPresentationUtil.getSymbolContainerText
25+ import com.intellij.psi.presentation.java.SymbolPresentationUtil.getSymbolPresentableText
2426import com.intellij.util.TextWithIcon
2527import org.jetbrains.yaml.psi.YAMLKeyValue
2628import org.slf4j.Logger
@@ -36,11 +38,11 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
3638 class Renderer () : PsiTargetPresentationRenderer<PsiElement>() {
3739
3840 override fun getContainerText (element : PsiElement ): String? {
39- return SymbolPresentationUtil . getSymbolContainerText(element)
41+ return getSymbolContainerText(element)
4042 }
4143
4244 override fun getElementText (element : PsiElement ): String {
43- return SymbolPresentationUtil . getSymbolPresentableText(element)
45+ return getSymbolPresentableText(element)
4446 }
4547
4648 override fun getIcon (element : PsiElement ): JIcon ? {
@@ -72,6 +74,18 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
7274 }
7375 }
7476
77+ class GotoPackage (element : PsiDirectory ): GotoRelatedItem(element, I18n .GOTO_GROUP ) {
78+ override fun getCustomName (): String {
79+ return " ${getSymbolPresentableText(this .element!! )} "
80+ }
81+
82+ override fun getCustomContainerName (): String {
83+ val loc = element!! .getUserData(PACKAGE_LOCATION_USER_KEY )!!
84+ val pkg = getSymbolContainerText(element!! )!!
85+ return " $pkg - $loc "
86+ }
87+ }
88+
7589 override fun collectNavigationMarkers (
7690 element : PsiElement ,
7791 result : MutableCollection <in RelatedItemLineMarkerInfo <* >>
@@ -83,31 +97,41 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
8397 if (element.text != PACKAGE_KEY )
8498 return
8599
86- val keyValue = element.parent
87- if (keyValue !is YAMLKeyValue )
88- return
89-
90- val pkgName = keyValue.valueText
91- val module = findModule(element.containingFile)
100+ val info = createLineMarkerInfo(element)
92101 ? : return
93102
103+ result.add(info)
104+ }
105+
106+ private fun createLineMarkerInfo (packageKey : PsiElement ): RelatedItemLineMarkerInfo <* >? {
107+ val packageKeyValue = packageKey.parent
108+ if (packageKeyValue !is YAMLKeyValue )
109+ return null
110+
111+ val pkgName = packageKeyValue.valueText
112+ val module = findModule(packageKeyValue.containingFile)
113+ ? : return null
114+
94115 val pkgDirs = service<TargetPackageService >()
95116 .findPackageDirs(pkgName, module)
96117
97118 val targets = addLocations(pkgDirs)
98119 if (targets.isEmpty()) {
99120 log.warn(" found no targets!" )
100- return
121+ return null
101122 }
102123
103124 val builder = NavigationGutterIconBuilder
104- .create(Icon .`package`)
125+ .create<PsiDirectory >(
126+ Icon .`package`,
127+ { listOf (it) },
128+ { listOf (GotoPackage (it)) })
105129 .setTooltipText(I18n .TOOLTIP_TEXT )
106130 .setPopupTitle(I18n .POPUP_TITLE )
107131 .setTargets(targets)
108132 .setTargetRenderer { Renderer () }
109133
110- result.add( builder.createLineMarkerInfo(element) )
134+ return builder.createLineMarkerInfo(packageKey )
111135 }
112136
113137 private fun addLocations (pkgDirs : List <PsiDirectory >): List <PsiDirectory > {
@@ -161,6 +185,7 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
161185 object I18n {
162186 val TOOLTIP_TEXT = i18n(" line.marker.type.mapping.package.tooltip" )
163187 val POPUP_TITLE = i18n(" line.marker.type.mapping.package.title" )
188+ val GOTO_GROUP = i18n(" goto.related.item.group" )
164189 }
165190
166191 companion object {
0 commit comments