File tree Expand file tree Collapse file tree 2 files changed +34
-1
lines changed
main/kotlin/com/beust/klaxon
test/kotlin/com/beust/klaxon Expand file tree Collapse file tree 2 files changed +34
-1
lines changed Original file line number Diff line number Diff line change @@ -6,7 +6,14 @@ package com.beust.klaxon
6
6
class EnumConverter : Converter {
7
7
override fun toJson (value : Any ): String {
8
8
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 }
10
17
? : throw IllegalArgumentException (" Could not find associated enum field for $value " )
11
18
return " \" ${field.getAnnotation(Json ::class .java)?.name ? : enum.name} \" "
12
19
}
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments