0

我有一组表示实体 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 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) >看起来更尴尬。

4

1 回答 1

0

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

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

于 2015-06-06T11:45:26.857 回答