From 0ebc0ee72ce6df7d679e669b1118f32487670c70 Mon Sep 17 00:00:00 2001 From: Ludwig Fritsch Date: Thu, 14 Dec 2023 11:27:30 +0100 Subject: [PATCH] Remove absolute file path handling #2866 --- .../filter/structuremodifier/NodeRemover.kt | 21 +++++++--- .../structuremodifier/NodeRemoverTest.kt | 41 ------------------- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/analysis/filter/StructureModifier/src/main/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemover.kt b/analysis/filter/StructureModifier/src/main/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemover.kt index 09dfe3898f..50070866cd 100644 --- a/analysis/filter/StructureModifier/src/main/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemover.kt +++ b/analysis/filter/StructureModifier/src/main/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemover.kt @@ -31,17 +31,26 @@ class NodeRemover(private val project: Project) { private fun removeNodes(paths: List>): List { val rootNode = project.rootNode.toMutableNode() - for (path in paths) { var currentNode = rootNode - val rootElementIndex = path.indexOfFirst { it == "root" } - val pathSegmentsWithoutRoot = path.subList(rootElementIndex + 1, path.size) - for ((index, pathSegment) in pathSegmentsWithoutRoot.withIndex()) { - val isLastSegment = index == pathSegmentsWithoutRoot.lastIndex + if (path[0] != "root") { + logger.warn("Path to node has to start with root: ${path.joinToString("/")}") + continue + } + + val pathWithoutRoot = path.drop(1) + for ((index, pathSegment) in pathWithoutRoot.withIndex()) { + val isLastSegment = index == pathWithoutRoot.lastIndex if (isLastSegment) { currentNode.children.removeIf { it.name == pathSegment } } else { - currentNode = currentNode.children.find { it.name == pathSegment } ?: break + val childNode: MutableNode? = currentNode.children.find { it.name == pathSegment } + if (childNode != null) { + currentNode = childNode + } else { + logger.warn("Path to node not found: ${path.joinToString("/")}") + break + } } } } diff --git a/analysis/filter/StructureModifier/src/test/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemoverTest.kt b/analysis/filter/StructureModifier/src/test/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemoverTest.kt index 7e9986499d..70cebd61a7 100644 --- a/analysis/filter/StructureModifier/src/test/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemoverTest.kt +++ b/analysis/filter/StructureModifier/src/test/kotlin/de/maibornwolff/codecharta/filter/structuremodifier/NodeRemoverTest.kt @@ -155,45 +155,4 @@ class NodeRemoverTest { Assertions.assertThat(folderToKeep).isNotNull() Assertions.assertThat(folderToRemove).isNull() } - - @Test - fun `Should correctly remove node when arguments starting with a forward slash get converted to absolute paths (git-bash)`() { - // given - val bufferedReader = File("src/test/resources/merged_project.cc.json").bufferedReader() - val mergedProject = ProjectDeserializer.deserializeProject(bufferedReader) - val subProjectExtractor = NodeRemover(mergedProject) - val pathToRemove = "/root/src/test/java/io" - val pathToRemoveAbsolute = "C:/Users/User/AppData/Local/Programs/Git$pathToRemove" - - // when - val result = subProjectExtractor.remove(arrayOf(pathToRemoveAbsolute)) - val folderToRemove = result.rootNode.children.find { it.name == "src" } - ?.children?.find { it.name == "test" } - ?.children?.find { it.name == "java" } - ?.children?.find { it.name == "io" } - - // then - Assertions.assertThat(folderToRemove).isNull() - } - - @Test - fun `Should correctly remove node when remove value is absolute path and contains an additional 'root' path element`() { - // given - val bufferedReader = File("src/test/resources/merged_project.cc.json").bufferedReader() - val mergedProject = ProjectDeserializer.deserializeProject(bufferedReader) - val subProjectExtractor = NodeRemover(mergedProject) - val pathToRemove = "/root/src/test/java/io/root" - val pathToRemoveAbsolute = "C:/Users/root/AppData/Local/Programs/Git$pathToRemove" - - // when - val result = subProjectExtractor.remove(arrayOf(pathToRemoveAbsolute)) - val folderToRemove = result.rootNode.children.find { it.name == "src" } - ?.children?.find { it.name == "test" } - ?.children?.find { it.name == "java" } - ?.children?.find { it.name == "io" } - ?.children?.find { it.name == "root" } - - // then - Assertions.assertThat(folderToRemove).isNull() - } }