2017-12-21 7 views
0

Ich versuche, MyDSLProposalProvider von einem externen Eclipse RCP-Projekt zu erweitern. Ich habe ein Erweiterungspunktschema erstellt, das eine Klasseneigenschaft erfordert, die meinen ProposalProvider erweitert. In dem neuen Projekt erweitere ich die Klasse und überschreibe einige Methoden, um mir eine Ausgabe zu geben, damit ich sehen kann, dass die externe Methode aufgerufen wird. Aber das passiert derzeit nicht. Muss ich irgendetwas beachten?Erweitern Sie ProposalProvider im externen Eclipse-Projekt über den Erweiterungspunkt

Derzeit ist die hirachy wie folgt aussieht:

MyDSLProposalProvider extends AbstractMyDSLProposalProvider 
ExternalProposalProvider extends MyDSLProposalProvider 

ich eine Methode neu geschrieben, die in dem AbstractMyDSLProposalProvider aber wenn sie ausgelöst wird seine die vordefinierte Methode im AbstractMyDSLProposalProvider aufgerufen und nicht meine neue Implementierung.

public class ExternalMyDSLProposalPovider extends MyDSLProposalProvider 
    { 
    @Override 
    public void completeComponent_Name(EObject model, Assignment 
    assignment, ContentAssistContext context, 
     ICompletionProposalAcceptor acceptor) { 
    System.err.println("extern"); 
    if(model instanceof Component) 
    { 
     createProposal("foo", "foo", context, acceptor); 
    } 
    super.completeComponent_Name(model, assignment, context, acceptor); 
    } 
    } 

Dies ist die Klasse in der externen Eclipse Project. Danke für die Hilfe.

+0

Gibt das neue Projekt tatsächlich einen Erweiterungspunkt mit Ihrem neuen Schema an? Wie geht es Ihnen beim Lesen der Erweiterungspunktdefinitionen in Ihrem Hauptplugin? –

+0

Ja, das neue Projekt deklariert eine Erweiterung für den angegebenen Erweiterungspunkt des myDSL-Projekts. Aber ich bekomme den zweiten Teil Ihrer Frage nicht. Kannst du vielleicht mit etwas mehr Details erklären, was du meinst? – fx88

+0

Wenn Sie einen neuen Erweiterungspunkt mit einem Schema definieren, müssen Sie Code schreiben, um die Erweiterungspunkte zu lesen, die dieses Schema aus der IExtensionRegistry verwenden. Haben Sie das getan? –

Antwort

0

Wenn Sie einen Erweiterungspunkt mithilfe eines von Ihnen definierten Schemas deklarieren, stellt Eclipse diese Deklaration in die Erweiterungspunktregistrierung. Das ist alles was Sie tun müssen, Sie müssen dann Code schreiben, um diese Deklarationen zu verwenden.

Sie lesen die Erweiterungspunkt Registrierung mit so etwas wie:

IExtensionRegistry extRegistry = Platform.getExtensionRegistry(); 

IExtensionPoint extPoint = extRegistry.getExtensionPoint("your extension point id"); 

IConfigurationElement [] elements = extPoint.getConfigurationElements(); 

elements ist nun eine Anordnung der Erklärungen in den verschiedenen Plugins, um den Erweiterungspunkt verwendet wird.

IConfigurationElement verfügt über verschiedene Methoden, um die Werte der Attribute der Deklaration abzurufen.

Wenn Sie eine Klasse in eines der Attribute definiert haben Sie eine Instanz der Klasse erstellen können mit:

IConfigurationElement element = .... a config element 

Object obj = element.createExecutableExtension("attribute name"); 

In Ihrem Fall sollte das Ergebnis Ihrer ExternalMyDSLProposalPovider sein.

Sie müssen dann dieses Objekt anhängen, was auch immer Vorschläge tun.

Verwandte Themen