2525indent_lvl1 = " "
2626indent_lvl2 = indent_lvl1 * 2
2727indent_lvl3 = indent_lvl1 * 3
28+ return_indent = " "
2829
2930
3031@dataclass
@@ -75,7 +76,7 @@ def generate_getter(field: Field) -> str:
7576
7677 _validate_java_identifier (field_name )
7778
78- getter_name = "get" + field_name [ 0 ]. upper () + field_name [ 1 :]
79+ getter_name = _get_getter_name ( field )
7980
8081 getter = [
8182 "" ,
@@ -94,7 +95,7 @@ def generate_setter(field: Field) -> str:
9495
9596 _validate_java_identifier (field_name )
9697
97- setter_name = "set" + field_name [ 0 ]. upper () + field_name [ 1 :]
98+ setter_name = _get_setter_name ( field_name )
9899
99100 setter = [
100101 "" ,
@@ -123,12 +124,12 @@ def generate_equals(class_name: str, fields: List[Field]) -> str:
123124
124125 for i , field in enumerate (fields ):
125126 _validate_java_identifier (field .name )
126- getter_name = "get" + field . name [ 0 ]. upper () + field . name [ 1 :]
127+ getter_name = _get_getter_name ( field )
127128 semicolon = ";" if i == (len (fields ) - 1 ) else ""
128129 if i == 0 :
129130 equals .append (f"{ indent_lvl2 } return Objects.equals({ getter_name } (), that.{ getter_name } ()){ semicolon } " )
130131 else :
131- equals .append (f"{ indent_lvl2 } && Objects.equals({ getter_name } (), that.{ getter_name } ()){ semicolon } " )
132+ equals .append (f"{ indent_lvl2 } { return_indent } && Objects.equals({ getter_name } (), that.{ getter_name } ()){ semicolon } " )
132133 equals .append (f"{ indent_lvl1 } }}" )
133134
134135 return "\n " .join (equals )
@@ -143,25 +144,39 @@ def generate_hash_code(fields: List[Field]) -> str:
143144
144145 for i , field in enumerate (fields ):
145146 _validate_java_identifier (field .name )
146- getter_name = "get" + field .name [0 ].upper () + field .name [1 :]
147- comma = "," if i < (len (fields ) - 1 ) else ""
148-
149- if len (fields ) == 1 :
150- hash_code .append (f"{ indent_lvl2 } return Objects.hash({ getter_name } ());" )
151- elif len (fields ) > 1 and i == 0 :
152- hash_code .append (f"{ indent_lvl2 } return Objects.hash(" )
153- hash_code .append (f"{ indent_lvl2 } { getter_name } (){ comma } " )
154- elif len (fields ) > 1 and i == (len (fields ) - 1 ):
155- hash_code .append (f"{ indent_lvl2 } { getter_name } (){ comma } " )
156- hash_code .append (f"{ indent_lvl2 } );" )
157- else :
158- hash_code .append (f"{ indent_lvl2 } { getter_name } (){ comma } " )
147+ hash_code .extend (_get_return_hash_lines (fields , index = i ))
159148
160149 hash_code .append (f"{ indent_lvl1 } }}" )
161150
162151 return "\n " .join (hash_code )
163152
164153
154+ def _get_return_hash_lines (fields , index ) -> List [str ]:
155+ field = fields [index ]
156+ getter_name = _get_getter_name (field )
157+ comma = "," if index < (len (fields ) - 1 ) else ""
158+ another_hash_line = f"{ indent_lvl2 } { return_indent } { getter_name } (){ comma } "
159+ if len (fields ) == 1 :
160+ return [f"{ indent_lvl2 } return Objects.hash({ getter_name } ());" ]
161+ if len (fields ) > 1 and index == 0 :
162+ return [f"{ indent_lvl2 } return Objects.hash(" ,
163+ f"{ another_hash_line } " ]
164+ if len (fields ) > 1 and index == (len (fields ) - 1 ):
165+ return [f"{ another_hash_line } " ,
166+ f"{ indent_lvl2 } );" ]
167+ return [another_hash_line ]
168+
169+
170+ def _get_getter_name (field ):
171+ getter_name = "get" + field .name [0 ].upper () + field .name [1 :]
172+ return getter_name
173+
174+
175+ def _get_setter_name (field_name ):
176+ setter_name = "set" + field_name [0 ].upper () + field_name [1 :]
177+ return setter_name
178+
179+
165180def _validate_java_identifier (name : str ) -> None :
166181 if not name :
167182 raise ValueError ("Field name cannot be empty" )
0 commit comments