You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在validator中获取项目内所有模型文件的名称与URI?

完全可以直接在Validator类中完成该需求,不需要额外创建独立的文件读取类,利用Xtext内置的资源访问API即可实现,无需自行实现文件遍历逻辑。

实现前提

你使用的是Xtext框架开发自定义DSL,Xtext的Validator默认继承自AbstractDeclarativeValidator,可直接通过依赖注入获取框架内置的资源管理组件。

具体实现步骤
  • 首先在你的自定义Validator类中注入两个核心组件:
@Inject
private IResourceDescriptionsProvider resourceDescriptionsProvider;
@Inject
private IProjectConfigProvider projectConfigProvider;
  • 在校验方法中通过当前校验对象获取全项目模型URI,示例代码如下:
@Check
public void checkCrossFileReference(MyDslRootElement element) {
    Resource currentRes = element.eResource();
    // 获取当前资源所属项目配置
    IProjectConfig projectConfig = projectConfigProvider.getProjectConfig(currentRes.getResourceSet());
    if (projectConfig == null) {
        return;
    }
    // 从全局索引获取所有模型资源描述
    IResourceDescriptions allResDesc = resourceDescriptionsProvider.getResourceDescriptions(currentRes.getResourceSet());
    List<URI> allModelUris = new ArrayList<>();
    for (IResourceDescription desc : allResDesc.getAllResourceDescriptions()) {
        URI uri = desc.getURI();
        // 过滤仅保留你的DSL后缀的模型文件
        if ("mydsl".equals(uri.fileExtension())) {
            allModelUris.add(uri);
        }
    }
    // 此时allModelUris已包含当前项目内所有.mydsl格式模型文件的URI
}
注意事项
  • 该方法获取的是Xtext全局索引中的资源,和项目增量构建状态完全同步,比自行通过IO读取文件可靠性更高,不会出现文件修改后缓存不一致的问题
  • 如果需要读取依赖项目的模型文件,无需修改注入逻辑,仅调整过滤规则即可
  • 若出现只能拿到当前文件URI的情况,检查你的Xtext项目是否关闭了全局索引功能,默认生成的Xtext项目均为开启状态

内容的提问来源于stack exchange,提问作者R4de

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:18:03