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)
我有以下语法,但我想对此做一些验证。如果 "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)