Xtext:对其他文件的交叉引用有效,但我无法访问 EObject

Xtext: Cross-reference to other files works, but I can't access the EObject

这是我的语法:

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() 不是' t null 但它也不是 C 的实例,也不是 D 的实例。

提供一个模型(导入许多其他模型),我如何访问位于其他模型中的 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);

看起来你在做什么太复杂了

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = workspace.getRoot();

IFile file = root.getFile(new Path(inputFilePath));
URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
IProject project = file.getProject();

XtextResourceSetProvider rsp = (XtextResourceSetProvider) IResourceServiceProvider.Registry.INSTANCE
    .getResourceServiceProvider(uri)
    .get(IResourceSetProvider.class);
XtextResourceSet rs = (XtextResourceSet) rsp.get(project);

Resource r = rs.getResource(uri, true);
Model m = (Model) r.getContents().get(0);