5
5
import com .intellij .psi .*;
6
6
import com .intellij .psi .search .GlobalSearchScope ;
7
7
import org .apache .commons .collections .CollectionUtils ;
8
+ import org .jetbrains .annotations .NotNull ;
8
9
9
10
import java .util .ArrayList ;
10
11
import java .util .Arrays ;
17
18
**/
18
19
public class ObjectCopyMethodGenerator extends AbstractMethodGenerator {
19
20
20
- private ObjectCopyMethodGenerator () {
21
- }
22
-
23
21
private void init (PsiMethod psiMethod ) {
24
22
super .methodName = psiMethod .getName ();
25
23
super .returnClassName = getReturnClassName (psiMethod );
@@ -36,30 +34,77 @@ public static ObjectCopyMethodGenerator getInstance(PsiMethod psiMethod) {
36
34
37
35
@ Override
38
36
protected String generateMethodBody () {
39
- if (CollectionUtils .isEmpty (parameters )) {
40
- return "" ;
37
+ if (CollectionUtils .isEmpty (parameters ) || VOID_KEYWORD . equals ( returnClassName ) ) {
38
+ return EMPTY_BODY ;
41
39
}
42
40
StringBuilder result = new StringBuilder ();
43
41
String returnObjName = StringUtils .firstLowerCase (returnClassName );
44
- PsiParameter firstParameter = parameters .get (0 );
45
- PsiClass firstClass = parameterClass .get (0 );
46
- String parameterName = firstParameter .getName ();
47
- result .append (generateNullCheck (parameterName ));
48
- result .append (returnClassName ).append (" " ).append (returnObjName ).append ("= new " ).append (returnClassName ).append ("();\n " );
49
- for (PsiField field : firstClass .getFields ()) {
42
+ PsiParameter firstParameter = parameters .get (FIRST_INDEX );
43
+ PsiClass firstParameterClass = parameterClass .get (FIRST_INDEX );
44
+ if (firstParameterClass == null ) {
45
+ return EMPTY_BODY ;
46
+ }
47
+ result .append (generateNullCheck (firstParameter .getName ()));
48
+ result .append (generateObjectCreateLine (returnObjName ));
49
+ for (PsiField field : firstParameterClass .getFields ()) {
50
50
PsiModifierList modifierList = field .getModifierList ();
51
51
if (modifierList == null ||
52
52
modifierList .hasModifierProperty (PsiModifier .STATIC ) ||
53
53
modifierList .hasModifierProperty (PsiModifier .FINAL ) ||
54
54
modifierList .hasModifierProperty (PsiModifier .SYNCHRONIZED )) {
55
55
continue ;
56
56
}
57
- result .append (returnObjName + ".set" + StringUtils . firstUpperCase ( field . getName ()) + "(" + parameterName + ".get" + StringUtils . firstUpperCase ( field . getName ()) + "()); \n " );
57
+ result .append (generateFieldCopyLine ( returnObjName , firstParameter . getName (), field ) );
58
58
}
59
- result .append ("return " + returnObjName + "; \n " );
59
+ result .append (generateReturnLine ( returnObjName ) );
60
60
return result .toString ();
61
61
}
62
62
63
+ /**
64
+ * 生成示例:{@code UserDTO userDTO = new UserDTO();}
65
+ *
66
+ * @param returnObjName
67
+ * @return
68
+ */
69
+ @ NotNull
70
+ private String generateObjectCreateLine (String returnObjName ) {
71
+ return returnClassName + BLANK_SEPARATOR + returnObjName + "= new " + returnClassName + "();" + LINE_SEPARATOR ;
72
+ }
73
+
74
+ /**
75
+ * 生成示例:{@code userDTO.setId(user.getId());}
76
+ *
77
+ * @param returnObjName
78
+ * @param parameterName
79
+ * @param field
80
+ * @return
81
+ */
82
+ @ NotNull
83
+ private String generateFieldCopyLine (String returnObjName , String parameterName , PsiField field ) {
84
+ return returnObjName + ".set" + StringUtils .firstUpperCase (field .getName ()) + "(" + parameterName + ".get" + StringUtils .firstUpperCase (field .getName ()) + "());" + LINE_SEPARATOR ;
85
+ }
86
+
87
+ /**
88
+ * 生成示例:{@code return userDTO;}
89
+ *
90
+ * @param returnObjName
91
+ * @return
92
+ */
93
+ @ NotNull
94
+ private String generateReturnLine (String returnObjName ) {
95
+ return "return " + returnObjName + ";" + LINE_SEPARATOR ;
96
+ }
97
+
98
+ /**
99
+ * 生成示例:{@code if (user == null) {return null;}}
100
+ *
101
+ * @param parameterName
102
+ * @return
103
+ */
104
+ private String generateNullCheck (String parameterName ) {
105
+ return "if(" + parameterName + "==null){return null;}" ;
106
+ }
107
+
63
108
private static String getReturnClassName (PsiMethod psiMethod ) {
64
109
PsiType returnType = psiMethod .getReturnType ();
65
110
if (returnType == null ) {
@@ -93,8 +138,4 @@ private List<JavaModify> getMethodModifies(PsiModifierList modifierList) {
93
138
}
94
139
return result ;
95
140
}
96
-
97
- private String generateNullCheck (String parameterName ) {
98
- return "if ( " + parameterName + "== null ){\n return null;\n }\n " ;
99
- }
100
- }
141
+ }
0 commit comments