Xtext - 验证重复名称

Xtext - Validating for duplicate names

我有以下语法,但我想对此做一些验证。如果 "players" 列表中有重复的名称,我想报错。

语法:

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)
    }
}

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

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

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