2010-06-20 28 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