Skip to content

Commit fb6f50b

Browse files
committed
add generate_getters_and_setters() function
1 parent b5b3401 commit fb6f50b

2 files changed

Lines changed: 55 additions & 26 deletions

File tree

src/method_generator.py

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import re
22
from dataclasses import dataclass
3+
from typing import List
34

45

56
JAVA_KEYWORDS = {
@@ -33,37 +34,46 @@ class Field:
3334
type: str
3435

3536

36-
def generate_getter(attr: Field) -> str:
37-
attr_name = attr.name
38-
attr_type = attr.type
37+
def generate_getters_and_setters(fields: List[Field]) -> str:
38+
methods: list[str] = []
39+
for field in fields:
40+
methods.append(generate_getter(field))
41+
methods.append(generate_setter(field))
3942

40-
_validate_java_identifier(attr_name)
43+
return "\n\n".join(methods)
4144

42-
getter_name = "get" + attr_name[0].upper() + attr_name[1:]
45+
46+
def generate_getter(field: Field) -> str:
47+
field_name = field.name
48+
field_type = field.type
49+
50+
_validate_java_identifier(field_name)
51+
52+
getter_name = "get" + field_name[0].upper() + field_name[1:]
4353

4454
getter = [
4555
"",
46-
f"{indent_lvl1}public {attr_type} {getter_name}() {{",
47-
f"{indent_lvl2}return {attr_name};",
56+
f"{indent_lvl1}public {field_type} {getter_name}() {{",
57+
f"{indent_lvl2}return {field_name};",
4858
f"{indent_lvl1}}}"
4959
]
5060
getter = "\n".join(getter)
5161

5262
return getter
5363

5464

55-
def generate_setter(attr: Field) -> str:
56-
attr_name = attr.name
57-
attr_type = attr.type
65+
def generate_setter(field: Field) -> str:
66+
field_name = field.name
67+
field_type = field.type
5868

59-
_validate_java_identifier(attr_name)
69+
_validate_java_identifier(field_name)
6070

61-
setter_name = "set" + attr_name[0].upper() + attr_name[1:]
71+
setter_name = "set" + field_name[0].upper() + field_name[1:]
6272

6373
setter = [
6474
"",
65-
f"{indent_lvl1}public void {setter_name}({attr_type} {attr_name}) {{",
66-
f"{indent_lvl2}this.{attr_name} = {attr_name};",
75+
f"{indent_lvl1}public void {setter_name}({field_type} {field_name}) {{",
76+
f"{indent_lvl2}this.{field_name} = {field_name};",
6777
f"{indent_lvl1}}}"
6878
]
6979
setter = "\n".join(setter)

tests/test_method_generator.py

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from src.method_generator import generate_getter, Field, generate_setter
3+
from src.method_generator import generate_getter, Field, generate_setter, generate_getters_and_setters
44

55
JAVA_KEYWORDS = {
66
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
@@ -55,7 +55,7 @@ def test_generate_getter_custom_object():
5555

5656
def test_generate_getter_invalid_name():
5757
EMPTY_NAMES = {None, ""}
58-
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES
58+
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | {"3", "abc-d"}
5959
for name in invalid_names:
6060
attr = Field(name=name, type="String")
6161
with pytest.raises(ValueError):
@@ -64,36 +64,55 @@ def test_generate_getter_invalid_name():
6464

6565
def test_generate_setter_integer():
6666
attr = Field(name="exampleAttribute", type="int")
67-
expected = f"""
68-
public void setExampleAttribute(int exampleAttribute) {{
67+
expected = """
68+
public void setExampleAttribute(int exampleAttribute) {
6969
this.exampleAttribute = exampleAttribute;
70-
}}"""
70+
}"""
7171
assert (generate_setter(attr) == expected)
7272

7373

7474
def test_generate_setter_string():
7575
attr = Field(name="someName", type="String")
76-
expected = f"""
77-
public void setSomeName(String someName) {{
76+
expected = """
77+
public void setSomeName(String someName) {
7878
this.someName = someName;
79-
}}"""
79+
}"""
8080
assert (generate_setter(attr) == expected)
8181

8282

8383
def test_generate_setter_custom_object():
8484
attr = Field(name="customData", type="CustomObject")
85-
expected = f"""
86-
public void setCustomData(CustomObject customData) {{
85+
expected = """
86+
public void setCustomData(CustomObject customData) {
8787
this.customData = customData;
88-
}}"""
88+
}"""
8989
assert (generate_setter(attr) == expected)
9090

9191

9292
def test_generate_setter_invalid_name():
9393
EMPTY_NAMES = {None, ""}
94-
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES
94+
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | {"9", "gf*d"}
9595
for name in invalid_names:
9696
attr = Field(name=name, type="String")
9797
with pytest.raises(ValueError):
9898
generate_setter(attr)
9999

100+
101+
def test_generate_getters_and_setters():
102+
attr1 = Field(name="exampleAttribute", type="int")
103+
attr2 = Field(name="customData", type="CustomObject")
104+
attributes = [attr1, attr2]
105+
expected = """
106+
public int getExampleAttribute() {
107+
return exampleAttribute;
108+
}\n\n
109+
public void setExampleAttribute(int exampleAttribute) {
110+
this.exampleAttribute = exampleAttribute;
111+
}\n\n
112+
public CustomObject getCustomData() {
113+
return customData;
114+
}\n\n
115+
public void setCustomData(CustomObject customData) {
116+
this.customData = customData;
117+
}"""
118+
assert generate_getters_and_setters(attributes) == expected

0 commit comments

Comments
 (0)