File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+
109129def _validate_java_identifier (name : str ) -> None :
110130 if not name :
111131 raise ValueError ("Field name cannot be empty" )
Original file line number Diff line number Diff 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 ])
You can’t perform that action at this time.
0 commit comments