Skip to content

Commit 9d89e51

Browse files
committed
refactor generate_hash_code
1 parent fd6c859 commit 9d89e51

1 file changed

Lines changed: 32 additions & 17 deletions

File tree

src/method_generator.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
indent_lvl1 = " "
2626
indent_lvl2 = indent_lvl1 * 2
2727
indent_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+
165180
def _validate_java_identifier(name: str) -> None:
166181
if not name:
167182
raise ValueError("Field name cannot be empty")

0 commit comments

Comments
 (0)