private Object readResolve() { OSGiVersion v = this; // Preserve the empty string singleton. if (qualifier.equals(VersionVector.MINS_VALUE)) v = new OSGiVersion(major, minor, micro, VersionVector.MINS_VALUE); return v; } }
/** * Creates an OSGi version identifier from the specified components. * * @param major Major component of the version identifier. * @param minor Minor component of the version identifier. * @param micro Micro component of the version identifier. * @param qualifier Qualifier component of the version identifier. If * <code>null</code> is specified, then the qualifier will be set to * the empty string. * @throws IllegalArgumentException If the numerical components are negative * or the qualifier string is invalid. */ public static Version createOSGi(int major, int minor, int micro, String qualifier) { Comparable<?> logicQualifier; if (qualifier == null || qualifier.length() == 0) { if (major == 0 && minor == 0 && micro == 0) return emptyVersion; logicQualifier = VersionVector.MINS_VALUE; // So that we can do identity compare } else if (qualifier.equals(IVersionFormat.DEFAULT_MAX_STRING_TRANSLATION)) logicQualifier = VersionVector.MAXS_VALUE; else logicQualifier = qualifier; return new OSGiVersion(major, minor, micro, logicQualifier); }
static BasicVersion fromVector(List<Comparable<?>> vector) { int vtop = vector.size() - 1; Comparable<?> pad = vector.get(vtop); if (vtop != 4) { if (vtop == 0) { if (pad == null) return (BasicVersion) emptyVersion; if (pad == VersionVector.MAX_VALUE) return (BasicVersion) MAX_VERSION; } throw new IllegalArgumentException(); } int major = ((Integer) vector.get(0)).intValue(); int minor = ((Integer) vector.get(1)).intValue(); int micro = ((Integer) vector.get(2)).intValue(); Comparable<?> qualifier = vector.get(3); return (major == 0 && minor == 0 && micro == 0 && qualifier == VersionVector.MINS_VALUE) ? (BasicVersion) emptyVersion : new OSGiVersion(major, minor, micro, qualifier); }