Eclipse:保存后获取资源集

时间:2017-06-13 10:26:43

标签: eclipse xtext emf xtend

这是我的代码的代码段(在xtext中工作) (将模型保存在文件中)

generatedModel.save(null)    //here generatedModel is an object of resource

然后当我尝试使用

检索有关此模型的信息时
...getResource(...)

我收到以下资源未找到的错误 但当我在其间添加Thread.sleep(3000)时,它起作用了。因此,这会在资源被保存到文件之前被访问时发生。 我试图添加一个监听器来检查文件何时被保存。这是代码:

var listener = new IResourceChangeListener() {

            override resourceChanged(IResourceChangeEvent event) {

                if (event.type === IResourceChangeEvent.POST_CHANGE) {
                    delta = event.delta
                }
                if (delta.kind === IResourceDelta.CHANGED) {
                    delta.accept(
                        new IResourceDeltaVisitor() {

                            override visit(IResourceDelta innerdelta) throws CoreException {
                                if (innerdelta.resource.type === IResource.FILE)
                                    println("YESYESYEYESYEYESYSY")
                                    else if(innerdelta.resource.type === IResource.FOLDER)
                                    println("PPPPPPPPPPPPPPPPPP")
                                    else if (innerdelta.resource.type === IResource.PROJECT)
                                    println("WWWWWWWWWWWWWWWWWWWW")
                                else
                                    println("NONONONONO")
                                    return false
                            }

                        }
                    )
                }
            }

        }
        var workspace = ResourcesPlugin.workspace
        workspace.addResourceChangeListener(listener)

但这没有帮助。它正在印刷NONONO ..总是在变化。我将文件保存在同一工作区的其他文件夹中。 b(项目) - > SCR根(文件夹) - >代码(夹) - >文件...

1 个答案:

答案 0 :(得分:0)

您的访问方法应返回true,以便访问delta中的所有资源。

资源更改事件可以包含多个嵌套增量,您需要全部查看它们。 delta通常将工作空间置于顶级delta,项目位于下一级,然后是任何文件夹,最后是文件。