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..5f84774 100644 --- a/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt +++ b/src/test/kotlin/com/github/aarcangeli/ideaclangformat/ClangFormatResponseTest.kt @@ -1,33 +1,10 @@ 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 import org.junit.Test -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 +20,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 = """ @@ -68,10 +60,4 @@ class ClangFormatResponseTest { assertEquals(12, response.replacements[0].length) assertEquals("", response.replacements[0].value) } - - private fun formatXml(response: ClangFormatResponse): String { - val writer = StringWriter() - Persister().write(response, writer) - return writer.buffer.toString() - } }