2010-06-20 17 views
1

Je semble rencontrer un problème avec l'association d'un marqueur de problème à une ressource; Dans mon cas, j'essaye de créer un marqueur de problème pour l'éditeur.Développement de plug-in: création d'un marqueur de problème pour une ressource donnée

Pour ce faire, j'ai essayé de faire ce qui suit:

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

Cependant, le problème est getEditorInput() revient toujours nulle. Je suppose que je ne l'appelle pas au bon endroit. Je pensais que ce serait idéal pour créer le marqueur une fois que je mettrais en place l'éditeur, mais cela prouve le contraire.

Quelqu'un at-il des conseils pour obtenir la ressource appropriée que je veux afin que je puisse créer le marqueur de problème? Je voudrais montrer des erreurs et telles dans l'éditeur.

J'ai regardé des exemples en ligne pour créer le marqueur, mais la plupart montrent juste des méthodes qui passent l'objet ITextEditor sans montrer où l'appel de méthode est. (par exemple: Creating Error Marker for Compiler -- see reportError method)

Merci. Paul

Edit: J'ai aussi vu le lien suivant en ce qui concerne les marqueurs de problème, mais encore une fois, il appelle createMarker d'une ressource (res, dans ce cas), mais ne montre pas la configuration pour elle. See Show Syntax Errors in An Eclipse Editor Plugin

Répondre

1

EditorInput est initialisez dans la méthode d'initialisation Vous pouvez remplacer INITou

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

A travaillé parfaitement, merci! Donc je suppose que je recevais null avant parce qu'il appelait le getEditorInput() trop tôt? –

+1

Désolé pour ma réponse si tardive ... Vous avez supposé que vous aviez raison ... Vous appeliez getEditorInput avant la méthode init (...), qui initialisait l'entrée – dpndeveloper

0

créer un marqueur (y compris un appel à getEditorInput()) de la méthode run() d'un objet Action.

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

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

Addition (Après le commentaire de Paul) Comment obtenir un éditeur?

Eh bien, dans mon application, je suis sous-classement AbstractRulerActionDelegate, en redéfinissant la méthode createAction(ITextEditor e, IVerticalRulerInfo ri) (qui, d'ailleurs, est un must - cette méthode est abstraite) mon application peut obtenir l'objet ITextEditor pertinent.

+0

Merci pour la réponse! Dans la fonction run(), vous utilisez l'objet 'editor'; Cependant, où exactement avez-vous pu l'obtenir? –

+0

S'il vous plaît voir mon ajout. –

+0

Merci encore pour la réponse. Est-il nécessaire de sous-classe de AbstractRulerActionDelegate? Je pensais qu'il pourrait y avoir un moyen de créer le marqueur dans ma classe de réparation (implémente IPresentationRepairer) d'une manière ou d'une autre. C'est là que je trouve des erreurs et que je peux les rapporter à l'éditeur (si je pouvais obtenir une référence). –