in spectator-api/src/main/java/com/netflix/spectator/impl/matcher/PatternUtils.java [272:305]
private static List<Matcher> expandSeq(SeqMatcher seqMatcher, int max) {
List<List<Matcher>> results = new ArrayList<>();
for (Matcher matcher : seqMatcher.matchers()) {
if (results.isEmpty()) {
List<Matcher> rs = expandOrClauses(matcher, max);
if (rs == null)
return null;
for (Matcher m : rs) {
List<Matcher> tmp = new ArrayList<>();
tmp.add(m);
results.add(tmp);
}
} else {
List<Matcher> rs = expandOrClauses(matcher, max);
if (rs == null || results.size() * rs.size() > max)
return null;
List<List<Matcher>> tmp = new ArrayList<>(results.size() * rs.size());
for (List<Matcher> ms : results) {
for (Matcher r : rs) {
List<Matcher> seq = new ArrayList<>(ms);
seq.add(r);
tmp.add(seq);
}
}
results = tmp;
}
}
List<Matcher> tmp = new ArrayList<>(results.size());
for (List<Matcher> ms : results) {
tmp.add(SeqMatcher.create(ms));
}
return tmp;
}