Skip to content

Commit 990bcfe

Browse files
authored
Merge pull request #253 from wuseal/3.5.1
3.5.1
2 parents c089f6d + ba6e63e commit 990bcfe

File tree

12 files changed

+218
-15
lines changed

12 files changed

+218
-15
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ apply plugin: 'kotlin'
2020
apply plugin: 'org.jetbrains.intellij'
2121

2222
group 'wu.seal'
23-
version '3.5.0'
23+
version '3.5.1'
2424

2525
intellij {
2626
version '2017.1'
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package extensions
22

33
import extensions.chen.biao.KeepAnnotationSupport
4+
import extensions.wu.seal.KeepAnnotationSupportForAndroidX
45
import extensions.jose.han.ParcelableAnnotationSupport
56
import extensions.ted.zeng.PropertyAnnotationLineSupport
67
import extensions.wu.seal.ClassNameSuffixSupport
8+
import extensions.wu.seal.ForceInitDefaultValueWithOriginJsonValueSupport
79
import extensions.wu.seal.PropertyPrefixSupport
810
import extensions.wu.seal.PropertySuffixSupport
911
import extensions.xu.rui.PrimitiveTypeNonNullableSupport
@@ -16,12 +18,14 @@ object ExtensionsCollector {
1618
* all extensions
1719
*/
1820
val extensions = listOf(
19-
KeepAnnotationSupport,
20-
PropertyAnnotationLineSupport,
21-
ParcelableAnnotationSupport,
22-
PropertyPrefixSupport,
23-
PropertySuffixSupport,
24-
ClassNameSuffixSupport,
25-
PrimitiveTypeNonNullableSupport
21+
KeepAnnotationSupport,
22+
KeepAnnotationSupportForAndroidX,
23+
PropertyAnnotationLineSupport,
24+
ParcelableAnnotationSupport,
25+
PropertyPrefixSupport,
26+
PropertySuffixSupport,
27+
ClassNameSuffixSupport,
28+
PrimitiveTypeNonNullableSupport,
29+
ForceInitDefaultValueWithOriginJsonValueSupport
2630
)
2731
}
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: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package extensions.wu.seal
2+
3+
import extensions.Extension
4+
import wu.seal.jsontokotlin.classscodestruct.Annotation
5+
import wu.seal.jsontokotlin.classscodestruct.KotlinDataClass
6+
import wu.seal.jsontokotlin.ui.checkBox
7+
import wu.seal.jsontokotlin.ui.horizontalLinearLayout
8+
import javax.swing.JPanel
9+
10+
/**
11+
* @author Seal.Wu
12+
* create at 2019/11/03
13+
* description:
14+
*/
15+
object KeepAnnotationSupportForAndroidX : Extension() {
16+
17+
18+
private const val configKey = "wu.seal.add_keep_annotation_enable_androidx"
19+
20+
override fun createUI(): JPanel {
21+
return horizontalLinearLayout {
22+
checkBox("Add @Keep Annotation On Class (AndroidX)", getConfig(configKey).toBoolean()) { isSelectedAfterClick ->
23+
setConfig(configKey, isSelectedAfterClick.toString())
24+
}()
25+
fillSpace()
26+
}
27+
}
28+
29+
override fun intercept(kotlinDataClass: KotlinDataClass): KotlinDataClass {
30+
31+
return if (getConfig(configKey).toBoolean()) {
32+
33+
val classAnnotationString = "@Keep"
34+
35+
val classAnnotation = Annotation.fromAnnotationString(classAnnotationString)
36+
37+
return kotlinDataClass.copy(annotations = listOf(classAnnotation))
38+
} else {
39+
kotlinDataClass
40+
}
41+
42+
}
43+
44+
override fun intercept(originClassImportDeclaration: String): String {
45+
46+
val classAnnotationImportClassString = "import androidx.annotation.Keep"
47+
48+
return if (getConfig(configKey).toBoolean()) {
49+
originClassImportDeclaration.append(classAnnotationImportClassString)
50+
} else {
51+
originClassImportDeclaration
52+
}
53+
}
54+
}

src/main/kotlin/wu/seal/jsontokotlin/codeelements/KName.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ abstract class KName : IKName {
2424

2525
protected val illegalCharacter = listOf(
2626
"\\+", "\\-", "\\*", "/", "%", "=", "&", "\\|", "!", "\\[", "\\]", "\\{", "\\}", "\\(", "\\)", "\\\\", "\"", "_"
27-
, ",", "\\.", ":", "\\?", "\\>", "\\<", "@", ";", "'", "\\`", "\\~", "\\$", "\\^", "#", "\\", "/", " ", "\t", "\n"
27+
, ",", ":", "\\?", "\\>", "\\<", "@", ";", "'", "\\`", "\\~", "\\$", "\\^", "#", "\\", "/", " ", "\t", "\n"
2828
)
2929

3030

31-
protected val nameSeparator = listOf(" ", "_", "\\-", ":")
31+
protected val nameSeparator = listOf(" ", "_", "\\-", ":","\\.")
3232

3333

3434
/**

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,10 @@
4747

4848

4949
<change-notes><![CDATA[
50-
<br>New UI&UX </br>
5150
<br>Bugs fix </br>
5251
<br>New Features </br>
5352
<br>Note:</br>
54-
<a href="https://github.com/wuseal/JsonToKotlinClass/milestone/9"> detail update</a></br>
53+
<a href="https://github.com/wuseal/JsonToKotlinClass/milestone/11"> detail update</a></br>
5554
]]>
5655
</change-notes>
5756

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+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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.generateKotlinDataClass
7+
import wu.seal.jsontokotlin.test.TestConfig
8+
9+
/**
10+
* @author Seal.Wu
11+
* create at 2019/11/03
12+
* description:
13+
*/
14+
class KeepAnnotationSupportForAndroidXTest {
15+
16+
val json = """{"name":"chenbiao"}"""
17+
18+
19+
var expectResult = """@Keep
20+
data class Test(
21+
val name: String // chenbiao
22+
)"""
23+
24+
@Before
25+
fun setUp() {
26+
TestConfig.setToTestInitState()
27+
}
28+
29+
@Test
30+
fun interceptTest(){
31+
val kotlinDataClass = json.generateKotlinDataClass()
32+
KeepAnnotationSupportForAndroidX.getTestHelper().setConfig("wu.seal.add_keep_annotation_enable_androidx","true")
33+
val generatedCode = kotlinDataClass.applyInterceptors(listOf(KeepAnnotationSupportForAndroidX)).getCode()
34+
print(generatedCode)
35+
generatedCode.trimMargin().should.equal(expectResult.trimMargin())
36+
37+
}
38+
39+
}

src/test/kotlin/wu/seal/jsontokotlin/regression/Issue108Test.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package wu.seal.jsontokotlin.regression
22

33
import com.winterbe.expekt.should
44
import org.junit.Test
5-
import wu.seal.jsontokotlin.KotlinCodeMaker
6-
import wu.seal.jsontokotlin.KotlinDataClassCodeMaker
75
import wu.seal.jsontokotlin.KotlinDataClassMaker
86
import wu.seal.jsontokotlin.test.TestConfig
97

0 commit comments

Comments
 (0)