Skip to content

Commit 7ab14ad

Browse files
committed
优化细节
1 parent b2374c3 commit 7ab14ad

File tree

7 files changed

+111
-10
lines changed

7 files changed

+111
-10
lines changed

src/main/java/com/king/java/field/plugin/action/GenerateFieldAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/main/java/com/king/java/field/plugin/action/QuickGenerateFieldAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/main/java/com/king/java/field/plugin/component/ConfigComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/main/java/com/king/java/field/plugin/entity/FieldParseConfig.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
package com.king.java.field.plugin.entity;
1717

1818
import com.king.java.field.plugin.dialog.GenerateFieldDialog;
19+
import org.jetbrains.annotations.NotNull;
20+
21+
import java.util.HashMap;
22+
import java.util.LinkedHashMap;
23+
import java.util.Map;
1924

2025
/**
2126
* 字段解析配置
@@ -48,6 +53,14 @@ public class FieldParseConfig {
4853
* 是否生成 toString 方法
4954
*/
5055
private boolean generateToString;
56+
/**
57+
* 字段类型转换配置;key为原始类型,value表示需要目标类型;如:key = int,value = Integer 时,则会在生成字段类型时,自动将 int 转换为 Integer
58+
*/
59+
private Map<String,String> filedTypeConvertMap;
60+
/**
61+
* 是否将数组转换为列表
62+
*/
63+
private boolean convertArrayToList = true;
5164

