2011-08-29 65 views
0

我有这样的语法:生成名称嵌套元素

Entity: 
    'entity' name=ID '{' 
     (properties+=Property)* 

     (revision=Revision)? 
    '}' 

Revision: 
    'revision' '{' 
     (properties+=Property)+ 
    '}' 

编辑给了我很多的修改错误的,因为他们没有名字。由于修订始终是实体的子项,我可以自动为其分配一个名称吗?像name=this.parent.name + "_REV"

回答

2

解决的办法是延长DefaultDeclarativeQualifiedNameProvider

import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; 
import org.eclipse.xtext.naming.QualifiedName; 
import model.Revision; 

public class ModelQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider { 

    public final static String REVISION_TABLE_EXTENSION = "_REV"; 
    public final static String REVISION_TYPE_EXTENSION = "Rev"; 

    public QualifiedName qualifiedName(Revision obj) { 
     QualifiedName qn = getFullyQualifiedName(obj.eContainer()); 

     String typeName = qn.getLastSegment() + REVISION_TABLE_EXTENSION; 

     QualifiedName result = qn.skipLast(1); 
     result = result.append(typeName); 

     return result; 
    } 

} 

确保你的方法签名吧! Xtext反射地调用QualifiedName qualifiedName(MyType ele),如果您从1.0升级到2.0,请不要忘记更新签名:将返回类型从String更改为QualifiedName