2011-08-29 92 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