From 1b1a6c285481a87de3c7bac824177b42afc10d5f Mon Sep 17 00:00:00 2001 From: Jon Schneider Date: Sun, 28 Jun 2020 16:03:58 -0700 Subject: [PATCH] Fix relative XPath matching --- .../main/java/org/openrewrite/maven/tree/Maven.java | 6 +++--- .../main/java/org/openrewrite/xml/XPathMatcher.java | 2 +- .../kotlin/org/openrewrite/xml/XPathMatcherTest.kt | 6 +++--- .../org/openrewrite/xml/search/FindTagsTest.kt | 12 +++++++----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/tree/Maven.java b/rewrite-maven/src/main/java/org/openrewrite/maven/tree/Maven.java index d9378858d7e..d818ece46fe 100644 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/tree/Maven.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/tree/Maven.java @@ -78,7 +78,7 @@ public Pom(MavenModel model, Xml.Document document) { .map(dm -> new DependencyManagement(model.getDependencyManagement(), dm)) .orElse(null); - this.memoizedDependencies = new MemoizedTags<>(document.getRoot(), "project/dependencies/dependency", + this.memoizedDependencies = new MemoizedTags<>(document.getRoot(), "dependencies/dependency", tag -> new Dependency( false, model.getDependencies().stream() @@ -89,7 +89,7 @@ public Pom(MavenModel model, Xml.Document document) { tag ), Dependency::getTag); - this.memoizedProperties = new MemoizedTags<>(document.getRoot(), "project/properties/*", + this.memoizedProperties = new MemoizedTags<>(document.getRoot(), "properties/*", Property::new, Property::getTag); } @@ -475,7 +475,7 @@ public DependencyManagement(MavenModel.DependencyManagement model, Xml.Tag tag) this.model = model; this.tag = tag; - this.memoizedDependencies = new MemoizedTags<>(tag, "dependencyManagement/dependencies/dependency", + this.memoizedDependencies = new MemoizedTags<>(tag, "dependencies/dependency", dm -> new Dependency( true, model.getDependencies().stream() diff --git a/rewrite-xml/src/main/java/org/openrewrite/xml/XPathMatcher.java b/rewrite-xml/src/main/java/org/openrewrite/xml/XPathMatcher.java index 312867f51f8..14a56c2dd11 100644 --- a/rewrite-xml/src/main/java/org/openrewrite/xml/XPathMatcher.java +++ b/rewrite-xml/src/main/java/org/openrewrite/xml/XPathMatcher.java @@ -70,7 +70,7 @@ public boolean matches(Cursor cursor) { } } - return expression.startsWith("/") || pathIndex == path.size(); + return expression.startsWith("/") || path.size() - pathIndex == 1; } else if (expression.startsWith("/")) { Collections.reverse(path); diff --git a/rewrite-xml/src/test/kotlin/org/openrewrite/xml/XPathMatcherTest.kt b/rewrite-xml/src/test/kotlin/org/openrewrite/xml/XPathMatcherTest.kt index 49b02799f9d..c256c768d5d 100644 --- a/rewrite-xml/src/test/kotlin/org/openrewrite/xml/XPathMatcherTest.kt +++ b/rewrite-xml/src/test/kotlin/org/openrewrite/xml/XPathMatcherTest.kt @@ -54,9 +54,9 @@ class XPathMatcherTest : XmlParser() { @Test fun matchRelativeAttribute() { - assertTrue(visitor("artifactId/@scope").visit(x)) - assertTrue(visitor("artifactId/@*").visit(x)) - assertTrue(visitor("//artifactId/@scope").visit(x)) + assertTrue(visitor("dependency/artifactId/@scope").visit(x)) + assertTrue(visitor("dependency/artifactId/@*").visit(x)) + assertTrue(visitor("//dependency/artifactId/@scope").visit(x)) } private fun visitor(xPath: String): XmlSourceVisitor { diff --git a/rewrite-xml/src/test/kotlin/org/openrewrite/xml/search/FindTagsTest.kt b/rewrite-xml/src/test/kotlin/org/openrewrite/xml/search/FindTagsTest.kt index 627c64e9981..7531705b3bb 100644 --- a/rewrite-xml/src/test/kotlin/org/openrewrite/xml/search/FindTagsTest.kt +++ b/rewrite-xml/src/test/kotlin/org/openrewrite/xml/search/FindTagsTest.kt @@ -25,10 +25,12 @@ import org.openrewrite.xml.tree.Xml class FindTagsTest : XmlParser() { private val x = parse(""" - - - - + + + + + + """.trimIndent()) private val deep = parse(""" @@ -45,7 +47,7 @@ class FindTagsTest : XmlParser() { @Test fun findAbsolute() { - assertThat(FindTags("/dependencies/dependency").visit(x).map { it.name }) + assertThat(FindTags("/project/dependencies/dependency").visit(x).map { it.name }) .hasSize(2) .containsExactly("dependency", "dependency") }