From 2ae5240d8ed28b2c318ea38974bc67b19a4060d7 Mon Sep 17 00:00:00 2001 From: aboyko Date: Tue, 9 Aug 2022 10:32:53 -0400 Subject: [PATCH] Regex version matching fix revisited --- .../commons/java/SpringProjectUtil.java | 56 ++++++++++--------- .../ProjectGenerationsValidationTest.java | 35 ++++++++++++ 2 files changed, 65 insertions(+), 26 deletions(-) diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java index f0224fa66..9bcb08dfc 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/SpringProjectUtil.java @@ -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 springBootVersionGreaterOrEqual(int major, int minor, int patch) { return project -> { Version version = getDependencyVersion(project, SPRING_BOOT); diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java index 55230d10b..5e7c3cbf1 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/validation/test/ProjectGenerationsValidationTest.java @@ -38,6 +38,7 @@ import org.springframework.ide.vscode.boot.validation.generations.json.Link; import org.springframework.ide.vscode.boot.validation.generations.json.SpringProject; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.SpringProjectUtil; +import org.springframework.ide.vscode.commons.java.Version; import org.springframework.ide.vscode.project.harness.BootLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; import org.springframework.test.context.junit4.SpringRunner; @@ -92,6 +93,9 @@ public class ProjectGenerationsValidationTest { version = SpringProjectUtil.getVersion("spring-batch-core-2.4.0-M4"); assertEquals("2.4.0-M4", version); + version = SpringProjectUtil.getVersion("spring-batch-core-2.4.0"); + assertEquals("2.4.0", version); + version = SpringProjectUtil.getVersion("spring-boot-4.4.0-RC2"); assertEquals("4.4.0-RC2", version); @@ -106,6 +110,7 @@ public class ProjectGenerationsValidationTest { version = SpringProjectUtil.getVersion("springcore.f.b"); assertNull(version); + } @Test @@ -205,6 +210,36 @@ public class ProjectGenerationsValidationTest { // Check that the message mentions the boot version of the project and the OSS support end date assertEquals("Using spring-boot version: 1.3.2.RELEASE - OSS has ended on: 2020-01-01 - Commercial support has ended on: 2021-01-01", versionValidation.getMessage()); } + + @Test + public void testDependencyVersionCalculation() throws Exception { + Version version = SpringProjectUtil.getDependencyVersion("spring-boot-1.2.3.jar", "spring-boot"); + assertEquals(1, version.getMajor(), 1); + assertEquals(2, version.getMinor(), 2); + assertEquals(3, version.getPatch()); + assertNull(version.getQualifier()); + + version = SpringProjectUtil.getDependencyVersion("spring-boot-1.2.3-RELEASE.jar", "spring-boot"); + assertEquals(version.getMajor(), 1); + assertEquals(version.getMinor(), 2); + assertEquals(version.getPatch(), 3); + assertEquals(version.getQualifier(), "RELEASE"); + + version = SpringProjectUtil.getDependencyVersion("spring-boot-1.2.3.RELEASE.jar", "spring-boot"); + assertEquals(1, version.getMajor(), 1); + assertEquals(2, version.getMinor(), 2); + assertEquals(3, version.getPatch()); + assertEquals("RELEASE", version.getQualifier()); + + version = SpringProjectUtil.getDependencyVersion("spring-boot-1.2.3.BUILD-SNAPSHOT.jar", "spring-boot"); + assertEquals(1, version.getMajor(), 1); + assertEquals(2, version.getMinor(), 2); + assertEquals(3, version.getPatch()); + assertEquals("BUILD-SNAPSHOT", version.getQualifier()); + + version = SpringProjectUtil.getDependencyVersion("spring-boot-actuator-1.2.3.BUILD-SNAPSHOT.jar", "spring-boot"); + assertNull(version); + } /* *