Skip to content

Commit 4ef7129

Browse files
committed
Refactor java_method_generator.py
1 parent b738d5d commit 4ef7129

1 file changed

Lines changed: 70 additions & 69 deletions

File tree

src/java_method_generator.py

Lines changed: 70 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,27 @@ def generate_fields_block(fields: List[Field]) -> str:
1414

1515

1616
def 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+
3438
def 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

4347
def 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

6259
def 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

8071
def 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

109105
def 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

Comments
 (0)