5265
public int getFieldColumn() {
5366
return fieldColumn;
@@ -97,6 +110,32 @@ public void setGenerateGetterAndSetter(boolean generateGetterAndSetter) {
97110
this.generateGetterAndSetter = generateGetterAndSetter;
98111
}
99112

113+
@NotNull
114+
public Map<String, String> getFiledTypeConvertMap() {
115+
if(filedTypeConvertMap == null){
116+
filedTypeConvertMap = new LinkedHashMap<>(16);
117+
filedTypeConvertMap.put("varchar", "String");
118+
filedTypeConvertMap.put("tinytext", "String");
119+
filedTypeConvertMap.put("text", "String");
120+
filedTypeConvertMap.put("string", "String");
121+
filedTypeConvertMap.put("bool", "boolean");
122+
filedTypeConvertMap.put("integer", "Integer");
123+
}
124+
return filedTypeConvertMap;
125+
}
126+
127+
public void setFiledTypeConvertMap(Map<String, String> filedTypeConvertMap) {
128+
this.filedTypeConvertMap = filedTypeConvertMap;
129+
}
130+
131+
public boolean isConvertArrayToList() {
132+
return convertArrayToList;
133+
}
134+
135+
public void setConvertArrayToList(boolean convertArrayToList) {
136+
this.convertArrayToList = convertArrayToList;
137+
}
138+
100139
@Override
101140
public String toString() {
102141
return "FieldParseConfig{" +
@@ -106,6 +145,8 @@ public String toString() {
106145
", fieldModifier='" + fieldModifier + '\'' +
107146
", generateGetterAndSetter=" + generateGetterAndSetter +
108147
", generateToString=" + generateToString +
148+
", filedTypeConvertMap=" + filedTypeConvertMap +
149+
", convertArrayToList=" + convertArrayToList +
109150
'}';
110151
}
111152
}

src/main/java/com/king/java/field/plugin/entity/FieldProperty.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/main/java/com/king/java/field/plugin/generator/CodeGeneratorImpl.java

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -24,6 +24,8 @@
2424

2525
import java.util.ArrayList;
2626
import java.util.List;
27+
import java.util.Locale;
28+
import java.util.Map;
2729

2830
/**
2931
* @author <a href="mailto:[email protected]">Jenly</a>
@@ -43,9 +45,7 @@ public void onGenerate(Project project, PsiClass psiClass, FieldParseConfig file
4345
for (FieldProperty fieldProperty : fieldProperties) {
4446
StringBuilder sb = new StringBuilder();
4547
// 注释
46-
if (StringUtils.isNotBlank(fieldProperty.getComment())) {
47-
sb.append("/**\n\t* ").append(fieldProperty.getComment().replace("\n", "\n* ")).append("\n*/");
48-
}
48+
sb.append("/**\n\t* ").append(fieldProperty.getComment().replace("\n", "\n* ")).append("\n*/");
4949
// 字段
5050
sb.append(String.format("\n%s %s %s;", fieldProperty.getModifier(), fieldProperty.getType(), fieldProperty.getName()));
5151
PsiField psiField = factory.createFieldFromText(sb.toString(), psiClass);
@@ -124,6 +124,7 @@ private List<FieldProperty> parse(FieldParseConfig filedParseConfig, String text
124124
// 首先按行分割
125125
String[] lines = text.split("\n");
126126
FieldProperty fieldProperty = null;
127+
Map<String, String> filedTypeConvertMap = filedParseConfig.getFiledTypeConvertMap();
127128
for (String singleLine : lines) {
128129
if (TextUtils.isEmpty(singleLine) && fieldProperty == null) {
129130
continue;
@@ -143,15 +144,74 @@ private List<FieldProperty> parse(FieldParseConfig filedParseConfig, String text
143144
fieldProperty = new FieldProperty();
144145
fieldProperty.setModifier(filedParseConfig.getFieldModifier());
145146
fieldProperty.setName(stringArr[filedParseConfig.getFieldColumn()].trim());
146-
fieldProperty.setType(stringArr[filedParseConfig.getFieldTypeColumn()].trim());
147+
fieldProperty.setType(convertFieldType(stringArr[filedParseConfig.getFieldTypeColumn()].trim(), filedTypeConvertMap, filedParseConfig.isConvertArrayToList()));
147148

148149
if (filedParseConfig.getFieldCommentColumn() < length) {
149150
fieldProperty.setComment(stringArr[filedParseConfig.getFieldCommentColumn()].trim());
151+
} else{
152+
fieldProperty.setComment("");
150153
}
151154

152155
fieldPropertyList.add(fieldProperty);
153156
}
154157
}
155158
return fieldPropertyList;
156159
}
160+
161+
/**
162+
* 字段类型转换
163+
* @param fieldType
164+
* @param fieldTypeConvertMap
165+
* @param convertArrayToList
166+
* @return
167+
*/
168+
private String convertFieldType(String fieldType, Map<String, String> fieldTypeConvertMap, boolean convertArrayToList) {
169+
if(fieldType.endsWith("[][]")){
170+
// 二维数组转换List: T[][] -> List<List<T>>
171+
String type = fieldType.replace("[]","");
172+
if (convertArrayToList) {
173+
if (convertArrayToList) {
174+
return String.format(Locale.getDefault(), "List<List<%s>>", convertWrapperType(fieldTypeConvertMap.getOrDefault(type, type)));
175+
}
176+
}
177+
return String.format(Locale.getDefault(), "%s[][]", fieldTypeConvertMap.getOrDefault(type, type));
178+
}else if(fieldType.endsWith("[]")){
179+
// 一维数组转换成List: T[] -> List<T>
180+
String type = fieldType.replace("[]","");
181+
if (convertArrayToList) {
182+
return String.format(Locale.getDefault(), "List<%s>", convertWrapperType(fieldTypeConvertMap.getOrDefault(type, type)));
183+
}
184+
return String.format(Locale.getDefault(), "%s[]", fieldTypeConvertMap.getOrDefault(type, type));
185+
}
186+
187+
return fieldTypeConvertMap.getOrDefault(fieldType, fieldType);
188+
}
189+
190+
/**
191+
* 转为包装类
192+
* @param type
193+
* @return
194+
*/
195+
private String convertWrapperType(String type) {
196+
switch (type){
197+
case "byte":
198+
return "Byte";
199+
case "short":
200+
return "Short";
201+
case "int":
202+
return "Integer";
203+
case "float":
204+
return "Float";
205+
case "long":
206+
return "Long";
207+
case "double":
208+
return "Double";
209+
case "char":
210+
return "Char";
211+
case "boolean":
212+
return "Boolean";
213+
default:
214+
return type;
215+
}
216+
}
157217
}

src/main/java/com/king/java/field/plugin/generator/ICodeGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Jenly Yu
2+
* Copyright (C) 2020 Jenly Yu, https://github.com/jenly1314/JavaFieldGenerator
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

0 commit comments

Comments
 (0)