2010-06-20 31 views
1

我似乎遇到了将问题标记与资源关联的问题;在我的情况下,我试图为编辑器创建一个问题标记。插件开发:为特定资源创建问题标记

要做到这一点,我已经尽力做到以下几点:

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

谢谢。 Paul

编辑: 我也查看了以下有关问题标记的链接,但它再次从资源(res,在本例中为res)调用createMarker,但不显示其设置。 从Action对象的run()方法见Show Syntax Errors in An Eclipse Editor Plugin

回答

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(); 
     } 
} 
+0

工作完美,谢谢! 所以我假设我之前变得空了,因为它太早调用getEditorInput()了? – 2010-06-21 08:55:20

+1

对不起,我这么晚回应... 你以为...你在init(...)方法之前调用getEditorInput,初始化输入 – dpndeveloper 2010-07-30 13:47:08

0

我创建一个标记(包括一个getEditorInput()呼叫)。

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

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

加成(继保的评论)如何获得一个编辑器?我的应用程序可以获得相关的ITextEditor对象,通过重写createAction(ITextEditor e, IVerticalRulerInfo ri)方法(其中,顺便提一句,这是一个抽象的方法),我的应用程序可以获得相关的ITextEditor对象。

+0

谢谢! 在run()函数中,使用'editor'对象;然而,你究竟能从哪里获得? – 2010-06-20 11:10:54

+0

请参阅我的补充内容。 – 2010-06-20 11:55:53

+0

再次感谢您的回复。 是否有必要从AbstractRulerActionDelegate继承? 我认为可能有办法在我的Repair类(实现IPresentationRepairer)中创建标记。这就是我找出错误的地方,并且可以将它们报告给编辑(如果我可以获得对它的参考)。 – 2010-06-20 12:56:56