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 对象的方法,而没有显示方法调用的位置。(例如:为编译器创建错误标记——参见 reportError 方法

谢谢你。保罗

编辑:我还查看了有关问题标记的以下链接,但同样,它从资源(在本例中为 res)调用 createMarker,但没有显示它的设置。请参阅在 Eclipse 编辑器插件中显示语法错误

4

2 回答 2

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();
         }
}
于 2010-06-21T08:36:17.227 回答
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化,通过覆盖createAction(ITextEditor e, IVerticalRulerInfo ri)方法(顺便说一句,这是必须的 - 这个方法是抽象的)我的应用程序可以获得相关ITextEditor对象。

于 2010-06-20T09:45:32.937 回答