Grammar 为嵌套元素生成名称

Grammar 为嵌套元素生成名称,grammar,xtext,Grammar,Xtext,我的语法是这样的: Entity: 'entity' name=ID '{' (properties+=Property)* (revision=Revision)? '}' Revision: 'revision' '{' (properties+=Property)+ '}' 编辑给了我很多修改的错误,因为他们没有名字。由于修订始终是实体的子项,我可以自动为其指定名称吗?类似于name=this.paren

我的语法是这样的:

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

        (revision=Revision)?
    '}'

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

编辑给了我很多修改的错误,因为他们没有名字。由于修订始终是实体的子项,我可以自动为其指定名称吗?类似于
name=this.parent.name+“_REV”

的解决方案是扩展
defaultDeclarativeEqualifiedNameProvider

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