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