2016-10-02 51 views
0

我需要在點擊標記時運行自定義操作。如何從RelatedItemLineMarkerInfo聽鼠標點擊?

我試過了,按照教程,

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

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

但我無法弄清楚如何去標記的導航處理程序,或以其他方式聽這個標誌的事件。 (光標移動到「this」元素的開頭是一個稍微不受歡迎但不重要的副作用,可以很好地抑制)。

然後我嘗試這樣的:

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

這種方法可以讓我聽標誌的鼠標點擊。但是,現在我遇到了一個奇怪的問題:每當標記的代碼行被編輯時,就會在排水溝中產生重複,一式三份等標記。

什麼是正確的做法呢?

回答

0

原來我需要指定一個通行證。

int pass = Pass.UPDATE_OVERRIDEN_MARKERS; 

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

我不得不使用Pass.UPDATE_OVERRIDEN_MARKERS即使的IntelliJ將其標記爲過時,並表示很快就會被移除(見下面的鏈接)。但是,IntelliJ推薦的常量Pass.LINE_MARKERS會導致重複的標記。

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