0

私はこのような文法を持っています:

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

        (revision=Revision)?
    '}'

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

リビジョンには名前がないため、エディターから多くのエラーが発生します。リビジョンは常にエンティティの子であるため、自動的に名前を付けることはできますか?のようなものname=this.parent.name + "_REV"

4

1 に答える 1

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は反射的に呼び出します。1.0QualifiedName qualifiedName(MyType ele)から2.0にアップグレードする場合は、署名を更新することを忘れないでください。リターンタイプをからStringに変更します。QualifiedName

于 2011-08-30T08:57:15.743 に答える