通过Extension Point在外部Eclipse项目中扩展ProposalProvider

时间:2017-12-21 09:23:59

标签: eclipse-rcp xtext

我尝试从外部Eclipse RCP项目扩展MyDSLProposalProvider。我创建了一个扩展点模式,它需要一个扩展我的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中的类。 谢谢你的帮助。

1 个答案:

答案 0 :(得分: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

然后,您需要将此对象与提案的任何内容挂钩。