Генерация имен для вложенного элемента - PullRequest
0 голосов
/ 29 августа 2011

У меня есть такая грамматика:

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

        (revision=Revision)?
    '}'

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

Редактор дает мне много ошибок для ревизий, потому что у них нет имени. Поскольку ревизия всегда является дочерней по отношению к сущности, могу ли я присвоить ей имя автоматически? Что-то вроде name=this.parent.name + "_REV"?

1 Ответ

2 голосов
/ 30 августа 2011

Решение состоит в том, чтобы расширить 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

...