Search in sources :

Example 6 with VersionPart

use of org.eclipse.n4js.semver.Semver.VersionPart in project n4js by eclipse.

the class VersionNumberImpl method basicSetPatch.

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public NotificationChain basicSetPatch(VersionPart newPatch, NotificationChain msgs) {
    VersionPart oldPatch = patch;
    patch = newPatch;
    if (eNotificationRequired()) {
        ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SemverPackage.VERSION_NUMBER__PATCH, oldPatch, newPatch);
        if (msgs == null)
            msgs = notification;
        else
            msgs.add(notification);
    }
    return msgs;
}
Also used : VersionPart(org.eclipse.n4js.semver.Semver.VersionPart) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Example 7 with VersionPart

use of org.eclipse.n4js.semver.Semver.VersionPart in project n4js by eclipse.

the class VersionPartImpl method equals.

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
@Override
public boolean equals(final Object obj) {
    if ((!(obj instanceof VersionPart))) {
        return false;
    }
    final VersionPart vp = ((VersionPart) obj);
    boolean equals = ((this.isWildcard() == vp.isWildcard()) && Objects.equal(this.getNumberRaw(), vp.getNumberRaw()));
    return equals;
}
Also used : VersionPart(org.eclipse.n4js.semver.Semver.VersionPart)

Example 8 with VersionPart

use of org.eclipse.n4js.semver.Semver.VersionPart in project n4js by eclipse.

the class SemverMatcher method relation.

/**
 * Cite from <a href="https://semver.org/">Semver.org<a>:
 * <p>
 * <i> Precedence MUST be calculated by separating the version into major, minor, patch and pre-release identifiers
 * in that order (Build metadata does not figure into precedence). Precedence is determined by the first difference
 * when comparing each of these identifiers from left to right as follows: Major, minor, and patch versions are
 * always compared numerically.</i>
 * <p>
 * When determining if a version {@code vn} lies within a version range, Semver takes the pre-release tag of the
 * {@code limit} as a context into account. Only if the context has a pre-release tag, both of the versions can have
 * a relation other than {@link VersionNumberRelation#Unrelated}.<br/>
 * However, Semver also specifies a relation between versions where one has a pre-release tag and the other does
 * not. To enable this relaxed mode, pass {@link RelationKind#SemverMatchAllowPrereleaseTags} as a value for the
 * parameter {@code relationKind}.
 */
public static VersionNumberRelation relation(VersionNumber vn, VersionNumber limit, RelationKind relationKind) {
    boolean qHasPR = vn.hasPreReleaseTag();
    boolean lHasPR = limit.hasPreReleaseTag();
    if (relationKind != RelationKind.SemverMatchAllowPrereleaseTags && qHasPR && !lHasPR) {
        return VersionNumberRelation.Unrelated;
    }
    if (qHasPR && lHasPR) {
        // Two versions that have pre-release tags can match only if their version numbers are equal.
        boolean equalVersionsNumbers = true;
        equalVersionsNumbers &= Math.min(vn.length(), limit.length()) >= 3;
        equalVersionsNumbers &= vn.getMajor().getNumber() == limit.getMajor().getNumber();
        equalVersionsNumbers &= equalVersionsNumbers && vn.getMinor().getNumber() == limit.getMinor().getNumber();
        equalVersionsNumbers &= equalVersionsNumbers && vn.getPatch().getNumber() == limit.getPatch().getNumber();
        if (equalVersionsNumbers) {
            return relationOfQualifiers(vn, limit);
        }
        if (relationKind != RelationKind.LooseCompare) {
            return VersionNumberRelation.Unrelated;
        }
    }
    int idxMax = Math.min(vn.length(), limit.length());
    for (int i = 0; i < idxMax; i++) {
        VersionPart pVn = vn.getPart(i);
        VersionPart pLimit = limit.getPart(i);
        if (pVn.isWildcard()) {
            return VersionNumberRelation.Greater;
        }
        if (pLimit.isWildcard()) {
            return VersionNumberRelation.Smaller;
        }
        int nVn = pVn.getNumber();
        int nLimit = pLimit.getNumber();
        if (nVn > nLimit) {
            return VersionNumberRelation.Greater;
        }
        if (nVn < nLimit) {
            return VersionNumberRelation.Smaller;
        }
    }
    return relationOfQualifiers(vn, limit);
}
Also used : VersionPart(org.eclipse.n4js.semver.Semver.VersionPart) VersionRangeConstraint(org.eclipse.n4js.semver.Semver.VersionRangeConstraint)

Example 9 with VersionPart

use of org.eclipse.n4js.semver.Semver.VersionPart in project n4js by eclipse.

the class SemverUtils method getVersionNumberDescriptor.

