2014-11-12 2 views
0

Я работаю оа XText грамматику и я ссылка артефактов, как это: A: 'A' name=ID; B: 'B' name = ID ':' ref=[A]; Таким образом, после запуска затмения времени работы плагина, я могу создавать файлы с соответствующим расширением, содержащим это: A a B b : a Теперь я хочу также обратиться к артефактам из других файлов, и он работает из коробки: , если A a объявлен в a.file, а B b : a объявлен в b.file, редактор не показывает ошибок. Авто-компиляция отлично работает.XText Мануэл несколько файлов компиляция

Однако, если я создаю код самостоятельно, то этот: generator.doGenerate(new ResourceSetImpl().getResource(URI.createURI(path), true), fsa); Ссылка не разрешена.

Должен ли я скомпилировать все файлы за один проход? Как я могу это сделать?

ответ

0

Файлы, как правило, скомпилированы с помощью инкрементной сборки Xtext в фоновом режиме, как только вы ее сохраните. Если вы хотите запустить сборку вручную, вы должны убедиться, что используете правильно инициализированный набор ресурсов. Его можно получить из IResourceSetProvider в контексте Eclipse. В автономном режиме вы можете ввести Provider<XtextResourceSet>, чтобы получить сконфигурированный экземпляр.

+0

Я не уверен, что вы поняли, что я хочу скомпилировать dsl-файлы самостоятельно (с кодом, который я поставил). Как сказано, работая с плагином eclipse, все работает нормально. Но когда я начинаю автоматически компилировать файлы, он не решает ссылки на другие dsl-файлы. Проблема, которую я хочу решить: компилировать dsl-файлы без полного «xtext-plugin-workflow» только из исходного кода. – user2504380

+0

Я обновил ответ. Надеюсь, это поможет. –

+0

Я ввел его так, но мой набор ресурсов пуст, если я это сделаю: val injector = new MyDslStandaloneSetup(). CreateInjectorAndDoEMFRegistration(); val resourceSetProvider = injector.getInstance (Key.get (новый TypeLiteral <поставщик >() {})); – user2504380

Смежные вопросы