在MyDslJavaValidator中的验证之间共享状态

时间:2013-06-27 22:41:08

标签: xtext

我语言的MyDslJavaValidator验证程序包含@Check,需要从树顶部获取一些上下文信息。我可以通过从给定元素开始遍历模型来在check方法本身中收集该信息。但是,由于上下文信息不依赖于当前元素,因此效率很低。

有没有办法只计算一次状态并在所有验证中都可用?我当然可以将状态缓存在成员变量中,但由于我不确定验证器对象的生命周期是什么,我不知道这是否安全。显然,当底层模型发生变化时,必须重新计算信息。

在这种情况下,最好的模式是什么?

1 个答案:

答案 0 :(得分:0)

一种简单的方法是使用“索引”来存储信息。

概要

  • 通过自定义IDefaultResourceDescriptionStrategy,您可以将自定义信息放入userData的{​​{1}}地图中,该地图与树顶部附近的对象相对应。

  • 每次资源更改时都会调用该策略。所以你总是最新的。

  • 您的验证工具可以查询IEObjectDescription的索引,查看树顶部附近的对象,提取IEObjectDescription并完成。

有关操纵和访问索引的详细信息,请参阅"Linking"

部分