code: @Override
  	public int compareTo(@Nullable final ReadableVersionNumber other) {
  		int result = 0;
  		if (other == null) {
  			result = -1;
  		} else {
  			Check.notNull(other.getGroups(), "other.getGroups()");
  			final int length = groups.size() < other.getGroups().size() ? groups.size() : other.getGroups().size();
  			final NaturalOrderComparator comparator = new NaturalOrderComparator();
  			result = comparator.compare(toVersionString(groups.subList(0, length)), toVersionString(other.getGroups().subList(0, length)));
  			if (result == 0) {
  				result = groups.size() > other.getGroups().size() ? 1 : groups.size() < other.getGroups().size() ? -1 : 0;
  			}
  			if (result == 0) {
  				result = extension.compareTo(other.getExtension());
  			}
  			if (result == 0) {
  				result = comparator.compare(toVersionString(), other.toVersionString());
  			}
  		}
  		return result;
  	}
docs: Compares this version number with the specified version number for order. Returns a negative integer, zero, or a
  positive integer as this version number is less than, equal to, or greater than the specified version number.
  
  @return a negative integer, zero, or a positive integer as this version number is less than, equal to, or greater
  than the specified version number.