static VersionNumberDescriptor getVersionNumberDescriptor(VersionNumber vn) {
    String[] preReleaseParts = null;
    String[] buildMetadataParts = null;
    Qualifier svQualifier = vn.getQualifier();
    if (svQualifier != null && svQualifier.getPreRelease() != null) {
        EList<String> prParts = svQualifier.getPreRelease().getParts();
        preReleaseParts = prParts.toArray(new String[prParts.size()]);
    }
    if (svQualifier != null && svQualifier.getBuildMetadata() != null) {
        EList<String> bmParts = svQualifier.getBuildMetadata().getParts();
        buildMetadataParts = bmParts.toArray(new String[bmParts.size()]);
    }
    VersionPart major = vn.getMajor();
    VersionPart minor = vn.getMinor();
    VersionPart patch = vn.getPatch();
    return new VersionNumberDescriptor(major, minor, patch, preReleaseParts, buildMetadataParts);
}
Also used : VersionPart(org.eclipse.n4js.semver.Semver.VersionPart) Qualifier(org.eclipse.n4js.semver.Semver.Qualifier)

Example 10 with VersionPart

use of org.eclipse.n4js.semver.Semver.VersionPart in project n4js by eclipse.

the class SemverUtils method createVersionNumber.

static VersionNumber createVersionNumber(VersionNumberDescriptor descriptor) {
    VersionNumber versNumber = SemverFactory.eINSTANCE.createVersionNumber();
    VersionPart fromMajor = SemverFactory.eINSTANCE.createVersionPart();
    fromMajor.setNumberRaw(descriptor.major);
    versNumber.setMajor(fromMajor);
    if (descriptor.minor != null) {
        VersionPart fromMinor = SemverFactory.eINSTANCE.createVersionPart();
        fromMinor.setNumberRaw(descriptor.minor);
        versNumber.setMinor(fromMinor);
    }
    if (descriptor.patch != null) {
        VersionPart fromPatch = SemverFactory.eINSTANCE.createVersionPart();
        fromPatch.setNumberRaw(descriptor.patch);
        versNumber.setPatch(fromPatch);
    }
    if (descriptor.preReleaseParts != null || descriptor.buildMetadataParts != null) {
        Qualifier qualifier = SemverFactory.eINSTANCE.createQualifier();
        versNumber.setQualifier(qualifier);
        if (descriptor.preReleaseParts != null) {
            QualifierTag prQualifierTag = SemverFactory.eINSTANCE.createQualifierTag();
            prQualifierTag.getParts().addAll(Arrays.asList(descriptor.preReleaseParts));
            qualifier.setPreRelease(prQualifierTag);
        }
        if (descriptor.buildMetadataParts != null) {
            QualifierTag bmQualifierTag = SemverFactory.eINSTANCE.createQualifierTag();
            bmQualifierTag.getParts().addAll(Arrays.asList(descriptor.buildMetadataParts));
            qualifier.setBuildMetadata(bmQualifierTag);
        }
    }
    return versNumber;
}
Also used : VersionPart(org.eclipse.n4js.semver.Semver.VersionPart) QualifierTag(org.eclipse.n4js.semver.Semver.QualifierTag) Qualifier(org.eclipse.n4js.semver.Semver.Qualifier) VersionNumber(org.eclipse.n4js.semver.Semver.VersionNumber)

Aggregations

VersionPart (org.eclipse.n4js.semver.Semver.VersionPart)10 ENotificationImpl (org.eclipse.emf.ecore.impl.ENotificationImpl)3 Qualifier (org.eclipse.n4js.semver.Semver.Qualifier)3 QualifierTag (org.eclipse.n4js.semver.Semver.QualifierTag)2 VersionNumber (org.eclipse.n4js.semver.Semver.VersionNumber)2 VersionRangeConstraint (org.eclipse.n4js.semver.Semver.VersionRangeConstraint)2 EPackage (org.eclipse.emf.ecore.EPackage)1 InternalEObject (org.eclipse.emf.ecore.InternalEObject)1 GitHubVersionRequirement (org.eclipse.n4js.semver.Semver.GitHubVersionRequirement)1 HyphenVersionRange (org.eclipse.n4js.semver.Semver.HyphenVersionRange)1 LocalPathVersionRequirement (org.eclipse.n4js.semver.Semver.LocalPathVersionRequirement)1 SimpleVersion (org.eclipse.n4js.semver.Semver.SimpleVersion)1 TagVersionRequirement (org.eclipse.n4js.semver.Semver.TagVersionRequirement)1 URLCommitISH (org.eclipse.n4js.semver.Semver.URLCommitISH)1 URLSemver (org.eclipse.n4js.semver.Semver.URLSemver)1 URLVersionRequirement (org.eclipse.n4js.semver.Semver.URLVersionRequirement)1 VersionRangeSetRequirement (org.eclipse.n4js.semver.Semver.VersionRangeSetRequirement)1 Action (org.eclipse.xtext.Action)1 Parameter (org.eclipse.xtext.Parameter)1 ParserRule (org.eclipse.xtext.ParserRule)1