Xtext - проверка на дубликаты имен - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующая грамматика, но я хочу сделать некоторые проверки по этому вопросу.Я хочу сделать ошибку, если в списке "игроков" есть повторяющиеся имена.

Граммер:

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 голосов
/ 29 мая 2018

Самый простой способ - пометить запись в списке, вызвав error не для игрока, на которого есть ссылка, а для самого playersList, и вызвать метод error, который также принимает индекс.например,

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