Xtext - 验证重复的名称

时间:2018-05-28 14:24:27

标签: validation xtext xtend

我有以下语法,但我想对此进行一些验证。如果"播放器"中有重复的名称,我想犯一个错误列表。

格拉默:

Football:
    'Club' name=STRING playerList=PlayerList
     footballObjects+=FootballObject
;

FootballObject:
     Player | Coach
;

PlayerList:
     players+=[Player] ( players+=[Player] )* 
;

Player:
    'Player' name=ID
;

我尝试了以下内容:

@Check
def checkGreetingStartsWithCapital(Football model) {
    val names = newHashSet
    for (g : model.playersList.players) {
        if(!names.add(g.name))
            error("duplicate" , g, FOOTBALLPACKAGE.Literals.FOOTBALL__PLAYERS_LIST)
    }
}

但这不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

最简单的方法是通过调用error来标记列表条目,而不是在引用的播放器上,而是在playersList本身上,并调用带有索引的error方法。 e.g。

error("bad", playersList, MyDslPackage.Literals.PLAYERS_LIST__PLAYERS, index)