Разработка плагинов: создание маркера проблемы для данного ресурса - PullRequest
1 голос
/ 20 июня 2010

Кажется, у меня проблема с сопоставлением маркера проблемы с ресурсом;в моем случае я пытаюсь создать маркер проблемы для редактора.

Чтобы добиться этого, я попытался сделать следующее:

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 () продолжает возвращать ноль.Я предполагаю, что я не вызываю это в правильном местоположении.Я подумал, что было бы идеально создать маркер после настройки редактора, но это доказывает обратное.

Есть ли у кого-нибудь совет по получению нужного ресурса, который я хочу, чтобы я мог создать маркер проблемы?Я хотел бы показать ошибки и тому подобное в редакторе.

Я посмотрел примеры в Интернете для создания маркера, но большинство просто показывают методы, которые передают объект ITextEditor, не показывая, где находится вызов метода.(например: Создание маркера ошибки для компилятора - см. метод reportError )

Спасибо.Paul

Редактировать: Я также просмотрел следующую ссылку, касающуюся маркеров проблем, но опять-таки он вызывает createMarker из ресурса (в данном случае res), но не показывает его настройки.См. Отображение синтаксических ошибок в плагине редактора Eclipse

Ответы [ 2 ]

1 голос
/ 21 июня 2010

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 голосов
/ 20 июня 2010

Я создаю маркер (включая вызов 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.

...