Skip to content

Commit cfd3dac

Browse files
authored
Merge pull request #360 from Kopilov/enum
Enum values with their own anonymous classes
2 parents ade2c57 + a4ce8ca commit cfd3dac

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

klaxon/src/main/kotlin/com/beust/klaxon/EnumConverter.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ package com.beust.klaxon
66
class EnumConverter: Converter {
77
override fun toJson(value: Any): String {
88
val enum = value as Enum<*>
9-
val field = value.javaClass.declaredFields.find { it.name == enum.name }
9+
val enumClass = if (value.javaClass.isEnum) {
10+
value.javaClass
11+
} else if (value.javaClass.superclass.isEnum) {
12+
value.javaClass.superclass
13+
} else {
14+
throw IllegalArgumentException("Could not find associated enum class for $value")
15+
}
16+
val field = enumClass.declaredFields.find { it.name == enum.name }
1017
?: throw IllegalArgumentException("Could not find associated enum field for $value")
1118
return "\"${field.getAnnotation(Json::class.java)?.name ?: enum.name}\""
1219
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
package com.beust.klaxon
3+
4+
import org.assertj.core.api.Assertions.assertThat
5+
import org.testng.annotations.Test
6+
7+
8+
@Test(description = "Serialing Enum values with their own anonymous classes")
9+
class Issue311Test {
10+
enum class ProtocolState {
11+
WAITING {
12+
override fun signal() = TALKING
13+
},
14+
TALKING {
15+
override fun signal() = WAITING
16+
};
17+
abstract fun signal(): ProtocolState
18+
}
19+
20+
class Klass(val state: ProtocolState)
21+
22+
fun issue311() {
23+
val klass = Klass(ProtocolState.WAITING)
24+
assertThat(Klaxon().toJsonString(klass)).isEqualTo("""{"state" : "WAITING"}""")
25+
}
26+
}

0 commit comments

Comments
 (0)