从关联生成字段

Generate field from association

我想从关联中生成一个字段。 我遇到的问题是我正在使用:

[for (p: Property | aClass.getAssociations().ownedEnd -> select(p: Property | p.type <> aClass)) separator('\n')]
    [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
[/for]

[for (p: Property | aClass.getAssociations().ownedEnd -> select(p: Property | p.type = p.getOtherEnd().type)) separator('\n')]
    [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
[/for]

这样会检查所有关联,如果关联类型与 class 类型不同,它会创建该类型的字段。 如果两端是同一类型,它会创建一个与包含它的 class 类型相同的字段。

所以基本上如果存在关联 A - B 和 A - A 为 B 创建 A,为 A 创建 B 和 A。 但是第二个循环有问题。它创建了两个字段而不是一个字段,这是非常合乎逻辑的。问题来了。我该如何解决这个问题?我不确定我是否能够在这里声明某种变量并检查 %2。我不能只取一个值,因为可能有多个关联。 也许我做错了所有事情?也许有一种方法可以迭代结束,从而节省所有这些检查和两个 for 循环?

    [for (a: Association | aClass.getAssociations())]
        [if a.ownedEnd.type = a.ownedEnd.getOtherEnd().type]
            [a.visibility/] [a.endType.name/] [a.endType.name.toLowerFirst()/];
        [else]
            [for (p: Property | a.ownedEnd -> select (type <> aClass))]
                [p.visibility/] [p.type.name/] [p.type.name.toLowerFirst()/];
            [/for]
        [/if]
    [/for]

这似乎可以解决问题