【问题标题】:Extend ProposalProvider in external Eclipse Project via Extension Point通过扩展点在外部 Eclipse 项目中扩展 ProposalProvider
【发布时间】:2018-06-03 22:35:23
【问题描述】:

我尝试从外部 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 中的类。 感谢您的帮助。

【问题讨论】:

  • 新项目实际上是否使用您的新模式声明了扩展点?您如何处理读取主插件中的扩展点定义?
  • 是的,新项目声明了 myDSL 项目提供的扩展点的扩展。但我没有得到你问题的第二部分。您能否通过更多细节来解释您的意思?
  • 如果您使用架构定义新的扩展点,您必须编写代码以从IExtensionRegistry 读取使用该架构的扩展点-您这样做了吗?
  • 不,我没有。但似乎这就是这里的问题。是否有一个地方我必须注册我的扩展,或者它已经在注册表中,但是当我想触发时我必须调用它,或者它是如何工作的?抱歉这个愚蠢的问题,我以前没有这样做过。并且已经谢谢了,至少我知道我必须调查的地方。

标签: eclipse-rcp xtext


【解决方案1】:

当您使用已定义的模式声明扩展点时,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

然后,您需要将此对象与对提案所做的任何事情联系起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多