Skip to content

Commit 4bf4bbc

Browse files
author
seal
committed
add support for jackson library annotation generating
1 parent 4b29182 commit 4bf4bbc

File tree

6 files changed

+90
-6
lines changed

6 files changed

+90
-6
lines changed

resources/META-INF/plugin.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<idea-plugin>
22
<id>wu.seal.tool.jsontokotlin</id>
33
<name>JsonToKotlinClass</name>
4-
<version>1.3</version>
4+
<version>1.4-alpha</version>
55
<vendor email="[email protected]" url="https://www.github.com/wuseal">Seal</vendor>
66

77
<description><![CDATA[
@@ -11,6 +11,9 @@
1111
]]></description>
1212

1313
<change-notes><![CDATA[
14+
1.4:<br>
15+
* Add supporter for Jackson annotation generate,supporter json lib --Jackson
16+
* Beautify the config settings dialog
1417
1.3:<br>
1518
* add property init with default value option in property tab.<br>
1619
* add property could be nullable option in property tab.<br>

src/wu/seal/jsontokotlin/ImportClassWriter.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ object ImportClassWriter : IImportClassWriter {
3333

3434
TargetJsonConverter.Gson -> insertGsonImportClass(project, editFile)
3535
TargetJsonConverter.FastJson -> insertFastJsonImportClass(project, editFile)
36-
TargetJsonConverter.Jackson -> insertFastJsonImportClass(project, editFile)
36+
TargetJsonConverter.Jackson -> insertJackSonImportClass(project, editFile)
3737

3838
else -> {
3939
println("No need to import any Class code")
@@ -43,22 +43,31 @@ object ImportClassWriter : IImportClassWriter {
4343

4444

4545
override fun insertFastJsonImportClass(project: Project?, editFile: Document) {
46+
4647
}
4748

4849
override fun insertJackSonImportClass(project: Project?, editFile: Document) {
50+
val importClassString = JacksonSupporter.jacksonAnnotationImportClassString
51+
insertImportClassString(editFile, importClassString, project)
4952
}
5053

5154
override fun insertGsonImportClass(project: Project?, editFile: Document) {
55+
56+
val importClassString = GsonSupporter.gsonAnotationImportString
57+
insertImportClassString(editFile, importClassString, project)
58+
}
59+
60+
private fun insertImportClassString(editFile: Document, importClassString: String, project: Project?) {
5261
val text = editFile.text
53-
if (GsonSupporter.gsonAnotationImportString !in text) {
62+
if (importClassString !in text) {
5463

5564
val packageIndex = text.indexOf("package ")
5665
val importIndex = Math.max(text.lastIndexOf("import"), packageIndex)
5766
val insertIndex = if (importIndex == -1) 0 else editFile.getLineEndOffset(editFile.getLineNumber(importIndex))
5867

5968

6069
executeCouldRollBackAction(project) {
61-
editFile.insertString(insertIndex, "\n" + GsonSupporter.gsonAnotationImportString + "\n")
70+
editFile.insertString(insertIndex, "\n" + importClassString + "\n")
6271
}
6372

6473
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package wu.seal.jsontokotlin
2+
3+
/**
4+
* Jackson json lib supporter
5+
* Created by Seal.Wu on 2017/9/27.
6+
*/
7+
8+
interface IJacksonSupporter {
9+
10+
val jacksonAnnotationImportClassString: String
11+
get() = "import com.fasterxml.jackson.annotation.JsonProperty"
12+
13+
/**
14+
* get the jackson supporter property string block
15+
*/
16+
fun getJacksonSupporterProperty(rawPropertyName: String, propertyType: String): String
17+
}
18+
19+
fun main(args: Array<String>) {
20+
isTestModel = true
21+
println("getGsonSupporterProperty:\n ${JacksonSupporter.getJacksonSupporterProperty("seal is **() good_man ","Boy")}")
22+
}
23+
24+
object JacksonSupporter : IJacksonSupporter {
25+
26+
private val anotaionOnProperty = "@JsonProperty(\"%s\")"
27+
28+
override fun getJacksonSupporterProperty(rawPropertyName: String, propertyType: String): String {
29+
30+
val jacksonSupportPropertyBuilder = StringBuilder()
31+
32+
jacksonSupportPropertyBuilder.append(anotaionOnProperty.format(rawPropertyName))
33+
34+
jacksonSupportPropertyBuilder.append(" ")
35+
36+
jacksonSupportPropertyBuilder.append(PropertyKeyword.get())
37+
38+
jacksonSupportPropertyBuilder.append(" ")
39+
40+
jacksonSupportPropertyBuilder.append(KPropertyName.getName(rawPropertyName))
41+
42+
jacksonSupportPropertyBuilder.append(": ")
43+
44+
jacksonSupportPropertyBuilder.append(propertyType)
45+
46+
if (ConfigManager.initWithDefaultValue) {
47+
jacksonSupportPropertyBuilder.append(" = ").append(getDefaultValue(propertyType))
48+
}
49+
50+
jacksonSupportPropertyBuilder.append(",")
51+
52+
return jacksonSupportPropertyBuilder.toString()
53+
}
54+
55+
}

src/wu/seal/jsontokotlin/KProperty.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ class KProperty(private val rawPropertyName: String, private val propertyType: S
3636
} else if (ConfigManager.targetJsonConverterLib == TargetJsonConverter.Gson) {
3737

3838
blockBulder.append(GsonSupporter.getGsonSupporterProperty(rawPropertyName, propertyType))
39+
40+
} else if (ConfigManager.targetJsonConverterLib == TargetJsonConverter.Jackson) {
41+
42+
blockBulder.append(JacksonSupporter.getJacksonSupporterProperty(rawPropertyName, propertyType))
3943
}
4044

4145
if (!ConfigManager.isCommentOff && propertyValue.isNotBlank()) {

src/wu/seal/jsontokotlin/KotlinMaker.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ fun main(args: Array<String>) {
124124
println("json1 ====>\n${KotlinMaker("Class1", json1).makeKotlinData()}")
125125
println("json2 ====>\n${KotlinMaker("Class2", json2).makeKotlinData()}")
126126

127-
TestConfig.targetJsonConvertLib = TargetJsonConverter.None
127+
TestConfig.targetJsonConvertLib = TargetJsonConverter.Jackson
128128
TestConfig.isCommentOff = true
129129
TestConfig.isPropertiesVar = true
130130
TestConfig.isPropertyNullable = false

src/wu/seal/jsontokotlin/Panel.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,28 +154,41 @@ class TargetJsonLibConfigPanel(layout: LayoutManager?, isDoubleBuffered: Boolean
154154
setLayout(GridLayout(6, 1, 10, 10))
155155

156156
val radioButtonNone = JRadioButton("None")
157+
val radioButtonGson = JRadioButton("Gson")
158+
val radioButtonJackson = JRadioButton("Jackson")
157159

158160
radioButtonNone.addActionListener {
159161
ConfigManager.targetJsonConverterLib = TargetJsonConverter.None
160162
}
161-
val radioButtonGson = JRadioButton("Gson")
162163
radioButtonGson.addActionListener {
163164
ConfigManager.targetJsonConverterLib = TargetJsonConverter.Gson
164165
}
166+
radioButtonJackson.addActionListener {
167+
168+
ConfigManager.targetJsonConverterLib = TargetJsonConverter.Jackson
169+
}
165170

166171
if (ConfigManager.targetJsonConverterLib == TargetJsonConverter.None) {
167172

168173
radioButtonNone.isSelected = true
174+
169175
} else if (ConfigManager.targetJsonConverterLib == TargetJsonConverter.Gson) {
176+
170177
radioButtonGson.isSelected = true
178+
179+
} else if (ConfigManager.targetJsonConverterLib == TargetJsonConverter.Jackson) {
180+
181+
radioButtonJackson.isSelected = true
171182
}
172183

173184
val buttonGroupProperty = ButtonGroup()
174185
buttonGroupProperty.add(radioButtonNone)
175186
buttonGroupProperty.add(radioButtonGson)
187+
buttonGroupProperty.add(radioButtonJackson)
176188

177189
add(radioButtonNone)
178190
add(radioButtonGson)
191+
add(radioButtonJackson)
179192
}
180193

181194
}

0 commit comments

Comments
 (0)