Libraryless. Click here for Pure Java version (2723L/17K).
// fields: type + name sS tok_genEqualsAndHashCode(S className, LPairS fields, O... _) { optPar S qualifier = ""; optPar bool flexEq; S argName = "o"; while (pairsB(fields).contains(argName)) argName = "_" + argName; StringBuilder buf = new("\n\npublic bool equals(O \*argName*/) {\n"); S instanceCheck = flexEq ? "_getClass(\*argName*/) == getClass()" : "\*argName*/ instanceof " + qualifier + className; if (empty(fields)) buf.append("ret \*instanceCheck*/;\n"); else { S x = makeVar(); buf.append("if (!(" + instanceCheck + [[)) false; ]] + className + " \*x*/ = cast " + argName + [[; ret ]] + join(" && ", map(fields, func(PairS p) -> S { tok_isPrimitiveType(p.a) ? p.b + " == \*x*/." + p.b : "eq(" + p.b + ", \*x*/." + p.b + ")" })) + ";\n"); } buf.append("}\n"); buf.append([[ public int hashCode() { int h = ]] + hashCode(className) + [[; ]] + concatMap_strings(fields, func(Pair<S> p) { "h = boostHashCombine(h, _hashCode(" + p.b + [[)); ]]}) + [[ret h; } ]]); ret str(buf); }
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
| Snippet ID: | #1017037 | 
| Snippet name: | tok_genEqualsAndHashCode | 
| Eternal ID of this version: | #1017037/18 | 
| Text MD5: | b379d269d52bb3aed4bca875d2c6804d | 
| Transpilation MD5: | 15fc7a6f64c73ee20641468e4c742e03 | 
| Author: | stefan | 
| Category: | javax / transpiling | 
| Type: | JavaX fragment (include) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2020-07-24 15:13:56 | 
| Source code size: | 1123 bytes / 34 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 688 / 883 | 
| Version history: | 17 change(s) | 
| Referenced in: | [show references] |