From 21944cef076a54b2f471030f4dabd587ec997820 Mon Sep 17 00:00:00 2001 From: Alessandro Arcangeli Date: Tue, 24 Jan 2023 00:47:23 +0100 Subject: [PATCH] revert "simpleframework" (line endings are parsed wrongly from xml) --- CHANGELOG.md | 1 - build.gradle.kts | 4 --- .../services/ClangFormatResponse.kt | 35 ++++++++++++------- .../ClangFormatResponseTest.kt | 35 ++++++++----------- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1360676..ea1992f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,6 @@ ### Changed - Change icon ### Fixes -- Replace xml parser from JAXB to simpleframework to avoid references of IDEA internal classes - Remove deprecated API usage ## [0.0.1-beta] - 2023-01-03 diff --git a/build.gradle.kts b/build.gradle.kts index c58a35d..459bf46 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,10 +31,6 @@ kotlin { jvmToolchain(17) } -dependencies { - implementation("org.simpleframework:simple-xml:2.7.1") -} - // Configure Gradle IntelliJ Plugin - read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html intellij { pluginName.set(properties("pluginName")) diff --git a/src/main/kotlin/com/github/aarcangeli/ideaclangformat/services/ClangFormatResponse.kt b/src/main/kotlin/com/github/aarcangeli/ideaclangformat/services/ClangFormatResponse.kt index 323e0d3..a914566 100644 --- a/src/main/kotlin/com/github/aarcangeli/ideaclangformat/services/ClangFormatResponse.kt +++ b/src/main/kotlin/com/github/aarcangeli/ideaclangformat/services/ClangFormatResponse.kt @@ -1,30 +1,39 @@ package com.github.aarcangeli.ideaclangformat.services -import org.simpleframework.xml.Attribute -import org.simpleframework.xml.ElementList -import org.simpleframework.xml.Root -import org.simpleframework.xml.Text -import org.simpleframework.xml.core.Persister +import java.io.StringReader +import javax.xml.bind.JAXBContext +import javax.xml.bind.JAXBException +import javax.xml.bind.annotation.XmlAttribute +import javax.xml.bind.annotation.XmlElement +import javax.xml.bind.annotation.XmlRootElement +import javax.xml.bind.annotation.XmlValue fun parseClangFormatResponse(stdout: String): ClangFormatResponse { - val serializer = Persister() - return serializer.read(ClangFormatResponse::class.java, stdout) + val ctx: JAXBContext? + try { + ctx = JAXBContext.newInstance(ClangFormatResponse::class.java) + } + catch (e: JAXBException) { + throw RuntimeException("Failed to load JAXB context", e) + } + + val result = ctx.createUnmarshaller().unmarshal(StringReader(stdout)) + return result as ClangFormatResponse } -@Root(name = "replacements", strict = false) +@XmlRootElement(name = "replacements") class ClangFormatResponse { - @field:ElementList(name = "replacement", required = false, inline = true) + @set:XmlElement(name = "replacement") var replacements: List = ArrayList() } -@Root(strict = false, name = "replacement") class ClangFormatReplacement { - @field:Attribute(required = true) + @set:XmlAttribute var offset: Int = 0 - @field:Attribute(required = true) + @set:XmlAttribute var length: Int = 0 - @field:Text(required = false) + @set:XmlValue var value: String = "" } diff --git a/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt b/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt index 8f6555e..f9e45a9 100644 --- a/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt +++ b/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt @@ -1,6 +1,5 @@ package com.github.aarcangeli.ideaclangformat -import com.github.aarcangeli.ideaclangformat.services.ClangFormatReplacement import com.github.aarcangeli.ideaclangformat.services.ClangFormatResponse import com.github.aarcangeli.ideaclangformat.services.parseClangFormatResponse import org.junit.Assert.assertEquals @@ -9,25 +8,6 @@ import org.simpleframework.xml.core.Persister import java.io.StringWriter class ClangFormatResponseTest { - @Test - fun marshal() { - val response = ClangFormatResponse() - val replacement = ClangFormatReplacement() - replacement.offset = 1 - replacement.length = 2 - replacement.value = "value" - response.replacements = arrayListOf(replacement) - val expectedValue = """ - - value - - """.trimIndent() - assertEquals( - expectedValue, - formatXml(response) - ) - } - @Test fun unmarshal() { val stdout = """ @@ -43,6 +23,21 @@ class ClangFormatResponseTest { assertEquals("\n\n ", response.replacements[0].value) } + @Test + fun unmarshal2() { + val stdout = """ + + + + + """.trimIndent() + val response = parseClangFormatResponse(stdout) + assertEquals(1, response.replacements.size) + assertEquals(29, response.replacements[0].offset) + assertEquals(3, response.replacements[0].length) + assertEquals("\n\n", response.replacements[0].value) + } + @Test fun unmarshalEmptyReplacements() { val stdout = """