插件开发:为给定资源创建问题标记

时间:2010-06-20 09:23:09

标签: syntax-highlighting resources markers eclipse-plugin

我似乎遇到了将问题标记与资源相关联的问题;就我而言,我正在尝试为编辑器创建问题标记。

为实现这一目标,我尝试了以下方法:

public class MyEditor extends TextEditor{

private ColorManager colorManager;

public MyEditor() {
         super();
         ...

         IResource resource = (IResource) getEditorInput().getAdapter(IResource.class);

         try 
         {
             marker = resource.createMarker(IMarker.PROBLEM);            
         }
         catch (CoreException e) 
         {
             e.printStackTrace();
         }
    }

然而,问题是getEditorInput()一直返回null。我假设我没有在正确的位置调用它。我认为在设置编辑器后创建标记是理想的,但这证明不是这样。

有没有人有任何建议来获取我想要的正确资源,以便我可以创建问题标记?我想在编辑器中显示错误等。

我在线查看了创建标记的示例,但大多数只是显示传递ITextEditor对象的方法,而不显示方法调用的位置。 (例如:Creating Error Marker for Compiler -- see reportError method

谢谢。 保罗

编辑: 我还查看了有关问题标记的以下链接,但同样,它从资源调用createMarker(在本例中为res),但没有显示它的设置。 见Show Syntax Errors in An Eclipse Editor Plugin

2 个答案:

答案 0 :(得分:1)

EditorInput在init方法中初始化 您可以覆盖init或

public class MyEditor extends TextEditor{

private ColorManager colorManager;

public MyEditor() {
         super();
         ...
    }

public void init(IEditorSite site, IEditorInput input)
            throws PartInitException {
         super.init(site, input);
         IResource resource = (IResource) getEditorInput().getAdapter(IResource.class);

         try 
         {
             marker = resource.createMarker(IMarker.PROBLEM);            
         }
         catch (CoreException e) 
         {
             e.printStackTrace();
         }
}

答案 1 :(得分:0)

我从getEditorInput()对象的run()方法创建了一个标记(包括对Action的调用)。

public class MyAction extends Action {
   ...
   public void run() {
     ...

     int line = ...;
     IEditorInput ei = editor.getEditorInput()
     if (ei != null)
        createMarkerAt(line, ei);
   }    
}

加法(关注保罗的评论)如何获得编辑?

好吧,在我的应用程序中,我通过重写AbstractRulerActionDelegate方法(其中,BTW,必须 - 这个方法是抽象的)来继承createAction(ITextEditor e, IVerticalRulerInfo ri),我的应用程序可以获得相关的{{1}对象。