Skip to content

Commit 29ec631

Browse files
authored
Merge pull request #252 from wuseal/feature#84
fix #84
2 parents d5ac163 + a39d036 commit 29ec631

File tree

3 files changed

+84
-1
lines changed

3 files changed

+84
-1
lines changed

src/main/kotlin/extensions/ExtensionsCollector.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import extensions.wu.seal.KeepAnnotationSupportForAndroidX
55
import extensions.jose.han.ParcelableAnnotationSupport
66
import extensions.ted.zeng.PropertyAnnotationLineSupport
77
import extensions.wu.seal.ClassNameSuffixSupport
8+
import extensions.wu.seal.ForceInitDefaultValueWithOriginJsonValueSupport
89
import extensions.wu.seal.PropertyPrefixSupport
910
import extensions.wu.seal.PropertySuffixSupport
1011
import extensions.xu.rui.PrimitiveTypeNonNullableSupport
@@ -24,6 +25,7 @@ object ExtensionsCollector {
2425
PropertyPrefixSupport,
2526
PropertySuffixSupport,
2627
ClassNameSuffixSupport,
27-
PrimitiveTypeNonNullableSupport
28+
PrimitiveTypeNonNullableSupport,
29+
ForceInitDefaultValueWithOriginJsonValueSupport
2830
)
2931
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package extensions.wu.seal
2+
3+
import extensions.Extension
4+
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
5+
import wu.seal.jsontokotlin.codeelements.getDefaultValue
6+
import wu.seal.jsontokotlin.ui.checkBox
7+
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
8+
import wu.seal.jsontokotlin.utils.TYPE_STRING
9+
import javax.swing.JPanel
10+
11+
/**
12+
* This extension make the default value of data class property to be json value
13+
* This extension should be put at last
14+
* Created by Seal.Wu on 2019-11-09
15+
*/
16+
object ForceInitDefaultValueWithOriginJsonValueSupport : Extension() {
17+
18+
private const val configKey = "wu.seal.force_init_default_value_with_origin_json_value"
19+
20+
override fun createUI(): JPanel {
21+
return horizontalLinearLayout {
22+
(checkBox(
23+
"Force init Default Value With Origin Json Value",
24+
getConfig(configKey).toBoolean()
25+
) { isSelectedAfterClick ->
26+
setConfig(configKey, isSelectedAfterClick.toString())
27+
})()
28+
fillSpace()
29+
}
30+
}
31+
32+
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
33+
return if (getConfig(configKey).toBoolean()) {
34+
val newP = kotlinDataClass.properties.map {
35+
val newV = if (it.originJsonValue.isNullOrBlank()) getDefaultValue(it.type) else {
36+
if (it.type == TYPE_STRING) {
37+
""""${it.originJsonValue}""""
38+
} else {
39+
it.originJsonValue
40+
}
41+
}
42+
it.copy(value = newV)
43+
}
44+
kotlinDataClass.copy(properties = newP)
45+
} else {
46+
kotlinDataClass
47+
}
48+
}
49+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package extensions.wu.seal
2+
3+
import com.winterbe.expekt.should
4+
import org.junit.Before
5+
import org.junit.Test
6+
import wu.seal.jsontokotlin.applyInterceptor
7+
import wu.seal.jsontokotlin.generateKotlinDataClass
8+
import wu.seal.jsontokotlin.test.TestConfig
9+
10+
class ForceInitDefaultValueWithOriginJsonValueSupportTest {
11+
val json = """{"a":1}"""
12+
13+
val expectResult = """data class Test(
14+
val a: Int = 1 // 1
15+
)"""
16+
private val configKey = "wu.seal.force_init_default_value_with_origin_json_value"
17+
18+
19+
@Before
20+
fun setUp() {
21+
TestConfig.setToTestInitState()
22+
}
23+
24+
@Test
25+
fun intercept() {
26+
ForceInitDefaultValueWithOriginJsonValueSupport.getTestHelper().setConfig(configKey,true.toString())
27+
val dataClass =
28+
json.generateKotlinDataClass("Test").applyInterceptor(ForceInitDefaultValueWithOriginJsonValueSupport)
29+
val resultCode = dataClass.getCode()
30+
resultCode.should.be.equal(expectResult)
31+
}
32+
}

0 commit comments

Comments
 (0)