package com.simpleplugin; import com.intellij.codeInsight.daemon.*; import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.java.PsiJavaTokenImpl; import com.simpleplugin.psi.SimpleProperty; import org.jetbrains.annotations.NotNull; import java.util.*; public class SimpleLineMarkerProvider extends RelatedItemLineMarkerProvider { @Override protected void collectNavigationMarkers(@NotNull PsiElement element, @NotNull Collection result) { if (element instanceof PsiJavaTokenImpl && element.getParent() instanceof PsiLiteralExpression) { PsiLiteralExpression literalExpression = (PsiLiteralExpression) element.getParent(); String value = literalExpression.getValue() instanceof String ? (String) literalExpression.getValue() : null; if (value != null && value.startsWith("simple" + ":")) { Project project = element.getProject(); final List properties = SimpleUtil.findProperties(project, value.substring(7)); if (properties.size() > 0) { NavigationGutterIconBuilder builder = NavigationGutterIconBuilder.create(SimpleIcons.FILE). setTargets(properties). setTooltipText("Navigate to a simple property"); result.add(builder.createLineMarkerInfo(element)); } } } } }