Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uml 从关联生成字段_Uml_Code Generation_Acceleo_Ocl - Fatal编程技术网

Uml 从关联生成字段

Uml 从关联生成字段,uml,code-generation,acceleo,ocl,Uml,Code Generation,Acceleo,Ocl,我想从关联生成一个字段。 我的问题是我正在使用: [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.g

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

[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]
[for(p:Property | aClass.getAssociations().owneeded->select(p:Property | p.type aClass))分隔符('\n')]
[p.visibility/][p.type.name/][p.type.name.toLowerFirst()/];
[for]
[对于(p:Property | aClass.getAssociations().ownedd->select(p:Property | p.type=p.getOtherEnd().type))分隔符('\n')]
[p.visibility/][p.type.name/][p.type.name.toLowerFirst()/];
[for]
这样会检查所有关联,如果关联类型不是同一ass类类型,则会创建该类型的字段。 如果端点是相同的类型,它将创建一个与包含它的类类型相同的字段

所以基本上如果有关联A-B和A-A 对于B创建A,对于A创建B和A。 但是第二个循环有一个问题。它创建了两个字段,而不是一个,这非常符合逻辑。问题来了。我怎样才能解决这个问题?我不确定我是否能够在这里声明某种类型的变量并检查%2。我不能只取一个值,因为可能有多个关联。 也许我都做错了?也许有一种方法可以在端点上进行迭代,从而节省所有检查和两个for循环?

[for(a:Association | aClass.getAssociations())]
    [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]
[如果a.ownedEnd.type=a.ownedEnd.getOtherEnd().type] [a.visibility/][a.endType.name/][a.endType.name.toLowerFirst()/]; [其他] [对于(p:Property | a.ownedd->select(type aClass))] [p.visibility/][p.type.name/][p.type.name.toLowerFirst()/]; [for] [if] [for]
这似乎奏效了