@@ -83,11 +83,7 @@ private void WriteMonitorDecl()
83
83
WriteLine ( ) ;
84
84
85
85
// monitor fields
86
- foreach ( var field in _currentMachine . Fields )
87
- {
88
- var type = Types . JavaTypeFor ( field . Type ) ;
89
- var name = Names . GetNameForDecl ( field ) ;
90
-
86
+ foreach ( var ( type , name ) in FieldsForCurrentMachine ( ) ) {
91
87
WriteLine ( $ "private { type . TypeName } { name } = { type . DefaultValue } ;") ;
92
88
WriteLine ( $ "public { type . TypeName } get_{ name } () {{ return this.{ name } ; }};") ;
93
89
WriteLine ( ) ;
@@ -118,7 +114,7 @@ private void WriteMonitorDecl()
118
114
WriteFunction ( f ) ;
119
115
}
120
116
121
- WriteToString ( ) ;
117
+ WriteOverloads ( ) ;
122
118
123
119
WriteLine ( ) ;
124
120
@@ -967,21 +963,59 @@ private void WriteStructureAccess(IPExpr e)
967
963
}
968
964
}
969
965
970
- private void WriteToString ( )
966
+ private void WriteOverloads ( )
971
967
{
968
+ // toString()
969
+ WriteLine ( ) ;
972
970
WriteLine ( "public String toString() {" ) ;
973
971
WriteLine ( $ "StringBuilder sb = new StringBuilder(\" { _currentMachine . Name } \" );") ;
974
-
972
+
975
973
WriteLine ( "sb.append(\" [\" );" ) ;
976
974
foreach ( var ( sep , field ) in _currentMachine . Fields . WithPrefixSep ( ", " ) )
977
975
{
978
976
WriteLine ( $ "sb.append(\" { sep } { field . Name } =\" + { Names . GetNameForDecl ( field ) } );") ;
979
977
}
978
+
980
979
WriteLine ( "sb.append(\" ]\" );" ) ;
981
-
980
+
982
981
WriteLine ( "return sb.toString();" ) ;
983
982
WriteLine ( "} // toString()" ) ;
983
+
984
+ // deepEquals
985
+ WriteLine ( ) ;
986
+ WriteLine ( $ "public boolean deepEquals({ _currentMachine . Name } other) {{") ;
987
+ WriteLine ( "return (true" ) ;
988
+ foreach ( var ( jType , fieldName ) in FieldsForCurrentMachine ( ) )
989
+ {
990
+ Write ( "&& " ) ;
991
+ WriteLine ( jType . IsPrimitive
992
+ ? $ "this.{ fieldName } == other.{ fieldName } "
993
+ : $ "{ Constants . PrtDeepEqualsMethodName } (this.{ fieldName } , other.{ fieldName } )") ;
994
+ }
995
+ WriteLine ( ");" ) ;
996
+ WriteLine ( "} // deepEquals()" ) ;
997
+
998
+ // equals
999
+ WriteLine ( ) ;
1000
+ WriteLine ( "public boolean equals(Object other) {" ) ;
1001
+ WriteLine ( $ "return (this.getClass() == other.getClass()) && this.deepEquals(({ _currentMachine . Name } )other);") ;
1002
+ WriteLine ( "} // equals()" ) ;
1003
+
1004
+ // hashCode
1005
+ WriteLine ( ) ;
1006
+ WriteLine ( "public int hashCode() {" ) ;
1007
+ Write ( "return Objects.hash(" ) ;
1008
+ foreach ( var ( sep , ( _, fieldName ) ) in FieldsForCurrentMachine ( ) . WithPrefixSep ( ", " ) )
1009
+ {
1010
+ Write ( $ "{ sep } { fieldName } ") ;
1011
+ }
1012
+ WriteLine ( ");" ) ;
1013
+ WriteLine ( "} // hashCode()" ) ;
1014
+ }
1015
+
1016
+ private IEnumerable < ( TypeManager . JType , string ) > FieldsForCurrentMachine ( )
1017
+ {
1018
+ return _currentMachine . Fields . Select ( field => ( Types . JavaTypeFor ( field . Type ) , Names . GetNameForDecl ( field ) ) ) ;
984
1019
}
985
-
986
1020
}
987
1021
}
0 commit comments