Это моя грамматика:
A: field=[B]
B: C | D
Перекрестная ссылка работает очень хорошо как тогда, когда C/D находится в одном и том же файле, так и когда C/D находится в другом файле (используя импорт).
Проблема заключается в моей функции, которая получает модель (EObject, корень AST) в качестве входных данных и извлекает C/D EObject.
Когда C/D находится в том же файле, я могу сделать что-то вроде этого, чтобы получить C/D EObjects:
A a = ...
if (a.getField() instanceof C)
{
C c = (C)a.getField();
//do something with c
}
else if (a.getField() instanceof D)
{
D d = (D)a.getField();
//do something with d
}
Однако, когда C/D находится в другом файле, перекрестная ссылка работает, но вышеописанное не работает: a.getField() не равно null, но также не является экземпляром C и не экземпляр Д.
Давая модель (которая импортирует многие другие модели), как я могу получить доступ к C/D, который находится в другой модели?
ОБНОВЛЕНИЕ
Это мой код для получения ресурса:
XtextResourceSetProvider rsp = (XtextResourceSetProvider)IResourceServiceProvider.Registry.INSTANCE.getResourceServiceProvider(uri).get(IResourceSetProvider.class);
XtextResourceSet rs = (XtextResourceSet) rsp.get(project);
Resource r = rs.getResource(uri, true);
org.eclipse.xtext.ui.resource.IResourceSetProvider.get(IProject)org.eclipse.xtext.ui.resource.IResourceSetProvider.get(IProject)
для получения набора ресурсов и никогда не вызываете StandaloneSetup в контексте eclipse? - person Christian Dietrich   schedule 08.09.2016