Skip to content

Commit

Permalink
revert "simpleframework" (line endings are parsed wrongly from xml)
Browse files Browse the repository at this point in the history
  • Loading branch information
aarcangeli committed Jan 24, 2023
1 parent e6c380e commit 21944ce
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 38 deletions.
1 change: 0 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ClangFormatReplacement> = 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 = ""
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 = """
<replacements>
<replacement offset="1" length="2">value</replacement>
</replacements>
""".trimIndent()
assertEquals(
expectedValue,
formatXml(response)
)
}

@Test
fun unmarshal() {
val stdout = """
Expand All @@ -43,6 +23,21 @@ class ClangFormatResponseTest {
assertEquals("\n\n ", response.replacements[0].value)
}

@Test
fun unmarshal2() {
val stdout = """
<?xml version='1.0'?>
<replacements xml:space='preserve' incomplete_format='false'>
<replacement offset='29' length='3'>&#10;&#10;</replacement>
</replacements>
""".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 = """
Expand Down

0 comments on commit 21944ce

Please sign in to comment.