From a64c3028319a063b16b1b5f6eeee047fb6540a16 Mon Sep 17 00:00:00 2001 From: Victor Rubezhny Date: Wed, 1 Feb 2023 16:48:18 +0100 Subject: [PATCH] Provided dependencies from imported BOM are not correctly calculated on hover #347 A fix for the case with the version defined with property variable in parent pom.xml and JUnit test case --- .../hover/MavenHoverParticipant.java | 5 ++- .../hover/ManagedVersionHoverTest.java | 30 +++++++++++-- .../eclipse-bom-tester/parent/pom.xml | 42 +++++++++++++++++++ .../test/resources/eclipse-bom-tester/pom.xml | 38 +++++++++++++++++ .../pom-bom-defined-dependency-version.xml | 30 ------------- 5 files changed, 110 insertions(+), 35 deletions(-) create mode 100644 lemminx-maven/src/test/resources/eclipse-bom-tester/parent/pom.xml create mode 100644 lemminx-maven/src/test/resources/eclipse-bom-tester/pom.xml delete mode 100644 lemminx-maven/src/test/resources/pom-bom-defined-dependency-version.xml diff --git a/lemminx-maven/src/main/java/org/eclipse/lemminx/extensions/maven/participants/hover/MavenHoverParticipant.java b/lemminx-maven/src/main/java/org/eclipse/lemminx/extensions/maven/participants/hover/MavenHoverParticipant.java index c6c89f36..ed98917e 100644 --- a/lemminx-maven/src/main/java/org/eclipse/lemminx/extensions/maven/participants/hover/MavenHoverParticipant.java +++ b/lemminx-maven/src/main/java/org/eclipse/lemminx/extensions/maven/participants/hover/MavenHoverParticipant.java @@ -201,8 +201,9 @@ private String getManagedVersionText(IHoverRequest request) { for (DOMElement e : elements) { Optional version = DOMUtils.findChildElementText(e, VERSION_ELT); if (version.isPresent()) { - String sourceModelId = parentMavenProject.getGroupId() + ':' + parentMavenProject.getArtifactId() + ':' + parentMavenProject.getVersion(); - return createVersionMessage(request.canSupportMarkupKind(MarkupKind.MARKDOWN), version.get(), sourceModelId, parentPomFile.toURI().toString()); + Dependency d = ParticipantUtils.getArtifactToSearch(parentMavenProject, e); + String sourceModelId = d.getGroupId() + ':' + d.getArtifactId() + ':' + d.getVersion(); + return createVersionMessage(request.canSupportMarkupKind(MarkupKind.MARKDOWN), d.getVersion(), sourceModelId, parentPomFile.toURI().toString()); } } diff --git a/lemminx-maven/src/test/java/org/eclipse/lemminx/extensions/maven/participants/hover/ManagedVersionHoverTest.java b/lemminx-maven/src/test/java/org/eclipse/lemminx/extensions/maven/participants/hover/ManagedVersionHoverTest.java index 08743af3..fc9c5259 100644 --- a/lemminx-maven/src/test/java/org/eclipse/lemminx/extensions/maven/participants/hover/ManagedVersionHoverTest.java +++ b/lemminx-maven/src/test/java/org/eclipse/lemminx/extensions/maven/participants/hover/ManagedVersionHoverTest.java @@ -123,8 +123,8 @@ void testManagedVersionHoverInDependencyGrandchild() throws IOException, URISynt @Timeout(90000) void testManagedVersionHoverForBomProvidedDependency() throws IOException, URISyntaxException { System.out.println(">>> testManagedVersionHoverForBomProvidedDependency"); - DOMDocument document = createDOMDocument("/pom-bom-defined-dependency-version.xml", languageService); - Position position = new Position(25, 20); + DOMDocument document = createDOMDocument("/eclipse-bom-tester/pom.xml", languageService); + Position position = new Position(26, 30); // Find Definition links List definitions = languageService.findDefinition(document, position, ()->{}); @@ -147,7 +147,31 @@ void testManagedVersionHoverForBomProvidedDependency() throws IOException, URISy System.out.println("<<< testManagedVersionHoverForBomProvidedDependency"); } - // Enable MARKDOWN format + @Test + @Timeout(90000) + void testManagedVersionHoverForBomProvidedDependencyWithProperty() throws IOException, URISyntaxException { + System.out.println(">>> testManagedVersionHoverForBomProvidedDependencyWithProperty"); + DOMDocument document = createDOMDocument("/eclipse-bom-tester/pom.xml", languageService); + Position position = new Position(32, 30); + + // Find Definition links + List definitions = languageService.findDefinition(document, position, ()->{}); + definitions.stream().map(LocationLink::getTargetUri).forEach(u -> System.out.println("Definition Link: " + u)); + assertTrue(definitions.stream().map(LocationLink::getTargetUri).anyMatch(uri -> uri.endsWith("commons-lang3-3.12.0.pom"))); + + // Find Hover with managed version + Hover hover = languageService.doHover(document, position, createSharedSettings()); + final String value = hover.getContents().getRight().getValue(); + System.out.println("Hover Text: [" + value + "]"); + assertNotNull(value); + assertTrue(value.contains("The managed version is")); + assertTrue(value.contains("3.12.0")); + assertTrue(value.contains("The artifact is managed in")); + assertTrue(value.contains("eclipse-bom-tester/parent/pom.xml")); + System.out.println("<<< testManagedVersionHoverForBomProvidedDependencyWithProperty"); + } + + // Enable MARKDOWN format private static SharedSettings createSharedSettings() { HoverCapabilities hoverCapabilities = new HoverCapabilities(); hoverCapabilities.setContentFormat(Arrays.asList(MarkupKind.MARKDOWN)); diff --git a/lemminx-maven/src/test/resources/eclipse-bom-tester/parent/pom.xml b/lemminx-maven/src/test/resources/eclipse-bom-tester/parent/pom.xml new file mode 100644 index 00000000..95a134c4 --- /dev/null +++ b/lemminx-maven/src/test/resources/eclipse-bom-tester/parent/pom.xml @@ -0,0 +1,42 @@ + + + + 4.0.0 + + org.eclipse.test + bom-import-parent + 1.0.0 + + 2023 + + pom + + + 5.2022.3 + 3.12.0 + + + + + + + fish.payara.api + payara-bom + ${payara-version} + pom + import + + + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + + + + + + \ No newline at end of file diff --git a/lemminx-maven/src/test/resources/eclipse-bom-tester/pom.xml b/lemminx-maven/src/test/resources/eclipse-bom-tester/pom.xml new file mode 100644 index 00000000..1665523f --- /dev/null +++ b/lemminx-maven/src/test/resources/eclipse-bom-tester/pom.xml @@ -0,0 +1,38 @@ + + + + 4.0.0 + + + org.eclipse.test + bom-import-parent + 1.0.0 + parent/pom.xml + + + bom-import-child + + 2023 + + pom + + + + + + jakarta.platform + jakarta.jakartaee-api + provided + + + + org.apache.commons + commons-lang3 + + + + + \ No newline at end of file diff --git a/lemminx-maven/src/test/resources/pom-bom-defined-dependency-version.xml b/lemminx-maven/src/test/resources/pom-bom-defined-dependency-version.xml deleted file mode 100644 index f36eebcb..00000000 --- a/lemminx-maven/src/test/resources/pom-bom-defined-dependency-version.xml +++ /dev/null @@ -1,30 +0,0 @@ - - 4.0.0 - org.org.eclipse.lemminx.lemminx-maven.test - bom.defined.version.test - 0.0.1-SNAPSHOT - - - 5.2022.3 - - - - - - fish.payara.api - payara-bom - ${payara-version} - pom - import - - - - - - - jakarta.platform - jakarta.jakartaee-api - provided - - - \ No newline at end of file