From 66b6b796fa9aea9d7b8b5014e97844c3d9d2347b Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Thu, 12 May 2022 14:38:21 -0400 Subject: [PATCH] Rewrite parsing should not parse pom inside target folders --- .../boot/java/rewrite/MavenProjectParser.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/MavenProjectParser.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/MavenProjectParser.java index ff7fdabca..671c4966b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/MavenProjectParser.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/MavenProjectParser.java @@ -48,6 +48,7 @@ import org.openrewrite.maven.tree.ResolvedPom; import org.openrewrite.properties.PropertiesParser; import org.openrewrite.xml.XmlParser; import org.openrewrite.xml.tree.Xml; +import org.openrewrite.xml.tree.Xml.Document; import org.openrewrite.yaml.YamlParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,7 +99,10 @@ public class MavenProjectParser { */ public List parse(Path projectDirectory, List dependencies) { List mavens = mavenParser.parse(getMavenPoms(projectDirectory, ctx), projectDirectory, ctx); - mavens = sort(mavens); + List sorted = sort(mavens); + + // Filter out pom files inside target folders. (Naive implementation.) + mavens = sorted.stream().filter(m -> !isInsideBuildFolderOfOtherMavenProjects(sorted, m)).collect(Collectors.toList()); JavaParser javaParser = javaParserBuilder.build(); @@ -267,6 +271,16 @@ public class MavenProjectParser { return sorted; } + private static boolean isInsideBuildFolderOfOtherMavenProjects(List all, Xml.Document current) { + return all.stream().filter(m -> { + if (m != current) { + Path pomPath = m.getSourcePath(); + return current.getSourcePath().startsWith((pomPath.getParent() == null ? Paths.get("") : pomPath.getParent()) .resolve("target")); + } + return false; + }).findFirst().isPresent(); + } + private static List getSources(Path srcDir, ExecutionContext ctx, String... fileTypes) { if (!srcDir.toFile().exists()) { return List.of();