add version parsing to API

This commit is contained in:
FalsePattern committed 2025-06-03 15:06:03 +02:00
1 parent df1f294776
commit ee328483eb
2 files changed
+35 -21

No files matched your search

@@ -21,6 +21,8 @@
*/
package com.falsepattern.lib.dependencies;
import com.falsepattern.lib.internal.impl.dependencies.DependencyLoaderImpl;
public abstract class Version implements Comparable<Version> {
protected Version() {
}
@@ -36,4 +38,12 @@ public abstract class Version implements Comparable<Version> {
public boolean equals(Version other) {
return compareTo(other) == 0;
}
/**
*
* @since 1.7.0
*/
public static Version parse(String versionString) {
return DependencyLoaderImpl.parseVersion(versionString);
}
}
@@ -367,10 +367,11 @@ public class DependencyLoaderImpl {
}
private static final Pattern VERSION_PATTERN =
Pattern.compile("(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*))?(?:\\.(0|[1-9]\\d*))?"
+ "(?:-((?:(?:[0-9]+[a-zA-Z-][\\w-]*)|(?:[a-zA-Z][\\w-]*)|(?:[1-9]\\d*)|0)"
+ "(?:\\.(?:(?:[0-9]+[a-zA-Z-][\\w-]*)|(?:[a-zA-Z][\\w-]*)|(?:[1-9]\\d*)|0))*))?"
+ "(?:\\+([\\w-]+(\\.[\\w-]+)*))?");
Pattern.compile("(0|[1-9]\\d*)" +
"(?:\\.(0|[1-9]\\d*))?" +
"(?:\\.(0|[1-9]\\d*))?" +
"(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
"(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?");
private enum DependencySide {
COMMON,
@@ -505,23 +506,7 @@ public class DependencyLoaderImpl {
}
val groupId = parts[0];
val artifactId = parts[1];
Version version;
try {
val matcher = VERSION_PATTERN.matcher(parts[2]);
if (!matcher.matches()) {
throw new IllegalArgumentException("Invalid version: " + parts[2]);
}
val major = Integer.parseInt(matcher.group(1));
val minor = matcher.group(2) == null ? -1
: Integer.parseInt(matcher.group(2));
val patch = matcher.group(3) == null ? -1
: Integer.parseInt(matcher.group(3));
val preRelease = matcher.group(4);
val build = matcher.group(5);
version = new SemanticVersion(major, minor, patch, preRelease, build);
} catch (IllegalArgumentException e) {
version = new RawVersion(parts[2]);
}
Version version = parseVersion(parts[2]);
final String classifier = parts.length > 3 ? parts[3] : null;
if (classifier != null) {
LOG.info("Found dependency: {}:{}:{}:{} from {}",
@@ -552,6 +537,25 @@ public class DependencyLoaderImpl {
tasks = new ArrayList<>(artifacts);
}
public static Version parseVersion(String versionString) {
try {
val matcher = VERSION_PATTERN.matcher(versionString);
if (!matcher.matches()) {
return new RawVersion(versionString);
}
val major = Integer.parseInt(matcher.group(1));
val minor = matcher.group(2) == null ? -1
: Integer.parseInt(matcher.group(2));
val patch = matcher.group(3) == null ? -1
: Integer.parseInt(matcher.group(3));
val preRelease = matcher.group(4);
val build = matcher.group(5);
return new SemanticVersion(major, minor, patch, preRelease, build);
} catch (Exception e) {
return new RawVersion(versionString);
}
}
private static class SideAwareAssistant {
static ScopeSide current() {
return new ScopeSide(Share.DEV_ENV ? DependencyScope.DEV : DependencyScope.OBF, FMLLaunchHandler.side() == Side.CLIENT ? DependencySide.CLIENT : DependencySide.SERVER);