Skip to content

Commit 43585d4

Browse files
author
seal
committed
Add comment option to switch comment append
Add Gson support anotation Transform ilegal proerty name when select a json library Fix a bug when parse emty array in json string
1 parent b2e39ab commit 43585d4

File tree

8 files changed

+374
-53
lines changed

8 files changed

+374
-53
lines changed

src/wu/seal/jsontokotlin/ConfigManager.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,20 @@ interface IConfigManager {
1515
private val TARGET_JSON_CONVERTER_LIB_KEY: String
1616
get() = "target_json_converter_lib_key"
1717

18+
private val IS_COMMENT_OFF: String
19+
get() = "need comment_key"
20+
21+
1822
var isPropertiesVar: Boolean
1923
get() = PropertiesComponent.getInstance().isTrueValue(IS_PROPERTIES_VAR_KEY)
2024
set(value) = PropertiesComponent.getInstance().setValue(IS_PROPERTIES_VAR_KEY, value)
2125

2226

27+
var isCommentOff: Boolean
28+
get() = PropertiesComponent.getInstance().isTrueValue(IS_COMMENT_OFF)
29+
set(value) = PropertiesComponent.getInstance().setValue(IS_COMMENT_OFF, value)
30+
31+
2332
var targetJsonConverterLib: TargetJsonConverter
2433
get() = TargetJsonConverter.valueOf(PropertiesComponent.getInstance().getValue(TARGET_JSON_CONVERTER_LIB_KEY) ?: TargetJsonConverter.None.name)
2534
set(value) = PropertiesComponent.getInstance().setValue(TARGET_JSON_CONVERTER_LIB_KEY, value.name)

src/wu/seal/jsontokotlin/ConfigSettingDialog.kt

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ package wu.seal.jsontokotlin
22

33
import com.intellij.openapi.ui.DialogWrapper
44
import com.intellij.util.ui.JBDimension
5-
import java.awt.BorderLayout
6-
import java.awt.ComponentOrientation
7-
import javax.swing.*
5+
import javax.swing.Action
6+
import javax.swing.JComponent
7+
import javax.swing.JPanel
8+
import javax.swing.JTabbedPane
89

910
/**
1011
*
11-
* Created by LENOVO on 2017/9/13.
12+
* Created by Seal.Wu on 2017/9/13.
1213
*/
1314

1415
interface IConfigSettingDialog {
@@ -29,40 +30,36 @@ class ConfigSettingDialog(canBeParent: Boolean) : DialogWrapper(canBeParent), IC
2930

3031

3132
override fun createCenterPanel(): JComponent? {
33+
3234
val tabbedPane = JTabbedPane()
3335

34-
val propertyPane = JPanel(BorderLayout(5, 5))
35-
propertyPane.componentOrientation = ComponentOrientation.LEFT_TO_RIGHT
36-
val radioButtonVal = JRadioButton("Val")
36+
val propertyPanel = createPropertyPane()
3737

38-
radioButtonVal.addActionListener {
39-
ConfigManager.isPropertiesVar = false
40-
}
41-
val radioButtonVar = JRadioButton("Var")
42-
radioButtonVar.addActionListener {
43-
ConfigManager.isPropertiesVar = true
44-
}
38+
val commentConfigPanel = createCommentConfigPanel()
4539

46-
if (ConfigManager.isPropertiesVar) {
40+
val targetJsonLibConfigPanel = createTargetJsonLibConfigPanel()
4741

48-
radioButtonVar.isSelected = true
49-
} else {
50-
radioButtonVal.isSelected = true
51-
}
42+
tabbedPane.add("Property Keyword", propertyPanel)
5243

53-
val buttonGroupProperty = ButtonGroup()
54-
buttonGroupProperty.add(radioButtonVal)
55-
buttonGroupProperty.add(radioButtonVar)
44+
tabbedPane.add("Comment Config", commentConfigPanel)
5645

57-
propertyPane.add(radioButtonVal, BorderLayout.NORTH)
58-
propertyPane.add(radioButtonVar, BorderLayout.CENTER)
59-
tabbedPane.add("Property Keyword", propertyPane)
46+
tabbedPane.add("Target Json Lib", targetJsonLibConfigPanel)
6047

6148
tabbedPane.minimumSize = JBDimension(300, 180)
6249

6350
return tabbedPane
6451
}
6552

53+
private fun createTargetJsonLibConfigPanel() = TargetJsonLibConfigPanel(true)
54+
55+
private fun createCommentConfigPanel() = CommentConfigPanel(true)
56+
57+
private fun createPropertyPane(): JPanel {
58+
59+
60+
return PropertyPanel(true)
61+
}
62+
6663

6764
override fun dismiss() {
6865
close(CANCEL_EXIT_CODE)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package wu.seal.jsontokotlin
2+
3+
/**
4+
* Created by Sea.Wu on 2017/9/18.
5+
*/
6+
7+
/**
8+
* When target Json lib is Gson, this prove fun to create Last Property String block
9+
*/
10+
interface IGsonSupportor {
11+
/**
12+
* create property String block to fit Gson at most
13+
*/
14+
fun getGsonSupportorProperty(rawPropertyName: String, propertyType: String): String
15+
16+
}
17+
18+
19+
object GsonSupportor : IGsonSupportor {
20+
21+
/**
22+
* When adapter Gson lib at most ,We should import the Anotation Class
23+
*/
24+
val gsonAnotationImportString = "import com.google.gson.annotations.SerializedName"
25+
26+
private val anotaionOnProperty = "@SerializedName(\"%s\")"
27+
28+
override fun getGsonSupportorProperty(rawPropertyName: String, propertyType: String): String {
29+
30+
val gsonSupportPropertyBuilder = StringBuilder()
31+
32+
gsonSupportPropertyBuilder.append(anotaionOnProperty.format(rawPropertyName))
33+
34+
gsonSupportPropertyBuilder.append(" ")
35+
36+
gsonSupportPropertyBuilder.append(PropertyKeyword.get())
37+
38+
gsonSupportPropertyBuilder.append(" ")
39+
40+
gsonSupportPropertyBuilder.append(PropertyNameMaker.makePropertyName(rawPropertyName, true))
41+
42+
gsonSupportPropertyBuilder.append(": ")
43+
44+
gsonSupportPropertyBuilder.append(propertyType)
45+
46+
gsonSupportPropertyBuilder.append(",")
47+
48+
return gsonSupportPropertyBuilder.toString()
49+
50+
}
51+
52+
}

src/wu/seal/jsontokotlin/KotlinMaker.java

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.jetbrains.annotations.NotNull;
55

66
import java.util.HashSet;
7+
import java.util.Iterator;
78
import java.util.Map;
89
import java.util.Set;
910

@@ -64,7 +65,7 @@ private void appendJsonObject(StringBuilder stringBuilder, JsonObject jsonObject
6465
String type = "String";
6566
if (jsonElementValue.isJsonArray()) {
6667
type = getArrayType(property, (JsonArray) jsonElementValue);
67-
addProperty(stringBuilder, property, type, null);
68+
addProperty(stringBuilder, property, type, "");
6869
} else if (jsonElementValue.isJsonPrimitive()) {
6970
type = getPrimitiveType(jsonElementValue);
7071
addProperty(stringBuilder, property, type, jsonElementValue.getAsString());
@@ -87,28 +88,35 @@ private String getJsonObjectType(String property, JsonObject jsonElementValue) {
8788

8889
@NotNull
8990
private String getArrayType(String property, JsonArray jsonElementValue) {
90-
String type = "String";
91+
String type = "List<String>";
9192
JsonArray jsonArray = jsonElementValue;
92-
JsonElement next = jsonArray.iterator().next();
93-
if (next.isJsonPrimitive()) {
94-
String subType = getPrimitiveType(next);
95-
type = "List" + "<" + subType + ">";
96-
97-
} else if (next.isJsonObject()) {
98-
property = modifyPropertyForArrayObjType(property);
99-
String subType = getJsonObjectType(property, (JsonObject) next);
100-
type = "List" + "<" + subType + ">";
101-
/**
102-
* 处理子类
103-
*/
104-
toBeAppend.add(new KotlinMaker(subType, next).makeKotlinData());
105-
} else if (next.isJsonArray()) {
106-
property = modifyPropertyForArrayObjType(property);
107-
String subType = getArrayType(property, (JsonArray) next);
108-
type = "List" + "<" + subType + ">";
109-
110-
} else if (next.isJsonNull()) {
111-
type = "List" + "<" + "String" + ">";
93+
94+
Iterator<JsonElement> iterator = jsonArray.iterator();
95+
if (iterator.hasNext()) {
96+
JsonElement next = iterator.next();
97+
if (next.isJsonPrimitive()) {
98+
String subType = getPrimitiveType(next);
99+
type = "List" + "<" + subType + ">";
100+
101+
} else if (next.isJsonObject()) {
102+
property = modifyPropertyForArrayObjType(property);
103+
String subType = getJsonObjectType(property, (JsonObject) next);
104+
type = "List" + "<" + subType + ">";
105+
/**
106+
* 处理子类
107+
*/
108+
toBeAppend.add(new KotlinMaker(subType, next).makeKotlinData());
109+
} else if (next.isJsonArray()) {
110+
property = modifyPropertyForArrayObjType(property);
111+
String subType = getArrayType(property, (JsonArray) next);
112+
type = "List" + "<" + subType + ">";
113+
114+
} else if (next.isJsonNull()) {
115+
type = "List" + "<" + "String" + ">";
116+
117+
}
118+
} else {
119+
type = "List<Any>";
112120

113121
}
114122
return type;
@@ -144,15 +152,14 @@ private String modifyPropertyForArrayObjType(String property) {
144152
}
145153

146154
private void addProperty(StringBuilder stringBuilder, String property, String type, String value) {
147-
String propertyKeyword = PropertyKeyword.INSTANCE.get();
148-
stringBuilder.append("\t\t" + propertyKeyword + " ").append(property).append(": ").append(type).append(",");
149-
if (value != null) {
150-
stringBuilder.append("// ").append(value).append("\n");
151-
} else {
152-
stringBuilder.append("\n");
155+
if (value == null) {
156+
value = "null";
153157
}
158+
stringBuilder.append(new KProperty(property, type, value).getPropertyStringBlock());
159+
stringBuilder.append("\n");
154160
}
155161

162+
156163
@NotNull
157164
private String getPrimitiveType(JsonElement next) {
158165
String subType = "String";
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package wu.seal.jsontokotlin
2+
3+
/**
4+
* Created by Seal.Wu on 2017/9/18.
5+
*/
6+
7+
interface INoneLibSupporter {
8+
/**
9+
* create property String block
10+
*/
11+
fun getNoneLibSupporterProperty(rawPropertyName: String, propertyType: String): String
12+
}
13+
14+
15+
object NoneSupporter : INoneLibSupporter {
16+
17+
18+
override fun getNoneLibSupporterProperty(rawPropertyName: String, propertyType: String): String {
19+
20+
val blockBulder = StringBuilder()
21+
22+
blockBulder.append(PropertyKeyword.get())
23+
blockBulder.append(" ")
24+
blockBulder.append(PropertyNameMaker.makePropertyName(rawPropertyName, false))
25+
blockBulder.append(": ").append(propertyType).append(",")
26+
27+
return blockBulder.toString()
28+
}
29+
30+
}

0 commit comments

Comments
 (0)