2017-03-08 5 views
0
Ausdrücke

In plugin.xml der Plug-in org.eclipse.ui.navigator.resources fand ich die folgende commonFilter Elementdefinition:Eclipse-PDE :: Die Verwendung von Filter anpassen

 <commonFilter 
     id="org.eclipse.ui.navigator.resources.filters.startsWithDot" 
     name="%filters.startsWithDot.name" 
     description="%filters.startsWithDot.description" 
     activeByDefault="true" 
     > 
    <filterExpression> 
     <and> 
      <adapt type="org.eclipse.core.resources.IResource"> 
       <test property="org.eclipse.core.resources.name" value=".*"/> 
      </adapt> 
     </and> 
    </filterExpression> 
    </commonFilter> 

Es ist die Verwendung von adapt, die mir beunruhigt:

  1. Wie kommt das Element and kann als unary Operator auf seinem (einzigen) Subelement verwendet werden? Aus meiner Sicht benötigt der Operator AND zwei Operanden.
  2. durch die folgenden answer inspiriert, schaute ich in die Javadoc von IAdapterManager und kam zu dem Schluss, dass die Verwendung von adapt wie

    Platform.getAdapterManager().registerAdapters(pr, IResource.class); 
    

    irgendwo, wo pr in der Eclipse-Quelle zu etwas übersetzt ist die Instanz eines Adapterfabrik. Ist das korrekt?

  3. Was ist adapt technisch? Einfach ein XML-Element? (Ich frage, weil ich hier mehr Eclipse-PDE Terminologie vermuten.)

Antwort

1

<and> eine beliebige Anzahl von untergeordneten Elemente aufweisen kann. Das Ergebnis ist das "und" der Ergebnisse aller Kinder. Ein Element ist also in Ordnung, aber es tut nichts.

<adapt> ist nur ein normales XML-Element und wird nicht speziell behandelt. Es wird hier verwendet, da die meisten UI-Objekte keine Dateien oder Ordner sind. <adapt> verwendet die Adapterschnittstelle, um sich (falls möglich) an den angegebenen "Typ" anzupassen. Die untergeordneten Elemente von "anpassen" erhalten dann den angepassten Typ. Der Wert, der von 'adapt' zurückgegeben wird, ist das 'und' seiner Kinder.

In diesem Fall erhält das Element <test> das zu testende Objekt IResource und nicht das ursprüngliche Benutzeroberflächenobjekt.

<adapt> wird die getAdapter Methode der IAdapterManager von Platform.getAdapterManager() zurückgegeben, um die Anpassung zu tun. Es kann auch prüfen, ob die aktuelle Klasse IAdaptable implementiert.

IAdapterManager.registerAdapters wird von Klassen verwendet, die Adapter bereitstellen möchten, um eine IAdapterFactory zu registrieren, die der Adaptermanager abrufen kann, wenn getAdapter aufgerufen wird.

+0

Danke nochmal, Greg! Stimmt es, dass 'adapt' in einen Aufruf von' registerAdapters() 'übersetzt wird? –

+1

Nein, es verwendet 'IAdapterManager.getAdapter', um nach einem bereits registrierten Adapter zu suchen. Es kann auch prüfen, ob die aktuelle Klasse 'IAdaptable' implementiert. 'registerAdapters' wird normalerweise während des Eclipse-Starts von verschiedenen Plugins aufgerufen, um den Adaptermanager über Adapterfabriken zu informieren. –

Verwandte Themen