2016-01-21 82 views
0

我是Xtext和Xtend的新手,需要建议如何最好地解决下面的问题。如何在xtext生成的插件中使用外部资源?

我尝试使用下面的代码来创建一个定制的自动补提供商:

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. 返回结果列表。

但我被困在第一步。我在哪里把读取外部文件的代码放在xtext项目中(我正在使用eclipse)?它应该充当单身人士,只做一次阅读,如果我想在Xtend中编程,我该如何实现单身人士?

任何帮助将不胜感激!

回答

0

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