List<Comparable<?>> parse(String version, int start, int maxPos) { if (start == maxPos) throw new IllegalArgumentException(NLS.bind(Messages.format_0_unable_to_parse_empty_version, this, version.substring(start, maxPos))); TreeInfo info = new TreeInfo(topFragment, start); ArrayList<Comparable<?>> entries = new ArrayList<Comparable<?>>(5); if (!(topFragment.parse(entries, version, maxPos, info) && info.getPosition() == maxPos)) throw new IllegalArgumentException(NLS.bind(Messages.format_0_unable_to_parse_1, this, version.substring(start, maxPos))); entries.add(VersionParser.removeRedundantTrail(entries, info.getPadValue())); return entries; }
void popState(List<Comparable<?>> segments, Fragment frag) { int idx = top; while (idx > 0) { StateInfo si = get(idx); if (si.fragment == frag) { int nsegs = segments.size(); int segMax = si.segmentCount; while (nsegs > segMax) segments.remove(--nsegs); top = idx - 1; break; } } }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { if (array) { ArrayList<Comparable<?>> subSegs = new ArrayList<Comparable<?>>(); boolean success = fragments[0].getQualifier().parse(fragments, 0, subSegs, version, maxPos, info); if (!success || subSegs.isEmpty()) return false; Comparable<?> padValue = info.getPadValue(); if (padValue != null) info.setPadValue(null); // Prevent outer group from getting this. else padValue = getPadValue(); padValue = VersionParser.removeRedundantTrail(segments, padValue); segments.add(new VersionVector(subSegs.toArray(new Comparable[subSegs.size()]), padValue)); return true; } if (fragments[0].getQualifier().parse(fragments, 0, segments, version, maxPos, info)) { Comparable<?> padValue = getPadValue(); if (padValue != null) info.setPadValue(padValue); return true; } return false; }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); maxPos = checkRange(pos, maxPos); if (maxPos < 0) info.setPosition(pos); return true; if (!isIgnored()) segments.add(es); info.setPosition(pos); return true; info.setPosition(pos); return true;
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); maxPos = checkRange(pos, maxPos); if (maxPos < 0) if (!isIgnored()) segments.add(es); info.setPosition(pos); return true; info.setPosition(pos); return true;
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); maxPos = checkRange(pos, maxPos); if (maxPos < 0) info.setPosition(pos); return true;
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); if (pos >= maxPos) return false; info.setPosition(++pos); // Skip quote return true;
TreeInfo createInfo(int start) { return new TreeInfo(topFragment, start); }
int getPosition() { return get(top).position; }
TreeInfo(Fragment frag, int pos) { add(new StateInfo(pos, 0, frag)); top = 0; }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); if (pos >= maxPos || version.charAt(pos) != 'p') return false; int[] position = new int[] {++pos}; Comparable<?> v = VersionParser.parseRawElement(version, position, maxPos); if (v == null) return false; if (!isIgnored()) info.setPadValue(v); info.setPosition(position[0]); return true; }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int[] position = new int[] {info.getPosition()}; Comparable<?> v = VersionParser.parseRawElement(version, position, maxPos); if (v == null) return false; if (!isIgnored()) segments.add(v); info.setPosition(position[0]); return true; }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); int litLen = string.length(); if (pos + litLen > maxPos) return false; for (int idx = 0; idx < litLen; ++idx, ++pos) { if (string.charAt(idx) != version.charAt(pos)) return false; } info.setPosition(pos); return true; }
void setPosition(int pos) { get(top).position = pos; } }
boolean parseOne(List<Comparable<?>> segments, String version, int maxPos, TreeInfo info) { int pos = info.getPosition(); if (pos < maxPos && isMatch(version, pos)) { // Just swallow, a delimiter does not contribute to the vector. // info.setPosition(pos + 1); return true; } return false; }