package com.haskforce.codeInsight;
import com.haskforce.HaskellIcons;
import com.haskforce.psi.HaskellTypes;
import com.haskforce.utils.HaskellUtil;
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo;
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider;
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.List;
/**
* A disabled LineMarkerProvider. Will fill the left icon tray with Haskell
* icons if enabled. Mainly useful for debugging reference resolving.
*/
public class HaskellLineMarkerProvider extends RelatedItemLineMarkerProvider {
@Override
protected void collectNavigationMarkers(@NotNull PsiElement element,
Collection<? super RelatedItemLineMarkerInfo> result) {
if (false && element instanceof PsiNamedElement) {
PsiNamedElement namedElement = (PsiNamedElement) element;
String value = namedElement.getName();
if (value != null) {
Project project = element.getProject();
final List<HaskellUtil.FoundDefinition> found =
HaskellUtil.findDefinitionNode(project, value, namedElement);
final List<PsiNamedElement> namedNodes = ContainerUtil.newArrayList();
for (HaskellUtil.FoundDefinition fd : found) {
namedNodes.add(fd.element);
}
if (namedNodes.size() > 0) {
NavigationGutterIconBuilder<PsiElement> builder =
NavigationGutterIconBuilder.create(HaskellIcons.FILE).
setTargets(namedNodes).
setTooltipText("Navigate to element definition");
result.add(builder.createLineMarkerInfo(element));
}
}
}
}
}