Skip to content

Commit f1222d6

Browse files
committed
add hashCode generation
1 parent c1541ef commit f1222d6

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

src/method_generator.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,26 @@ def generate_setter(field: Field) -> str:
106106
return setter
107107

108108

109+
def generate_hash_code(fields: List[Field]) -> str:
110+
hash_code = [
111+
"",
112+
f"{indent_lvl1}@Override",
113+
f"{indent_lvl1}public int hashCode() {{",
114+
f"{indent_lvl2}return Objects.hash("
115+
]
116+
117+
for i, field in enumerate(fields):
118+
_validate_java_identifier(field.name)
119+
getter_name = "get" + field.name[0].upper() + field.name[1:]
120+
comma = "," if i < (len(fields) - 1) else ""
121+
hash_code.append(f"{indent_lvl2} {getter_name}(){comma}")
122+
123+
hash_code.append(f"{indent_lvl2});")
124+
hash_code.append(f"{indent_lvl1}}}")
125+
126+
return "\n".join(hash_code)
127+
128+
109129
def _validate_java_identifier(name: str) -> None:
110130
if not name:
111131
raise ValueError("Field name cannot be empty")

tests/test_method_generator.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,27 @@ def test_generate_fields_block():
136136
*/
137137
private CustomObject customData;"""
138138
assert generate_fields_block(attributes) == expected
139+
140+
141+
def test_generate_hash_code():
142+
attr1 = field_exampleAttribute_int
143+
attr2 = field_someName_String
144+
attr3 = field_customData_CustomObject
145+
attributes = [attr1, attr2, attr3]
146+
expected = """
147+
@Override
148+
public int hashCode() {
149+
return Objects.hash(
150+
getExampleAttribute(),
151+
getSomeName(),
152+
getCustomData()
153+
);
154+
}"""
155+
assert generate_hash_code(attributes) == expected
156+
157+
158+
def test_generate_hash_code_invalid_name():
159+
for name in illegal_names:
160+
attr = Field(name=name, type="String")
161+
with pytest.raises(ValueError):
162+
generate_hash_code([attr])

0 commit comments

Comments
 (0)