Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Line markers help to annotate any code with icons on the gutter. These icons may provide navigation to related code.

1. Define a line marker provider

Let's annotate usages of our properties within Java code and provide navigation to the definition of these properties.

More technical details for implementers

  • Please return line marker info for exact element you were asked for.
    For example, do not return class marker info if getLineMarkerInfo() was called for a method.
  • Please return relevant line marker info for as small element as possible.
    For example, do not return method marker for PsiMethod. Instead, return it for the PsiIdentifier which is a name of this method.

Even more technical details:

What happens when LineMarkerProvider returns something for too big PsiElement?

Inspection (specifically, LineMarkersPass) for performance reasons queries all LineMarkerProviders in two passes:

  1. first pass for all elements in visible area
  2. second pass for all the rest elements

If providers return nothing for either area, its line markers are cleared.
So if e.g. a method is half-visible (its name is visible but part of its body isn't) and
some poorly written LineMarkerProvider returned info for the PsiMethod instead of PsiIdentifier then:

  • the first pass removes line marker info because whole PsiMethod is not visible.
  • the second pass tries to add line marker info back because LineMarkerProvider is called for the PsiMethod at last.

As a result, line marker icon would blink annoyingly.
To fix this, rewrite LineMarkerProvider to return info for PsiIdentifier instead of PsiMethod:

2. Register the line marker provider

3. Run the project

Now you see the icon on the gutter and can navigate to the property definition.

  • No labels