diff --git a/uast/ann/ann.go b/uast/ann/ann.go index 6459e9c3..78ebb1a5 100644 --- a/uast/ann/ann.go +++ b/uast/ann/ann.go @@ -376,6 +376,12 @@ func AddRoles(roles ...uast.Role) Action { func appendUniqueRoles(n *uast.Node, roles ...uast.Role) { addedRoles := make(map[string]bool) + for _, role := range n.Roles { + if _, ok := addedRoles[role.String()]; !ok { + addedRoles[role.String()] = true + } + } + for _, role := range roles { if _, ok := addedRoles[role.String()]; !ok { n.Roles = append(n.Roles, role) @@ -480,3 +486,4 @@ func matchSuffixPredicates(path uast.Path, preds []Predicate) bool { return true } + diff --git a/uast/ann/ann_test.go b/uast/ann/ann_test.go index 294115da..e9ae6b99 100644 --- a/uast/ann/ann_test.go +++ b/uast/ann/ann_test.go @@ -203,6 +203,8 @@ func TestAddDuplicatedRoles(t *testing.T) { err := a.Do(input) require.NoError(err) require.Equal(expected, input) + err = a.Do(input) + require.Equal(expected, input) } func TestRuleOnApply(t *testing.T) {