QuickFixes

Aus Eclipse
Wechseln zu: Navigation, Suche

Eng verbunden mit dem Konzept des Markers sind die Quick Fixes, (im Eclipse Framework wird für Quick Fixes der Begriff "Marker Resolutions" verwendet). Quick Fixes sind vorgefertigte Lösungsverfahren, die bei Vorliegen eines bestimmten Markertypen, auf einer Ressource (meist automatisiert) ausgeführt werden können. Ein Quick Fix steht immer in Bezug zu einem bestimmten Markertypen. Quick Fixes treten wiederum visuell in Erscheinung. In der Regel werden sie optisch in der Nähe des Markers eingeblendet, oder stehen als Eintrag im Kontextmenü eines Markers zur Verfügung. Oft stehen zu einem Marker mehrere Quickfixes zur Auswahl, letztendlich hat der Benutzer zu entscheiden ob und wenn ja welchen Quick Fix er ausführen will.

Beispiel für einem Marker mit Quickfix


Deklaration

Die Deklaration eines Quickfixes erfolgt ebenfalls durch Eintragung in das Plug-In-Manifest, wobei in diesem Fall von den Standardelementen nur der Extensionpoint org.eclipse.ui.ide.markerResolution anzugeben ist. Das Manifest erfordert zusätzlich die Angabe eines java-Classfile, in dem das Interface IMarkerResolutionGenerator2 implementiert sein muss. Weiters muss im Manifest der mit dem QuickFix verbundene Markertyp angegeben werden.

plugin.xml Deklaration eines Quickfix

   <extension
      point="org.eclipse.ui.ide.markerResolution">
      <markerResolutionGenerator
          class="besi.mybuilder.plugin.builder.MarkerResolutionGenerator1"
          markerType="besi.mybuilder.plugin.myProblem">
      </markerResolutionGenerator>
   </extension>

Verhalten

Das Verhalten eines QuickFixes wird durch die Implementierung von zwei Interfaces bestimmt. Das Interface IMarkerResolutionGenerator2 deklariert die Methoden boolean hasResolutions(IMarker marker) und IMarkerResolution2[] getResolutions(IMarker marker). Dabei dient hasResolutions zur Prüfung ob zu einem Marker überhaupt QuickFixes zur Auswahl stehen, um z.B. einen Menüeintrag ggf. auszublenden. getResolutions gibt die für diesen Marker definierten QuickFixes zurück. Die Methode zur Ausführung eines QuickFixes ist wiederum im Interface IMarkerResolution2 durch void run(IMarker marker)deklariert und muss entsprechend implementiert werden. Das eigentliche Verhalten eines Quick Fixes ist in der Methode run definiert und besteht meist aus einem Zugriff auf die Ressource , Analyse des betreffenden Abschnittes und Modifikation desselben.


Beispielimplementierung von IMarkerResolutionGenerator2

  public class MarkerResolutionGenerator1 implements IMarkerResolutionGenerator2
  {
     @Override
     public boolean hasResolutions(IMarker marker) {
        return true;
     }     
     @Override
     public IMarkerResolution[] getResolutions(IMarker marker) {   
        List<IMarkerResolution> resolutions = new ArrayList<IMarkerResolution>();     
        resolutions.add(new MyResolution1());
        resolutions.add(new MyResolution2());
        return (IMarkerResolution[])resolutions.toArray(new IMarkerResolution[resolutions.size()]);
     }
  }


Beispielimplementierung von IMarkerResolution2

  public class MyResolution implements IMarkerResolution2
  {
     @Override
     public String getDescription() {		
        return "Resolve This";
     }     
     @Override
     public Image getImage() {		
        return null;
     }
     @Override
     public String getLabel() {		
        return "Resolving";
     }
     @Override
     public void run(IMarker marker) {			
        IFile file = null;
        try{file = marker.getResource().getParent().getFile(new Path("myConfig.xml"));}
        catch(Exception ex){return;}				
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        IEditorPart part = IDE.openEditor(page, file);	
        try{part = IDE.openEditor(page, file);}
        catch(PartInitException ex){return;}
     }
  }