in src/main/software/amazon/event/ruler/NameState.java [254:285]
Set<NameState> getNameTransitions(final Event event, final ArrayMembership membership) {
final Set<NameState> nextNameStates = new HashSet<>();
if (mustNotExistMatchers.isEmpty()) {
return nextNameStates;
}
Set<NameMatcher<NameState>> absentValues = new HashSet<>(mustNotExistMatchers.values());
for (Field field : event.fields) {
NameMatcher<NameState> matcher = mustNotExistMatchers.get(field.name);
if (matcher != null) {
// we should only consider the field who doesn't violate array consistency.
// normally, we should first check array consistency of field, then check mustNotExistMatchers, but
// for performance optimization, we first check mustNotExistMatchers because the hashmap.get is cheaper
// than AC check.
if (ArrayMembership.checkArrayConsistency(membership, field.arrayMembership) != null) {
absentValues.remove(matcher);
if (absentValues.isEmpty()) {
break;
}
}
}
}
for (NameMatcher<NameState> nameMatcher: absentValues) {
nextNameStates.add(nameMatcher.getNextState());
}
return nextNameStates;
}