2017-12-21 20 views
0

MyDSLProposalProviderを外部Eclipse RCPプロジェクトから拡張しようとしています。私は私のProposalProviderを拡張するクラスプロパティを必要とする拡張ポイントスキーマを作成しました。新しいプロジェクトでは、クラスをオーバーロードしていくつかのメソッドをいくつか出力して、外部メソッドが呼び出されることがわかります。しかし、これは現在起こっていません。私は考慮すべきことがありますか?エクステンションポイント経由で外部EclipseプロジェクトにProposalProviderを拡張

現在hirachyは、次のようになります。

MyDSLProposalProvider extends AbstractMyDSLProposalProvider 
ExternalProposalProvider extends MyDSLProposalProvider 

私はAbstractMyDSLProposalProviderで生成されたメソッドを書き直しが、そのトリガーされたときAbstractMyDSLProposalProviderで事前に定義されたメソッドは、私の新しい実装と呼ばれていません。

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

これは外部Eclipse Projectのクラスです。 助けてくれてありがとう。

+0

新しいプロジェクトは実際に新しいスキーマを使用して拡張ポイントを宣言していますか?メイン・プラグインの拡張ポイント定義をどのように読んでいるのですか? –

+0

はい新しいプロジェクトは、myDSLプロジェクトの提供された拡張ポイントの拡張を宣言します。しかし、私はあなたの質問の2番目の部分を取得しません。もっと細かいことで何を意味するのかもしれませんか? – fx88

+0

スキーマで新しい拡張ポイントを定義する場合、そのスキーマを使用する拡張ポイントを 'IExtensionRegistry'から読み込むコードを記述する必要があります。 –

答えて

0

Eclipseを定義したスキーマを使用して拡張ポイントを宣言すると、その宣言が拡張ポイントレジストリに格納されます。それがすべてです。その宣言を使用するためのコードを記述する必要があります。

はあなたのような何かを使用して拡張ポイントレジストリを読み取る:

IExtensionRegistry extRegistry = Platform.getExtensionRegistry(); 

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

IConfigurationElement [] elements = extPoint.getConfigurationElements(); 

elementsは今拡張ポイントを使用して、さまざまなプラグインでの宣言の配列です。

IConfigurationElementには、宣言の属性の値を取得するさまざまな方法があります。

あなたが使用してクラスのインスタンスを作成することができる属性のいずれかにクラスを定義した場合:

IConfigurationElement element = .... a config element 

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

あなたのケースでは結果があなたのExternalMyDSLProposalPoviderする必要があります。

プロポーザルに何をしていても、このオブジェクトをフックする必要があります。

関連する問題