Skip to content

Commit 6860052

Browse files
committed
improve related item popup display
1 parent 1b0ea38 commit 6860052

File tree

5 files changed

+50
-20
lines changed

5 files changed

+50
-20
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright 2025 https://github.com/openapi-processor/openapi-processor-intellij
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.intellij
7+
8+
import com.intellij.navigation.GotoRelatedItem
9+
import com.intellij.psi.PsiElement
10+
import com.intellij.psi.presentation.java.SymbolPresentationUtil.getSymbolContainerText
11+
import com.intellij.psi.presentation.java.SymbolPresentationUtil.getSymbolPresentableText
12+
13+
14+
class GotoMethod(element: PsiElement): GotoRelatedItem(element, Goto.I18n.GROUP) {
15+
override fun getCustomName(): String {
16+
return getSymbolPresentableText(this.element!!)
17+
}
18+
19+
override fun getCustomContainerName(): String {
20+
return getSymbolContainerText(this.element!!)!!
21+
}
22+
}
23+
24+
object Goto {
25+
object I18n {
26+
val GROUP = i18n("goto.related.item.group")
27+
}
28+
}

src/main/kotlin/io/openapiprocessor/intellij/OpenApiPathLineMarker.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder
1111
import com.intellij.icons.AllIcons
1212
import com.intellij.openapi.components.service
1313
import com.intellij.psi.PsiElement
14+
import com.intellij.psi.PsiMethod
1415
import com.intellij.util.IconUtil
1516
import org.jetbrains.yaml.psi.YAMLKeyValue
1617
import org.slf4j.Logger
@@ -23,7 +24,6 @@ class OpenApiPathLineMarker: RelatedItemLineMarkerProvider() {
2324
element: PsiElement,
2425
result: MutableCollection<in RelatedItemLineMarkerInfo<*>>
2526
) {
26-
2727
if (element !is YAMLKeyValue)
2828
return
2929

@@ -39,25 +39,25 @@ class OpenApiPathLineMarker: RelatedItemLineMarkerProvider() {
3939
if (path !is YAMLKeyValue)
4040
return@forEach
4141

42-
val isPath = path.keyText.startsWith("/")
42+
val keyText = path.keyText
43+
val isPath = keyText.startsWith("/")
4344
if (!isPath) {
44-
log.warn("expected to find path but found {}", path.keyText)
45+
log.warn("expected to find path but found {}", keyText)
4546
}
4647

4748
val targets = pathTargetService.findPathTargets(path.project, path.keyText)
4849

49-
if (targets.isEmpty()) {
50-
log.warn("found no targets!")
51-
return@forEach
52-
}
53-
54-
val builder = NavigationGutterIconBuilder
55-
.create(icon)
50+
val markerInfo = NavigationGutterIconBuilder
51+
.create<PsiMethod>(
52+
icon,
53+
{ listOf(it) },
54+
{ listOf(GotoMethod(it)) })
5655
.setTooltipText(I18n.TOOLTIP_TEXT)
5756
.setPopupTitle(I18n.POPUP_TITLE)
5857
.setTargets(targets)
58+
.createLineMarkerInfo(path.key!!)
5959

60-
result.add(builder.createLineMarkerInfo(path.key!!))
60+
result.add(markerInfo)
6161
}
6262
}
6363

src/main/kotlin/io/openapiprocessor/intellij/PathTargetService.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package io.openapiprocessor.intellij
88
import com.intellij.openapi.components.Service
99
import com.intellij.openapi.project.Project
1010
import com.intellij.psi.PsiAnnotation
11-
import com.intellij.psi.PsiElement
1211
import com.intellij.psi.PsiMethod
1312
import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex
1413
import com.intellij.psi.search.GlobalSearchScope
@@ -17,22 +16,22 @@ import com.intellij.psi.util.PsiTreeUtil
1716
@Service
1817
class PathTargetService {
1918

20-
fun findPathTargets(project: Project, path: String): List<PsiElement> {
19+
fun findPathTargets(project: Project, path: String): List<PsiMethod> {
2120
return Annotations.KNOWN
2221
.map { findPathTargets(project, path, it) }
2322
.flatten()
2423
}
2524

26-
private fun findPathTargets(project: Project, path: String, annotation: Annotation): List<PsiElement> {
27-
val targets = mutableListOf<PsiElement>()
25+
private fun findPathTargets(project: Project, path: String, annotation: Annotation): List<PsiMethod> {
26+
val targets = mutableListOf<PsiMethod>()
2827
val matches = getAnnotations(project, annotation)
2928

3029
matches
3130
.filter { annotation.matches(it, path) }
3231
.forEach {
3332
val method = PsiTreeUtil.getParentOfType(it.navigationElement, PsiMethod::class.java)
3433
if (method != null)
35-
targets.add(method.navigationElement)
34+
targets.add(method)
3635
}
3736

3837
return targets

src/main/kotlin/io/openapiprocessor/intellij/TypeMappingPackageLineMarker.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory
3030
import javax.swing.Icon as JIcon
3131

3232
/**
33-
* line marker for the package-name key in the mapping.yaml. It navigates to any folder with the same package name.
33+
* Line marker for the package-name key in the mapping.yaml. It navigates to any folder with the same package name.
3434
*/
3535
class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
3636
private val log: Logger = LoggerFactory.getLogger(this.javaClass.name)
@@ -74,7 +74,7 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
7474
}
7575
}
7676

77-
class GotoPackage(element: PsiDirectory): GotoRelatedItem(element, I18n.GOTO_GROUP) {
77+
class GotoPackage(element: PsiDirectory): GotoRelatedItem(element, Goto.I18n.GROUP) {
7878
override fun getCustomName(): String {
7979
return "${getSymbolPresentableText(this.element!!)}"
8080
}
@@ -185,7 +185,6 @@ class TypeMappingPackageLineMarker : RelatedItemLineMarkerProvider() {
185185
object I18n {
186186
val TOOLTIP_TEXT = i18n("line.marker.type.mapping.package.tooltip")
187187
val POPUP_TITLE = i18n("line.marker.type.mapping.package.title")
188-
val GOTO_GROUP = i18n("goto.related.item.group")
189188
}
190189

191190
companion object {

src/main/kotlin/io/openapiprocessor/intellij/TypeMappingPathLineMarker.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.intellij.icons.AllIcons
1212
import com.intellij.openapi.components.service
1313
import com.intellij.psi.PsiElement
1414
import com.intellij.psi.PsiFile
15+
import com.intellij.psi.PsiMethod
1516
import com.intellij.util.IconUtil
1617
import org.jetbrains.yaml.psi.YAMLKeyValue
1718
import org.slf4j.Logger
@@ -54,7 +55,10 @@ class TypeMappingPathLineMarker : RelatedItemLineMarkerProvider() {
5455
}
5556

5657
val builder = NavigationGutterIconBuilder
57-
.create(Icon.`interface`)
58+
.create<PsiMethod>(
59+
Icon.`interface`,
60+
{ listOf(it) },
61+
{ listOf(GotoMethod(it)) })
5862
.setTooltipText(I18n.TOOLTIP_TEXT)
5963
.setPopupTitle(I18n.POPUP_TITLE)
6064
.setTargets(targets)

0 commit comments

Comments
 (0)