Skip to content

Commit ee32848

Browse files
committed
add version parsing to API
1 parent df1f294 commit ee32848

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

src/main/java/com/falsepattern/lib/dependencies/Version.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
*/
2222
package com.falsepattern.lib.dependencies;
2323

24+
import com.falsepattern.lib.internal.impl.dependencies.DependencyLoaderImpl;
25+
2426
public abstract class Version implements Comparable<Version> {
2527
protected Version() {
2628
}
@@ -36,4 +38,12 @@ public boolean equals(Object obj) {
3638
public boolean equals(Version other) {
3739
return compareTo(other) == 0;
3840
}
41+
42+
/**
43+
*
44+
* @since 1.7.0
45+
*/
46+
public static Version parse(String versionString) {
47+
return DependencyLoaderImpl.parseVersion(versionString);
48+
}
3949
}

src/main/java/com/falsepattern/lib/internal/impl/dependencies/DependencyLoaderImpl.java

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,11 @@ private static <A, B, C> Stream<Pair<A, B>> flatMap(Pair<A, C> pair, Function<C,
367367
}
368368

369369
private static final Pattern VERSION_PATTERN =
370-
Pattern.compile("(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*))?(?:\\.(0|[1-9]\\d*))?"
371-
+ "(?:-((?:(?:[0-9]+[a-zA-Z-][\\w-]*)|(?:[a-zA-Z][\\w-]*)|(?:[1-9]\\d*)|0)"
372-
+ "(?:\\.(?:(?:[0-9]+[a-zA-Z-][\\w-]*)|(?:[a-zA-Z][\\w-]*)|(?:[1-9]\\d*)|0))*))?"
373-
+ "(?:\\+([\\w-]+(\\.[\\w-]+)*))?");
370+
Pattern.compile("(0|[1-9]\\d*)" +
371+
"(?:\\.(0|[1-9]\\d*))?" +
372+
"(?:\\.(0|[1-9]\\d*))?" +
373+
"(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" +
374+
"(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?");
374375

375376
private enum DependencySide {
376377
COMMON,
@@ -505,23 +506,7 @@ private static void scanDeps() {
505506
}
506507
val groupId = parts[0];
507508
val artifactId = parts[1];
508-
Version version;
509-
try {
510-
val matcher = VERSION_PATTERN.matcher(parts[2]);
511-
if (!matcher.matches()) {
512-
throw new IllegalArgumentException("Invalid version: " + parts[2]);
513-
}
514-
val major = Integer.parseInt(matcher.group(1));
515-
val minor = matcher.group(2) == null ? -1
516-
: Integer.parseInt(matcher.group(2));
517-
val patch = matcher.group(3) == null ? -1
518-
: Integer.parseInt(matcher.group(3));
519-
val preRelease = matcher.group(4);
520-
val build = matcher.group(5);
521-
version = new SemanticVersion(major, minor, patch, preRelease, build);
522-
} catch (IllegalArgumentException e) {
523-
version = new RawVersion(parts[2]);
524-
}
509+
Version version = parseVersion(parts[2]);
525510
final String classifier = parts.length > 3 ? parts[3] : null;
526511
if (classifier != null) {
527512
LOG.info("Found dependency: {}:{}:{}:{} from {}",
@@ -552,6 +537,25 @@ private static void scanDeps() {
552537
tasks = new ArrayList<>(artifacts);
553538
}
554539

540+
public static Version parseVersion(String versionString) {
541+
try {
542+
val matcher = VERSION_PATTERN.matcher(versionString);
543+
if (!matcher.matches()) {
544+
return new RawVersion(versionString);
545+
}
546+
val major = Integer.parseInt(matcher.group(1));
547+
val minor = matcher.group(2) == null ? -1
548+
: Integer.parseInt(matcher.group(2));
549+
val patch = matcher.group(3) == null ? -1
550+
: Integer.parseInt(matcher.group(3));
551+
val preRelease = matcher.group(4);
552+
val build = matcher.group(5);
553+
return new SemanticVersion(major, minor, patch, preRelease, build);
554+
} catch (Exception e) {
555+
return new RawVersion(versionString);
556+
}
557+
}
558+
555559
private static class SideAwareAssistant {
556560
static ScopeSide current() {
557561
return new ScopeSide(Share.DEV_ENV ? DependencyScope.DEV : DependencyScope.OBF, FMLLaunchHandler.side() == Side.CLIENT ? DependencySide.CLIENT : DependencySide.SERVER);

0 commit comments

Comments
 (0)