Skip to content

Commit b738d5d

Browse files
committed
create_java model file
1 parent 435d510 commit b738d5d

5 files changed

Lines changed: 55 additions & 58 deletions

File tree

src/enum_generator.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,10 @@
11
import re
2-
from dataclasses import dataclass
3-
from typing import List, Optional
2+
from typing import List
43

4+
from src.java_model import EnumClass, indent_lvl1, indent_lvl2, indent_lvl3
55
from src.header_generator import set_package
66

77

8-
@dataclass
9-
class EnumClass:
10-
name: str
11-
values: List[str]
12-
description: Optional[str] = None
13-
14-
15-
indent_lvl1 = " "
16-
indent_lvl2 = indent_lvl1 * 2
17-
indent_lvl3 = indent_lvl1 * 3
18-
19-
208
def to_java_constant(value: str) -> str:
219
value = re.sub(r"[^A-Za-z0-9]", "_", value) # delimiters a-a -> A_A
2210
value = re.sub(r"([a-z])[_]?([A-Z])([A-Z])([a-z])", r"\1_\2_\3\4", value) # aBCd / a_BCd-> a_B_CD
@@ -34,15 +22,16 @@ def generate_enum_class(enum_class: EnumClass, package: str) -> str:
3422
f"import java.util.HashMap;",
3523
f"import java.util.Map;",
3624
f""
37-
]
25+
]
3826

3927
enum_body.extend(_get_javadoc(enum_class.description))
4028

4129
enum_body.append(f"public enum {enum_class.name} {{")
4230
enum_body.extend(_get_constants(enum_class.values))
4331

4432
enum_body.append(f"")
45-
enum_body.append(f"{indent_lvl1}private final static Map<String, {enum_class.name}> CONSTANTS = new HashMap<String, {enum_class.name}>();")
33+
enum_body.append(
34+
f"{indent_lvl1}private final static Map<String, {enum_class.name}> CONSTANTS = new HashMap<String, {enum_class.name}>();")
4635
enum_body.append(f"")
4736
enum_body.extend(_get_static_method(enum_class.name))
4837

@@ -52,10 +41,10 @@ def generate_enum_class(enum_class: EnumClass, package: str) -> str:
5241
enum_body.extend(_get_constructor(enum_class.name))
5342

5443
enum_body.append(f"")
55-
enum_body.extend(_get_fromValue_method(enum_class.name))
44+
enum_body.extend(_get_from_value_method(enum_class.name))
5645

5746
enum_body.append(f"")
58-
enum_body.extend(_get_toString_method())
47+
enum_body.extend(_get_to_string_method())
5948

6049
enum_body.append(f"")
6150
enum_body.extend(_get_value_method())
@@ -107,7 +96,7 @@ def _get_constructor(class_name: str) -> List[str]:
10796
return body
10897

10998

