items = new ListItem(); list.add(IntegerItem.ZERO); } else { list.add(parseItem(isDigit, version.substring(startIndex, i))); list.add(IntegerItem.ZERO); } else { list.add(parseItem(isDigit, version.substring(startIndex, i))); list.normalize(); // 1.0-* = 1-* list.add(list = new ListItem()); list.add(new StringItem(version.substring(startIndex, i), true)); startIndex = i; } else { if (isDigit && i > startIndex) { list.add(parseItem(true, version.substring(startIndex, i))); startIndex = i; list.add(parseItem(isDigit, version.substring(startIndex))); list.normalize(); canonical = items.toString();
public int compareTo(Item item) { if (item == null) { if (size() == 0) { return 0; // 1-0 = 1- (normalize) = 1 } Item first = get(0); return first.compareTo(null); } switch (item.getType()) { case INTEGER_ITEM: return -1; // 1-1 < 1.0.x case STRING_ITEM: return 1; // 1-1 > 1-sp case LIST_ITEM: Iterator<Item> left = iterator(); Iterator<Item> right = ((ListItem) item).iterator(); while (left.hasNext() || right.hasNext()) { Item l = left.hasNext() ? left.next() : null; Item r = right.hasNext() ? right.next() : null; // if this is shorter, then invert the compare and mul with -1 int result = l == null ? -1 * r.compareTo(l) : l.compareTo(r); if (result != 0) { return result; } } return 0; default: throw new RuntimeException("invalid item: " + item.getClass()); } }
void normalize() { for (ListIterator<Item> iterator = listIterator(size()); iterator.hasPrevious(); ) { Item item = iterator.previous(); if (item.isNull()) { iterator.remove(); // remove null trailing items: 0, "", empty list } else { break; } } }
items = new ListItem(); list.add(IntegerItem.ZERO); } else { list.add(parseItem(isDigit, version.substring(startIndex, i))); list.add(IntegerItem.ZERO); } else { list.add(parseItem(isDigit, version.substring(startIndex, i))); list.normalize(); // 1.0-* = 1-* list.add(list = new ListItem()); list.add(new StringItem(version.substring(startIndex, i), true)); startIndex = i; } else { if (isDigit && i > startIndex) { list.add(parseItem(true, version.substring(startIndex, i))); startIndex = i; list.add(parseItem(isDigit, version.substring(startIndex))); list.normalize(); canonical = items.toString();
public int compareTo(Item item) { if (item == null) { if (size() == 0) { return 0; // 1-0 = 1- (normalize) = 1 } Item first = get(0); return first.compareTo(null); } switch (item.getType()) { case INTEGER_ITEM: return -1; // 1-1 < 1.0.x case STRING_ITEM: return 1; // 1-1 > 1-sp case LIST_ITEM: Iterator<Item> left = iterator(); Iterator<Item> right = ((ListItem) item).iterator(); while (left.hasNext() || right.hasNext()) { Item l = left.hasNext() ? left.next() : null; Item r = right.hasNext() ? right.next() : null; // if this is shorter, then invert the compare and mul with -1 int result = l == null ? -1 * r.compareTo(l) : l.compareTo(r); if (result != 0) { return result; } } return 0; default: throw new RuntimeException("invalid item: " + item.getClass()); } }
public int compareTo(Version o) { return items.compareTo(o.items); }
public boolean isNull() { return (size() == 0); }
void normalize() { for (ListIterator<Item> iterator = listIterator(size()); iterator.hasPrevious(); ) { Item item = iterator.previous(); if (item.isNull()) { iterator.remove(); // remove null trailing items: 0, "", empty list } else { break; } } }
public String toString() { StringBuilder buffer = new StringBuilder("("); for (Iterator<Item> iter = iterator(); iter.hasNext(); ) { buffer.append(iter.next()); if (iter.hasNext()) { buffer.append(','); } } buffer.append(')'); return buffer.toString(); } }
public boolean isNull() { return (size() == 0); }
public int compareTo(Version o) { return items.compareTo(o.items); }
public String toString() { StringBuilder buffer = new StringBuilder("("); for (Iterator<Item> iter = iterator(); iter.hasNext(); ) { buffer.append(iter.next()); if (iter.hasNext()) { buffer.append(','); } } buffer.append(')'); return buffer.toString(); } }