2016-10-02 103 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