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;
}