Segment(List<PatternElement> elements) { assert elements != null; boolean sawWildcard = false; for (PatternElement element : elements) { boolean isWildcard = element.getKind() == PatternElementKind.WILDCARD; assert sawWildcard == false || isWildcard == false; sawWildcard = isWildcard; } this.elements = Collections.unmodifiableList(elements); }
private static Set<String> resolve(Segment segment) { assert segment != null; assert segment.isTraverse() == false; List<Set<String>> candidates = new ArrayList<>(); for (PatternElement element : segment.getElements()) { switch (element.getKind()) { case TOKEN: candidates.add(Collections.singleton(element.getToken())); break; case WILDCARD: candidates.add(Collections.singleton("*")); //$NON-NLS-1$ break; case SELECTION: candidates.add(new TreeSet<>(((Selection) element).getContents())); break; default: throw new AssertionError(); } } List<String> results = stringCrossJoin(candidates); return new TreeSet<>(results); }
/** * Returns the pattern element kinds appeared in this pattern. * @return the pattern element kinds * @since 0.7.0 */ public Set<PatternElementKind> getPatternElementKinds() { Set<PatternElementKind> results = EnumSet.noneOf(PatternElementKind.class); for (Segment segment : segments) { for (PatternElement element : segment.getElements()) { results.add(element.getKind()); } } return results; }
switch (element.getKind()) { case TOKEN: buf.append(element.getToken());
@Override public boolean matches(Object obj) { @SuppressWarnings("unchecked") List<PatternElement> elements = (List<PatternElement>) obj; if (elements.size() != kinds.length) { return false; } for (int i = 0; i < kinds.length; i++) { if (elements.get(i).getKind() != kinds[i]) { return false; } } return true; }
private static boolean isGlobRequired(Segment segment) { assert segment != null; assert segment.isTraverse() == false; for (PatternElement element : segment.getElements()) { if (element.getKind() == PatternElementKind.WILDCARD) { return false; } } return true; }