Regex version matching fix revisited

This commit is contained in:
aboyko
2022-08-09 10:32:53 -04:00
parent 3a0b66b50d
commit 2ae5240d8e
2 changed files with 65 additions and 26 deletions

View File

@@ -116,32 +116,9 @@ public class SpringProjectUtil {
public static Version getDependencyVersion(IJavaProject jp, String dependency) {
try {
for (File f : IClasspathUtil.getBinaryRoots(jp.getClasspath(), (cpe) -> !cpe.isSystem())) {
String fileName = f.getName();
if (fileName.startsWith(dependency)) {
StringBuilder sb = new StringBuilder();
sb.append('^');
sb.append(dependency);
sb.append('-');
sb.append(VERSION_PATTERN_STR);
sb.append(".jar$");
Pattern pattern = Pattern.compile(sb.toString());
Matcher matcher = pattern.matcher(fileName);
if (matcher.find() && matcher.groupCount() == 5) {
String major = matcher.group(1);
String minor = matcher.group(2);
String patch = matcher.group(3);
String qualifier = null;
// if (matcher.group(4) != null && matcher.group(4).length() > 1) {
qualifier = matcher.group(4);
// }
return new Version(
Integer.parseInt(major),
Integer.parseInt(minor),
Integer.parseInt(patch),
qualifier
);
}
Version version = getDependencyVersion(f.getName(), dependency);
if (version != null) {
return version;
}
}
} catch (Exception e) {
@@ -150,6 +127,33 @@ public class SpringProjectUtil {
return null;
}
public static Version getDependencyVersion(String fileName, String dependency) {
if (fileName.startsWith(dependency)) {
StringBuilder sb = new StringBuilder();
sb.append('^');
sb.append(dependency);
sb.append('-');
sb.append(VERSION_PATTERN_STR);
sb.append("\\.jar$");
Pattern pattern = Pattern.compile(sb.toString());
Matcher matcher = pattern.matcher(fileName);
if (matcher.find() && matcher.groupCount() >= 5) {
String major = matcher.group(1);
String minor = matcher.group(2);
String patch = matcher.group(3);
String qualifier = matcher.group(5);
return new Version(
Integer.parseInt(major),
Integer.parseInt(minor),
Integer.parseInt(patch),
qualifier
);
}
}
return null;
}
public static Predicate<IJavaProject> springBootVersionGreaterOrEqual(int major, int minor, int patch) {
return project -> {
Version version = getDependencyVersion(project, SPRING_BOOT);