@@ -14,23 +14,27 @@ def generate_fields_block(fields: List[Field]) -> str:
1414
1515
1616def generate_field_declaration (field : Field ) -> str :
17- _validate_java_identifier (field .name )
18- if field .description :
19- javadoc = "\n " .join ([
20- "" ,
21- f"{ indent_lvl1 } /**" ,
22- f"{ indent_lvl1 } * { field .description } " ,
23- f"{ indent_lvl1 } */"
24- ])
25- else :
26- javadoc = ""
17+ _validate_java_field_name (field .name )
18+
2719 declaration = [
28- javadoc ,
20+ _render_javadoc ( field ) ,
2921 f"{ indent_lvl1 } private { field .type } { field .name } ;"
3022 ]
3123 return "\n " .join (declaration )
3224
3325
26+ def _render_javadoc (field : Field ) -> str :
27+ if field .description is None :
28+ return ""
29+
30+ return "\n " .join ([
31+ "" ,
32+ f"{ indent_lvl1 } /**" ,
33+ f"{ indent_lvl1 } * { field .description } " ,
34+ f"{ indent_lvl1 } */"
35+ ])
36+
37+
3438def generate_getters_and_setters (fields : List [Field ]) -> str :
3539 methods = []
3640 for field in fields :
@@ -41,40 +45,27 @@ def generate_getters_and_setters(fields: List[Field]) -> str:
4145
4246
4347def generate_getter (field : Field ) -> str :
44- field_name = field .name
45- field_type = field .type
46-
47- _validate_java_identifier (field_name )
48-
49- getter_name = _get_getter_name (field )
48+ getter_name = _build_getter_name (field .name )
5049
5150 getter = [
5251 "" ,
53- f"{ indent_lvl1 } public { field_type } { getter_name } () {{" ,
54- f"{ indent_lvl2 } return { field_name } ;" ,
52+ f"{ indent_lvl1 } public { field . type } { getter_name } () {{" ,
53+ f"{ indent_lvl2 } return { field . name } ;" ,
5554 f"{ indent_lvl1 } }}"
5655 ]
57- getter = "\n " .join (getter )
58-
59- return getter
56+ return "\n " .join (getter )
6057
6158
6259def generate_setter (field : Field ) -> str :
63- field_name = field .name
64- field_type = field .type
65-
66- _validate_java_identifier (field_name )
67-
68- setter_name = _get_setter_name (field_name )
60+ setter_name = _build_setter_name (field .name )
6961
7062 setter = [
7163 "" ,
72- f"{ indent_lvl1 } public void { setter_name } ({ field_type } { field_name } ) {{" ,
73- f"{ indent_lvl2 } this.{ field_name } = { field_name } ;" ,
64+ f"{ indent_lvl1 } public void { setter_name } ({ field . type } { field . name } ) {{" ,
65+ f"{ indent_lvl2 } this.{ field . name } = { field . name } ;" ,
7466 f"{ indent_lvl1 } }}"
7567 ]
76- setter = "\n " .join (setter )
77- return setter
68+ return "\n " .join (setter )
7869
7970
8071def generate_equals (class_name : str , fields : List [Field ]) -> str :
@@ -89,66 +80,76 @@ def generate_equals(class_name: str, fields: List[Field]) -> str:
8980 f"{ indent_lvl2 } if (!(obj instanceof { class_name } ))" ,
9081 f"{ indent_lvl3 } return false;" ,
9182
92- f"{ indent_lvl2 } { class_name } that = ({ class_name } ) obj;"
83+ f"{ indent_lvl2 } { class_name } that = ({ class_name } ) obj;" ,
84+
85+ _render_equals_return_statement (fields ),
86+ f"{ indent_lvl1 } }}"
9387 ]
9488
89+ return "\n " .join (equals )
90+
91+
92+ def _render_equals_return_statement (fields : List [Field ]) -> str :
93+ return_statement = []
9594 for i , field in enumerate (fields ):
96- _validate_java_identifier (field .name )
97- getter_name = _get_getter_name (field )
98- semicolon = ";" if i == (len (fields ) - 1 ) else ""
95+ getter_name = _build_getter_name (field .name )
96+ end_line = ";" if i == (len (fields ) - 1 ) else ""
9997 if i == 0 :
100- equals .append (f"{ indent_lvl2 } return Objects.equals({ getter_name } (), that.{ getter_name } ()){ semicolon } " )
98+ return_statement .append (f"{ indent_lvl2 } return Objects.equals({ getter_name } (), that.{ getter_name } ()){ end_line } " )
10199 else :
102- equals .append (
103- f"{ indent_lvl2 } { return_indent } && Objects.equals({ getter_name } (), that.{ getter_name } ()){ semicolon } " )
104- equals .append (f"{ indent_lvl1 } }}" )
105-
106- return "\n " .join (equals )
100+ return_statement .append (
101+ f"{ indent_lvl2 } { return_indent } && Objects.equals({ getter_name } (), that.{ getter_name } ()){ end_line } " )
102+ return "\n " .join (return_statement )
107103
108104
109105def generate_hash_code (fields : List [Field ]) -> str :
110106 hash_code = [
111107 "" ,
112108 f"{ indent_lvl1 } @Override" ,
113- f"{ indent_lvl1 } public int hashCode() {{"
109+ f"{ indent_lvl1 } public int hashCode() {{" ,
110+ _render_hashcode_return_statement (fields ),
111+ f"{ indent_lvl1 } }}"
114112 ]
115113
116- for i , field in enumerate (fields ):
117- _validate_java_identifier (field .name )
118- hash_code .extend (_get_return_hash_lines (fields , index = i ))
119-
120- hash_code .append (f"{ indent_lvl1 } }}" )
121-
122114 return "\n " .join (hash_code )
123115
124116
125- def _get_return_hash_lines (fields , index ) -> List [str ]:
126- field = fields [index ]
127- getter_name = _get_getter_name (field )
128- comma = "," if index < (len (fields ) - 1 ) else ""
129- another_hash_line = f"{ indent_lvl2 } { return_indent } { getter_name } (){ comma } "
117+ def _render_hashcode_return_statement (fields : List [Field ]) -> str :
130118 if len (fields ) == 1 :
131- return [f"{ indent_lvl2 } return Objects.hash({ getter_name } ());" ]
132- if len (fields ) > 1 and index == 0 :
133- return [f"{ indent_lvl2 } return Objects.hash(" ,
134- f"{ another_hash_line } " ]
135- if len (fields ) > 1 and index == (len (fields ) - 1 ):
136- return [f"{ another_hash_line } " ,
137- f"{ indent_lvl2 } );" ]
138- return [another_hash_line ]
119+ return _render_hashcode_return_statement_single_field (fields )
120+
121+ return _render_hashcode_return_statement_multiple_field (fields )
122+
123+
124+ def _render_hashcode_return_statement_single_field (fields : List [Field ]) -> str :
125+ field_name = fields [0 ].name
126+ getter_name = _build_getter_name (field_name )
127+ return f"{ indent_lvl2 } return Objects.hash({ getter_name } ());"
128+
129+
130+ def _render_hashcode_return_statement_multiple_field (fields : List [Field ]) -> str :
131+ return_statement = [f"{ indent_lvl2 } return Objects.hash(" ]
132+ for index , field in enumerate (fields ):
133+ getter_name = _build_getter_name (field .name )
134+ comma = "," if index < (len (fields ) - 1 ) else ""
135+ return_statement .append (f"{ indent_lvl2 } { return_indent } { getter_name } (){ comma } " )
136+
137+ return_statement .append (f"{ indent_lvl2 } );" )
138+
139+ return "\n " .join (return_statement )
139140
140141
141- def _get_getter_name ( field ) :
142- getter_name = "get" + field . name [ 0 ]. upper () + field . name [ 1 :]
143- return getter_name
142+ def _build_getter_name ( field_name : str ) -> str :
143+ _validate_java_field_name ( field_name )
144+ return "get" + field_name [ 0 ]. upper () + field_name [ 1 :]
144145
145146
146- def _get_setter_name (field_name ) :
147- setter_name = "set" + field_name [ 0 ]. upper () + field_name [ 1 :]
148- return setter_name
147+ def _build_setter_name (field_name : str ) -> str :
148+ _validate_java_field_name ( field_name )
149+ return "set" + field_name [ 0 ]. upper () + field_name [ 1 :]
149150
150151
151- def _validate_java_identifier (name : str ) -> None :
152+ def _validate_java_field_name (name : str ) -> None :
152153 if not name :
153154 raise ValueError ("Field name cannot be empty" )
154155
0 commit comments