如何在xtext生成的插件中使用外部资源?

时间:2016-01-21 22:07:36

标签: eclipse xtext xtend

我是Xtext和Xtend的新手,需要建议如何最好地解决下面的问题。

我正在尝试使用以下代码创建自定义自动完成提供程序:

class DomainmodelProposalProvider extends AbstractDomainmodelProposalProvider {
    def override completePath_ContentPath(EObject model,
        Assignment assignment, 
        ContentAssistContext context, 
        ICompletionProposalAcceptor acceptor) {
            acceptor.accept(createCompletionProposal("/Root/hello/world", context))
            acceptor.accept(createCompletionProposal("/Root/hello/xtext", context))
            ....
            ....
    }
}

其中contentPath可以来自xpath字符串列表,列表可以很大。更重要的是,我想进行渐进式自动填充,即如果用户输入/Root/h,它将同时提供Root/hello/world/Root/hello/xtext。但如果他输入/Root/hello/x,则只会提供/Root/hello/xtext

战斗计划如下:

  1. 以某种方式从文件中读取允许的字符串列表;
  2. 在上面的DomainmodelProposalProvider中,获取允许列表列表的引用;
  3. 从xtext获取当前的ContentPath值;
  4. 然后使用#3过滤从#1获得的列表。
  5. 返回结果列表。
  6. 但是我陷入了第一步。我在哪里将外部文件的读取代码放在xtext项目中(我使用的是eclipse)?它应该充当Singleton并且只进行一次读取,如果我想在Xtend中编程,我该如何实现单例?

    任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

将其绑定到YourLanguageRuntimeModule.java中,然后@Inject到提案提供程序中。 Guice默认只创建一个,所以不要担心将其实现为单例。