MPS将附加属性附加到概念属性/引用的方式

时间:2015-05-21 19:59:38

标签: mps

我有一组代表实体类型的概念 Hrrr。

示例概念:   有孩子的Loop loopCount: IntegerProperty[1]   HttpRequest有子女url: StringProperty[1]hostName: StringProperty[1]

这两个概念都扩展了AbstractTestElement概念(它定义了常用属性,如名称,注释等)。

我想要生成LoopHttpRequest到baseLanguage,如下所示:

循环:

Loop e = new Loop();
e.setProperty(new IntegerProperty("loopCount", node.loopCount));

的HttpRequest:

HttpRequest e = new HttpRequest();
e.setProperty(new StringProperty("url", node.url));
e.setProperty(new IntegerProperty("host", node.hostName));

我想要的是有一些通用的生成器模板,它涵盖setProperty的这个通用逻辑,因此不会对不同类型的测试元素重复。 好吧,有些属性需要特定的测试元素处理,但是通常情况下属性是一对一翻译的,因此

这里的问题是:如何将元数据附加到Loop / HttpRequest概念配置? 什么是MPS惯用的方式?

1)虽然我可以使用"属性名称"作为名称放入new XXXProperty,但理想情况下我会使用HttpRequest.HOST_PROPERTY_NAME类型的引用,因此"属性的名称"是不够的。

2)我可能会发明我的概念的注释和注释属性,看起来MPS本身并没有使用这种方法。

3)(ab)使用概念行为返回<quotation new StringProperty("url", node.url) >看起来更加尴尬。

1 个答案:

答案 0 :(得分:0)

我宁愿不使用2.和3.因为这两种方法都会将生成器行为添加到您的语言的各个方面,而这些方面并不知道将如何生成事物。它基本上与您的发电机结构紧密相关。

如果你选择1,你仍然可以使用静态类方法。通过在生成器中创建一个新的rootnode,它是一个java类并包含所有字段。然后有通用生成器模板,减少IntegerProperty等......如果他们有一个共同的超级概念,它应该相当容易。您只需确保在包含概念之前生成属性。这样,您仍然可以在父级中访问它的角色,并使用该信息来生成字段访问。