110-
def _get_fromValue_method(class_name: str) -> List[str]:
99+
def _get_from_value_method(class_name: str) -> List[str]:
111100
body = [
112101
f"{indent_lvl1}public static {class_name} fromValue(String value) {{",
113102
f"{indent_lvl2}{class_name} constant = CONSTANTS.get(value);",
@@ -121,7 +110,7 @@ def _get_fromValue_method(class_name: str) -> List[str]:
121110
return body
122111

123112

124-
def _get_toString_method() -> List[str]:
113+
def _get_to_string_method() -> List[str]:
125114
body = [
126115
f"{indent_lvl1}@Override",
127116
f"{indent_lvl1}public String toString() {{",
Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,8 @@
11
import re
2-
from dataclasses import dataclass
3-
from typing import List, Optional
4-
5-
JAVA_KEYWORDS = {
6-
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
7-
"char", "class", "const", "continue", "default", "do", "double",
8-
"else", "enum", "extends", "final", "finally", "float", "for",
9-
"goto", "if", "implements", "import", "instanceof", "int",
10-
"interface", "long", "native", "new", "package", "private",
11-
"protected", "public", "return", "short", "static", "strictfp",
12-
"super", "switch", "synchronized", "this", "throw", "throws",
13-
"transient", "try", "void", "volatile", "while"
14-
}
15-
16-
JAVA_BUILTIN_TYPES = {
17-
"Boolean", "Byte", "Character", "Double", "Float", "Integer", "List", "Long", "Short",
18-
"Class", "Object", "String", "Void"
19-
}
20-
21-
JAVA_LITERALS = {
22-
"null", "true", "false"
23-
}
24-
25-
indent_lvl1 = " "
26-
indent_lvl2 = indent_lvl1 * 2
27-
indent_lvl3 = indent_lvl1 * 3
28-
return_indent = " "
29-
30-
31-
@dataclass
32-
class Field:
33-
name: str
34-
type: str
35-
description: Optional[str] = None
2+
from typing import List
3+
4+
from src.java_model import JAVA_KEYWORDS, JAVA_BUILTIN_TYPES, JAVA_LITERALS, indent_lvl1, indent_lvl2, indent_lvl3, \
5+
return_indent, Field
366

377

388
def generate_fields_block(fields: List[Field]) -> str:
@@ -129,7 +99,8 @@ def generate_equals(class_name: str, fields: List[Field]) -> str:
12999
if i == 0:
130100
equals.append(f"{indent_lvl2}return Objects.equals({getter_name}(), that.{getter_name}()){semicolon}")
131101
else:
132-
equals.append(f"{indent_lvl2}{return_indent}&& Objects.equals({getter_name}(), that.{getter_name}()){semicolon}")
102+
equals.append(
103+
f"{indent_lvl2}{return_indent}&& Objects.equals({getter_name}(), that.{getter_name}()){semicolon}")
133104
equals.append(f"{indent_lvl1}}}")
134105

135106
return "\n".join(equals)
@@ -186,4 +157,3 @@ def _validate_java_identifier(name: str) -> None:
186157

187158
if not re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", name):
188159
raise ValueError(f"Invalid Java identifier: '{name}'")
189-

src/java_model.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from dataclasses import dataclass
2+
from typing import List, Optional
3+
4+
JAVA_KEYWORDS = {
5+
"abstract", "assert", "boolean", "break", "byte", "case", "catch",
6+
"char", "class", "const", "continue", "default", "do", "double",
7+
"else", "enum", "extends", "final", "finally", "float", "for",
8+
"goto", "if", "implements", "import", "instanceof", "int",
9+
"interface", "long", "native", "new", "package", "private",
10+
"protected", "public", "return", "short", "static", "strictfp",
11+
"super", "switch", "synchronized", "this", "throw", "throws",
12+
"transient", "try", "void", "volatile", "while"
13+
}
14+
JAVA_BUILTIN_TYPES = {
15+
"Boolean", "Byte", "Character", "Double", "Float", "Integer", "List", "Long", "Short",
16+
"Class", "Object", "String", "Void"
17+
}
18+
JAVA_LITERALS = {
19+
"null", "true", "false"
20+
}
21+
indent_lvl1 = " " * 4
22+
indent_lvl2 = indent_lvl1 * 2
23+
indent_lvl3 = indent_lvl1 * 3
24+
return_indent = " "
25+
26+
27+
@dataclass
28+
class EnumClass:
29+
name: str
30+
values: List[str]
31+
description: Optional[str] = None
32+
33+
34+
@dataclass
35+
class Field:
36+
name: str
37+
type: str
38+
description: Optional[str] = None

tests/reference_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from src.method_generator import Field
1+
from src.java_model import Field
22

33
field_exampleAttribute_int = Field(name="exampleAttribute", type="int", description="javadoc description")
44
field_someName_String = Field(name="someName", type="String")
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22

33
from tests.reference_data import *
4-
from src.method_generator import *
4+
from src.java_method_generator import *
55

66
JAVA_KEYWORDS = {
77
"abstract", "assert", "boolean", "break", "byte", "case", "catch",

0 commit comments

Comments
 (0)