Semver class
Пакет: com.hypixel.hytale.common.semver
Файл: com/hypixel/hytale/common/semver/Semver.java
implements: Comparable<Semver>
Поля (27)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Codec<Semver> |
CODEC |
|
|
var0 |
|
|
var0 |
|
|
var0 |
|
|
var0 |
|
|
var0 |
|
|
var0 |
|
StringBuilder |
var1 |
|
long |
var10 |
|
String[] |
var14 |
|
|
var14 |
|
String[] |
var15 |
|
boolean |
var2 |
|
String |
var2 |
|
char |
var2 |
|
boolean |
var3 |
|
String |
var3 |
|
|
var3 |
|
int |
var4 |
|
String[] |
var4 |
|
String |
var5 |
|
String[] |
var5 |
|
String |
var6 |
|
long |
var6 |
|
int |
var7 |
|
int |
var8 |
|
long |
var8 |
Методы (43)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Major must be a non-negative integer") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Minor must be a non-negative integer") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Patch must be a non-negative integer") |
public |
int |
compareToint compareTo(@Nonnull Semver var1) |
|
|
for for(var4 = 0; var4 < this.preRelease.length && var4 < var1.preRelease.length; var4++) |
|
|
for for(String var4 : var0) |
abstract |
|
for for(int var1 = 0; var1 < var0.length() |
abstract |
return |
fromStringreturn fromString(var0, false) |
public |
String |
getBuildString getBuild() |
public |
long |
getMajorlong getMajor() |
public |
long |
getMinorlong getMinor() |
public |
long |
getPatchlong getPatch() |
public |
String[] |
getPreReleaseString[] getPreRelease() |
public |
boolean |
hasPreReleaseboolean hasPreRelease() |
|
|
if if(var1 < 0L) |
|
|
if if(var3 < 0L) |
|
|
if if(var5 < 0L) |
|
|
if if(this.major != var1.major) |
|
|
if if(this.minor != var1.minor) |
|
|
if if(this.patch != var1.patch) |
|
|
if if(var2 && !var3) |
|
|
if if(!var2 && var3) |
|
|
if if(!var2) |
|
|
if if(var8 != 0) |
|
|
if if(var7 != 0) |
|
|
if if(this.preRelease.length > var4) |
|
|
if if(this.preRelease != null && this.preRelease.length > 0) |
|
|
if if(var15.length < 1) |
|
|
if if(var6 < 0L) |
|
|
if if(var8 < 0L) |
|
|
if if(var10 < 0L) |
|
|
if if(var0 != null) |
|
|
if if(var2 == '.') |
|
|
if if(var0 != null) |
static |
long |
parseComponentlong parseComponent(@Nonnull String var0, @Nonnull String var1, @Nonnull String var2) |
public |
boolean |
satisfiesboolean satisfies(@Nonnull SemverRange var1) |
abstract |
|
this this(var1, var3, var5, null, null) |
static |
void |
validateBuildvoid validateBuild(@Nullable String var0) |
abstract |
|
validateBuild validateBuild(var8) |
abstract |
|
validateBuild validateBuild(var3) |
static |
void |
validatePreReleasevoid validatePreRelease(@Nullable String[] var0) |
abstract |
|
validatePreRelease validatePreRelease(var7) |
abstract |
|
validatePreRelease validatePreRelease(var14) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.common.semver;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import java.util.Arrays;
class="kw">import java.util.Locale;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class Semver class="kw">implements Comparable<Semver> {
class="kw">public class="kw">static class="kw">final Codec<Semver> CODEC = SemverCodec.INSTANCE;
class="kw">private class="kw">final long major;
class="kw">private class="kw">final long minor;
class="kw">private class="kw">final long patch;
class="kw">private class="kw">final String[] preRelease;
class="kw">private class="kw">final String build;
class="kw">public Semver(long var1, long var3, long var5) {
this(var1, var3, var5, null, null);
}
class="kw">public Semver(long var1, long var3, long var5, String[] var7, String var8) {
if (var1 < 0L) {
throw new IllegalArgumentException("Major must be a non-negative integer");
}
if (var3 < 0L) {
throw new IllegalArgumentException("Minor must be a non-negative integer");
}
if (var5 < 0L) {
throw new IllegalArgumentException("Patch must be a non-negative integer");
}
validatePreRelease(var7);
validateBuild(var8);
this.major = var1;
this.minor = var3;
this.patch = var5;
this.preRelease = var7;
this.build = var8;
}
class="kw">public long getMajor() {
class="kw">return this.major;
}
class="kw">public long getMinor() {
class="kw">return this.minor;
}
class="kw">public long getPatch() {
class="kw">return this.patch;
}
class="kw">public String[] getPreRelease() {
class="kw">return this.preRelease == null ? new String[0] : (String[])this.preRelease.clone();
}
class="kw">public boolean hasPreRelease() {
class="kw">return this.preRelease != null && this.preRelease.length > 0;
}
class="kw">public String getBuild() {
class="kw">return this.build;
}
class="kw">public boolean satisfies(@Nonnull SemverRange var1) {
class="kw">return var1.satisfies(this);
}
class="kw">public int compareTo(@Nonnull Semver var1) {
if (this.major != var1.major) {
class="kw">return Long.compare(this.major, var1.major);
}
if (this.minor != var1.minor) {
class="kw">return Long.compare(this.minor, var1.minor);
}
if (this.patch != var1.patch) {
class="kw">return Long.compare(this.patch, var1.patch);
}
boolean var2 = this.hasPreRelease();
boolean var3 = var1.hasPreRelease();
if (var2 && !var3) {
class="kw">return -1;
}
if (!var2 && var3) {
class="kw">return 1;
}
if (!var2) {
class="kw">return 0;
}
int var4;
for (var4 = 0; var4 < this.preRelease.length && var4 < var1.preRelease.length; var4++) {
String var5 = this.preRelease[var4];
String var6 = var1.preRelease[var4];
if (StringUtil.isNumericString(var5) && StringUtil.isNumericString(var6)) {
int var8 = Integer.compare(Integer.parseInt(var5), Integer.parseInt(var6));
if (var8 != 0) {
class="kw">return var8;
}
} else {
int var7 = var5.compareTo(var6);
if (var7 != 0) {
class="kw">return var7;
}
}
}
if (this.preRelease.length > var4) {
class="kw">return 1;
} else {
class="kw">return var1.preRelease.length > var4 ? -1 : 0;
}
}
@Nonnull
@Override
class="kw">public String toString() {
StringBuilder var1 = new StringBuilder().append(this.major).append('.').append(this.minor).append('.').append(this.patch);
if (this.preRelease != null && this.preRelease.length > 0) {
var1.append('-').append(String.join(".", this.preRelease));
}
if (this.build != null && !this.build.isEmpty()) {
var1.append('+').append(this.build);
}
class="kw">return var1.toString();
}
@Nonnull
class="kw">public class="kw">static Semver fromString(String var0) {
class="kw">return fromString(var0, false);
}
@Nonnull
class="kw">public class="kw">static Semver fromString(String var0, boolean var1) {
Objects.requireNonNull(var0, "Semver string can't be null!");
String var2 = var0;
var0 = var0.trim();
if (var0.isEmpty()) {
throw new IllegalArgumentException("Semver string is empty (input: '" + var2 + "')");
}
if (var0.charAt(0) == '=' || var0.charAt(0) == 'v') {
var0 = var0.substring(1);
}
if (!var0.isEmpty() && (var0.charAt(0) == '=' || var0.charAt(0) == 'v')) {
var0 = var0.substring(1);
}
var0 = var0.trim();
if (var0.isEmpty()) {
throw new IllegalArgumentException("Semver string is empty after stripping leading '='/'v' (input: '" + var2 + "')");
}
String var3 = null;
if (var0.contains("+")) {
String[] var4 = var0.split("\\+", 2);
var0 = var4[0];
var3 = var4[1];
validateBuild(var3);
}
String[] var14 = null;
if (var0.contains("-")) {
String[] var5 = var0.split("-", 2);
var0 = var5[0];
var14 = var5[1].split("\\.", -1);
validatePreRelease(var14);
}
if (var0.isEmpty() || var0.charAt(0) != '.' && var0.charAt(var0.length() - 1) != '.') {
String[] var15 = var0.split("\\.", -1);
if (var15.length < 1) {
throw new IllegalArgumentException("String doesn't match <major>.<minor>.<patch> (" + var0 + ")");
} else {
long var6 = parseComponent(var15[0], "Major", var2);
if (var6 < 0L) {
throw new IllegalArgumentException("Major must be a non-negative integers (" + var0 + ")");
} else if (!var1 && var15.length == 1) {
class="kw">return new Semver(var6, 0L, 0L, var14, var3);
} else if (var15.length < 2) {
throw new IllegalArgumentException("String doesn't match <major>.<minor>.<patch> (" + var0 + ")");
} else {
long var8 = parseComponent(var15[1], "Minor", var2);
if (var8 < 0L) {
throw new IllegalArgumentException("Minor must be a non-negative integers (" + var0 + ")");
} else if (!var1 && var15.length == 2) {
class="kw">return new Semver(var6, var8, 0L, var14, var3);
} else if (var15.length != 3) {
throw new IllegalArgumentException("String doesn't match <major>.<minor>.<patch> (" + var0 + ")");
} else {
long var10 = parseComponent(var15[2], "Patch", var2);
if (var10 < 0L) {
throw new IllegalArgumentException("Patch must be a non-negative integers (" + var0 + ")");
} else {
class="kw">return new Semver(var6, var8, var10, var14, var3);
}
}
}
}
} else {
throw new IllegalArgumentException("Failed to parse digits (" + var0 + ")");
}
}
class="kw">private class="kw">static long parseComponent(@Nonnull String var0, @Nonnull String var1, @Nonnull String var2) {
try {
class="kw">return Long.parseLong(var0);
} catch (NumberFormatException var4) {
throw new IllegalArgumentException(
"Invalid version '"
+ var2
+ "': "
+ var1.toLowerCase(Locale.ROOT)
+ " must be a non-negative integer, got '"
+ var0
+ "'. Expected format: <major>.<minor>.<patch>.",
var4
);
}
}
class="kw">private class="kw">static void validateBuild(@Nullable String var0) {
if (var0 != null) {
if (!var0.isEmpty() && var0.charAt(0) != '.' && var0.charAt(var0.length() - 1) != '.') {
for (int var1 = 0; var1 < var0.length(); var1++) {
char var2 = var0.charAt(var1);
if (var2 == '.') {
if (var0.charAt(var1 - 1) == '.') {
throw new IllegalArgumentException("Build identifiers must only contain ASCII alphanumerics and hyphens [0-9A-Za-z-] (" + var0 + ")");
}
} else if ((var2 < '0' || var2 > 'z' || var2 > '9' && var2 < 'A' || var2 > 'Z' && var2 < 'a') && var2 != '-') {
throw new IllegalArgumentException("Build identifiers must only contain ASCII alphanumerics and hyphens [0-9A-Za-z-] (" + var0 + ")");
}
}
} else {
throw new IllegalArgumentException("Build identifiers must only contain ASCII alphanumerics and hyphens [0-9A-Za-z-] (" + var0 + ")");
}
}
}
class="kw">private class="kw">static void validatePreRelease(@Nullable String[] var0) {
if (var0 != null) {
for (String var4 : var0) {
if (var4.isEmpty() || !StringUtil.isAlphaNumericHyphenString(var4)) {
throw new IllegalArgumentException("Pre-release must only be alphanumeric (" + Arrays.toString(var0) + ")");
}
}
}
}
}