通过扩展点在外部 Eclipse 项目中扩展 ProposalProvider
Extend ProposalProvider in external Eclipse Project via Extension Point
我尝试从外部 Eclipse RCP 项目扩展我的 MyDSLProposalProvider。我创建了一个扩展点模式,它需要 class 属性 来扩展我的 ProposalProvider。在新项目中,我扩展了 class 覆盖了一些方法,只是为了给我一些输出,所以我可以看到调用了外部方法。但这目前没有发生。有什么我需要考虑的吗?
目前 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
中的 class。
感谢您的帮助。
当您使用已定义的模式声明扩展点时,Eclipse 将该声明放入扩展点注册表中。就是这样,您必须编写代码来使用这些声明。
您使用如下方式读取扩展点注册表:
IExtensionRegistry extRegistry = Platform.getExtensionRegistry();
IExtensionPoint extPoint = extRegistry.getExtensionPoint("your extension point id");
IConfigurationElement [] elements = extPoint.getConfigurationElements();
elements
现在是使用扩展点的各种插件中声明的数组。
IConfigurationElement
有多种方法可以获取声明的属性值。
如果您在其中一个属性中定义了 class,您可以使用以下方法创建 class 的实例:
IConfigurationElement element = .... a config element
Object obj = element.createExecutableExtension("attribute name");
在您的情况下,结果应该是您的 ExternalMyDSLProposalPovider
。
然后您需要将此对象与对提案所做的任何操作联系起来。
我尝试从外部 Eclipse RCP 项目扩展我的 MyDSLProposalProvider。我创建了一个扩展点模式,它需要 class 属性 来扩展我的 ProposalProvider。在新项目中,我扩展了 class 覆盖了一些方法,只是为了给我一些输出,所以我可以看到调用了外部方法。但这目前没有发生。有什么我需要考虑的吗?
目前 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
中的 class。
感谢您的帮助。
当您使用已定义的模式声明扩展点时,Eclipse 将该声明放入扩展点注册表中。就是这样,您必须编写代码来使用这些声明。
您使用如下方式读取扩展点注册表:
IExtensionRegistry extRegistry = Platform.getExtensionRegistry();
IExtensionPoint extPoint = extRegistry.getExtensionPoint("your extension point id");
IConfigurationElement [] elements = extPoint.getConfigurationElements();
elements
现在是使用扩展点的各种插件中声明的数组。
IConfigurationElement
有多种方法可以获取声明的属性值。
如果您在其中一个属性中定义了 class,您可以使用以下方法创建 class 的实例:
IConfigurationElement element = .... a config element
Object obj = element.createExecutableExtension("attribute name");
在您的情况下,结果应该是您的 ExternalMyDSLProposalPovider
。
然后您需要将此对象与对提案所做的任何操作联系起来。