2016-10-02 8 views
0

Ich muss eine benutzerdefinierte Aktion ausführen, wenn auf meine Markierung geklickt wird.Wie höre ich Mausklicks von RelatedItemLineMarkerInfo?

Ich habe versucht, nach Tutorial,

NavigationGutterIconBuilder<PsiElement> builder = 
     NavigationGutterIconBuilder.create(LessonScriptIcons.PUZZLE). 
       setTarget(this). 
       setTooltipText("Navigate to component"); 

RelatedItemLineMarkerInfo<PsiElement> m = builder.createLineMarkerInfo(this); 

Aber ich kann nicht herausfinden, wie man die Markierung des Navigations Handler zu bekommen, oder auf andere Weise an diese Markierung die Ereignisse zu hören. (Der Cursor, der sich an den Anfang von "diesem" Element bewegt, ist ein leicht unerwünschter, aber unwichtiger Nebeneffekt, der sich gut unterdrücken ließe).

Dann habe ich versucht, dies:

RelatedItemLineMarkerInfo marker = new RelatedItemLineMarkerInfo(this, getTextRange(), MyIcons.VOLUME, 0, tooltipProvider, handler, GutterIconRenderer.Alignment.CENTER, new ArrayList<GotoRelatedItem>()); 

Dieser Ansatz erlaubt es mir die Markierung des Mausklicks zu hören. Jetzt habe ich jedoch ein besonderes Problem: Wenn die markierte Codezeile bearbeitet wird, führt dies zu doppelten, dreifachen usw. Markierungen in der Rinne.

Was ist der richtige Weg?

Antwort

0

Es stellte sich heraus, dass ich einen Pass angeben musste.

int pass = Pass.UPDATE_OVERRIDEN_MARKERS; 

RelatedItemLineMarkerInfo marker = new RelatedItemLineMarkerInfo(this, getTextRange(), MyIcons.VOLUME, pass, tooltipProvider, handler, GutterIconRenderer.Alignment.CENTER, new ArrayList<GotoRelatedItem>()); 

Ich hatte Pass.UPDATE_OVERRIDEN_MARKERS zu verwenden, auch wenn IntelliJ es als veraltet markiert und das wird es in Kürze (siehe Link unten) entfernt werden. Die von IntelliJ empfohlene Konstante Pass.LINE_MARKERS führt jedoch zu doppelten Markern.

https://github.com/JetBrains/intellij-community/blob/master/platform/analysis-impl/src/com/intellij/codeHighlighting/Pass.java

Verwandte Themen