Skip to content

Commit edb87f8

Browse files
committed
add fields generation
1 parent fb6f50b commit edb87f8

2 files changed

Lines changed: 85 additions & 9 deletions

File tree

src/method_generator.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import re
22
from dataclasses import dataclass
3-
from typing import List
4-
3+
from typing import List, Optional
54

65
JAVA_KEYWORDS = {
76
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
@@ -32,6 +31,33 @@
3231
class Field:
3332
name: str
3433
type: str
34+
description: Optional[str] = None
35+
36+
37+
def generate_fields_block(fields: List[Field]) -> str:
38+
declaration: list[str] = []
39+
for field in fields:
40+
declaration.append(generate_field_declaration(field))
41+
42+
return "\n".join(declaration)
43+
44+
45+
def generate_field_declaration(field: Field) -> str:
46+
_validate_java_identifier(field.name)
47+
if field.description:
48+
javadoc = "\n".join([
49+
"",
50+
f"{indent_lvl1}/**",
51+
f"{indent_lvl1} * {field.description}",
52+
f"{indent_lvl1} */"
53+
])
54+
else:
55+
javadoc = ""
56+
declaration = [
57+
javadoc,
58+
f"{indent_lvl1}private {field.type} {field.name};"
59+
]
60+
return "\n".join(declaration)
3561

3662

3763
def generate_getters_and_setters(fields: List[Field]) -> str:

tests/test_method_generator.py

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

3-
from src.method_generator import generate_getter, Field, generate_setter, generate_getters_and_setters
3+
from src.method_generator import generate_getter, Field, generate_setter, generate_getters_and_setters, \
4+
generate_field_declaration, generate_fields_block
45

56
JAVA_KEYWORDS = {
67
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
@@ -22,6 +23,10 @@
2223
"null", "true", "false"
2324
}
2425

26+
EMPTY_NAMES = {None, ""}
27+
28+
MALFORMED_IDENTIFIERS = {"3", "abc-d", "gf*d"}
29+
2530

2631
def test_generate_getter_integer():
2732
attr = Field(
@@ -54,9 +59,8 @@ def test_generate_getter_custom_object():
5459

5560

5661
def test_generate_getter_invalid_name():
57-
EMPTY_NAMES = {None, ""}
58-
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | {"3", "abc-d"}
59-
for name in invalid_names:
62+
illegal_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | MALFORMED_IDENTIFIERS
63+
for name in illegal_names:
6064
attr = Field(name=name, type="String")
6165
with pytest.raises(ValueError):
6266
generate_getter(attr)
@@ -90,9 +94,8 @@ def test_generate_setter_custom_object():
9094

9195

9296
def test_generate_setter_invalid_name():
93-
EMPTY_NAMES = {None, ""}
94-
invalid_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | {"9", "gf*d"}
95-
for name in invalid_names:
97+
illegal_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | MALFORMED_IDENTIFIERS
98+
for name in illegal_names:
9699
attr = Field(name=name, type="String")
97100
with pytest.raises(ValueError):
98101
generate_setter(attr)
@@ -116,3 +119,50 @@ def test_generate_getters_and_setters():
116119
this.customData = customData;
117120
}"""
118121
assert generate_getters_and_setters(attributes) == expected
122+
123+
124+
def test_generate_field_declaration():
125+
attr = Field(name="exampleAttribute", type="int", description="javadoc description")
126+
expected = """
127+
/**
128+
* javadoc description
129+
*/
130+
private int exampleAttribute;"""
131+
132+
assert generate_field_declaration(attr) == expected
133+
134+
135+
def test_generate_field_declaration_no_description():
136+
attr = Field(name="customData", type="CustomObject")
137+
expected = """
138+
private CustomObject customData;"""
139+
140+
assert generate_field_declaration(attr) == expected
141+
142+
143+
def test_generate_field_declaration_invalid_name():
144+
illegal_names = JAVA_KEYWORDS | JAVA_BUILTIN_TYPES | JAVA_LITERALS | EMPTY_NAMES | MALFORMED_IDENTIFIERS
145+
for name in illegal_names:
146+
attr = Field(name=name, type="String")
147+
with pytest.raises(ValueError):
148+
generate_field_declaration(attr)
149+
150+
151+
def test_generate_fields_block():
152+
attr1 = Field(name="exampleAttribute", type="int", description="javadoc description")
153+
attr2 = Field(name="someName", type="String")
154+
attr3 = Field(name="customData", type="CustomObject", description="another javadoc description")
155+
attributes = [attr1, attr2, attr3]
156+
expected = """
157+
/**
158+
* javadoc description
159+
*/
160+
private int exampleAttribute;
161+
162+
private String someName;
163+
164+
/**
165+
* another javadoc description
166+
*/
167+
private CustomObject customData;"""
168+
assert generate_fields_block(attributes) == expected

0 commit comments

Comments
 (0)