2016-01-21 2 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. получить текущее значение ContentPath из xtext;
  4. затем используйте # 3 для фильтрации по списку, полученному из # 1.
  5. Верните результирующий список.

Но я застрял на первом шаге. Где я могу поместить код чтения внешнего файла в проект xtext (я использую eclipse)? Он должен действовать как синглтон и делать одно только чтение, если я хочу запрограммировать в Xtend, как мне реализовать синглтон?

Любая помощь будет оценена!

ответ

0

Привяжите его для инъекции в YourLanguageRuntimeModule.java, затем @ Внесите его в поставщика предложений. Guice будет создавать только по умолчанию, поэтому не беспокойтесь о том, чтобы реализовать его как одноэлементный.