Skip to content

Commit ab6314f

Browse files
committed
improve generate_hash_code function
1 parent 2f78e73 commit ab6314f

2 files changed

Lines changed: 22 additions & 4 deletions

File tree

src/method_generator.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,25 @@ def generate_hash_code(fields: List[Field]) -> str:
138138
hash_code = [
139139
"",
140140
f"{indent_lvl1}@Override",
141-
f"{indent_lvl1}public int hashCode() {{",
142-
f"{indent_lvl2}return Objects.hash("
141+
f"{indent_lvl1}public int hashCode() {{"
143142
]
144143

145144
for i, field in enumerate(fields):
146145
_validate_java_identifier(field.name)
147146
getter_name = "get" + field.name[0].upper() + field.name[1:]
148147
comma = "," if i < (len(fields) - 1) else ""
149-
hash_code.append(f"{indent_lvl2} {getter_name}(){comma}")
150148

151-
hash_code.append(f"{indent_lvl2});")
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}")
159+
152160
hash_code.append(f"{indent_lvl1}}}")
153161

154162
return "\n".join(hash_code)

tests/test_method_generator.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ def test_generate_hash_code():
155155
assert generate_hash_code(attributes) == expected
156156

157157

158+
def test_generate_hash_code_one_field():
159+
attr = field_exampleAttribute_int
160+
expected = """
161+
@Override
162+
public int hashCode() {
163+
return Objects.hash(getExampleAttribute());
164+
}"""
165+
assert generate_hash_code([attr]) == expected
166+
167+
158168
def test_generate_hash_code_invalid_name():
159169
for name in illegal_names:
160170
attr = Field(name=name, type="String")

0 commit comments

Comments
 (0)