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; }
void toString(StringBuffer sb) { if (array) { sb.append('<'); for (int idx = 0; idx < fragments.length; ++idx) fragments[idx].toString(sb); sb.append('>'); } else { if (getQualifier() == VersionFormatParser.ZERO_OR_ONE_QUALIFIER) { sb.append('['); for (int idx = 0; idx < fragments.length; ++idx) fragments[idx].toString(sb); sb.append(']'); } else { sb.append('('); for (int idx = 0; idx < fragments.length; ++idx) fragments[idx].toString(sb); sb.append(')'); } } super.toString(sb); } }
static Fragment createGroupFragment(VersionFormatParser.Instructions instr, Qualifier qualifier, Fragment[] fragments, boolean array) { return new GroupFragment(instr, qualifier, fragments, array); }
void setDefaults(List<Comparable<?>> segments) { Comparable<?> dflt = getDefaultValue(); if (dflt != null) { // A group default overrides any defaults within the // group fragments super.setDefaults(segments); } else { // Assign defaults for all fragments for (int idx = 0; idx < fragments.length; ++idx) fragments[idx].setDefaults(segments); } }