A248

hashCode() template

Feb 4th, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. public int hashCode() {
  2. #if (!$superHasHashCode && $fields.size() == 1)
  3. #set($field = $fields.get(0))
  4. #if ($field.primitive)
  5. #addTempForOneField($field)
  6. return #addPrimitiveFieldHashCode($field);
  7. #else
  8. return #addFieldHashCode($field, false);
  9. #end
  10. #elseif ($fields.size() > 0)
  11. #set($resultName = $helper.getUniqueLocalVarName("result", $fields, $settings))
  12. int $resultName ##
  13. #set($resultAssigned = false)
  14. #set($resultDeclarationCompleted = false)
  15. #if ($superHasHashCode)
  16. = #addSuperHashCode();
  17. #set($resultAssigned = true)
  18. #set($resultDeclarationCompleted = true)
  19. #end
  20. #addTempDeclaration($resultDeclarationCompleted)
  21. #set($tempName = "#addTempDeclaration($resultDeclarationCompleted)")
  22. #foreach($field in $fields)
  23. #addTempAssignment($field)
  24. #if ($resultDeclarationCompleted)
  25. $resultName ##
  26. #end
  27. = ##
  28. #if ($resultAssigned)
  29. 31 * $resultName + ##
  30. #end
  31. #if ($field.primitive)
  32. #addPrimitiveFieldHashCode($field)##
  33. #else
  34. #addFieldHashCode($field, $resultAssigned)##
  35. #end
  36. ;
  37. #set($resultAssigned = true)
  38. #set($resultDeclarationCompleted = true)
  39. #end
  40. return $resultName;
  41. #else
  42. return 0;
  43. #end
  44. }
  45. ##
  46. #macro (addPrimitiveFieldHashCode $field)
  47. #set ($fName = $field.accessor)
  48. #if ($field.byte || $field.short || $field.char)
  49. (int) $fName##
  50. #elseif ($field.long)
  51. (int)($fName ^ ($fName >>> 32))##
  52. #elseif ($field.boolean)
  53. ($fName ? 1 : 0)##
  54. #elseif ($field.float)
  55. ($fName != +0.0f ? java.lang.Float.floatToIntBits($fName) : 0)##
  56. #elseif ($field.double)
  57. #set($tempName = "#getTempVarName()")
  58. (int) ($tempName ^ ($tempName >>> 32))##
  59. #elseif ($field.void)
  60. 0##
  61. #else
  62. $fName##
  63. #end
  64. #end
  65. ##
  66. #macro(getTempVarName)
  67. $helper.getUniqueLocalVarName("temp", $fields, $settings)##
  68. #end
  69. ##
  70. #macro(addTempForOneField $field)
  71. #if ($field.double)
  72. #if ($settings.generateFinalLocals)
  73. final ##
  74. #end
  75. #set($tempName = "#getTempVarName()")
  76. long $tempName = java.lang.Double.doubleToLongBits($field.accessor);
  77. #end
  78. #end
  79. ##
  80. #macro(adjustHashCodeToArrays $field)
  81. #if ($field.array && $java_version > 4)
  82. #if ($field.nestedArray)
  83. java.util.Arrays.deepHashCode($field.accessor)##
  84. #else
  85. java.util.Arrays.hashCode($field.accessor)##
  86. #end
  87. #else
  88. ${field.accessor}.hashCode()##
  89. #end
  90. #end
  91. ##
  92. #macro(addSuperHashCode)
  93. #if ($superHasHashCode)
  94. super.hashCode()##
  95. #else
  96. 0##
  97. #end
  98. #end
  99. ##
  100. #macro(addTempDeclaration $resultDeclarationCompleted)
  101. #foreach($field in $fields)
  102. #if ($field.double)
  103. #if (!$resultDeclarationCompleted)
  104. ;
  105. #end
  106. #set($tempName = "#getTempVarName()")
  107. long $tempName;
  108. #set($resultDeclarationCompleted = true)
  109. #break
  110. #end
  111. #end
  112. #end
  113. ##
  114. #macro(addTempAssignment $field)
  115. #if ($field.double)
  116. #set($tempName = "#getTempVarName()")
  117. $tempName = java.lang.Double.doubleToLongBits($field.accessor);
  118. #end
  119. #end
  120. ##
  121. #macro(addFieldHashCode $field $brace)
  122. #set($name = $field.accessor)
  123. #if ($field.notNull)#adjustHashCodeToArrays($field)
  124. #elseif ($field.array && $java_version > 4)#adjustHashCodeToArrays($field)
  125. #else
  126. #if ($brace)(##
  127. #end
  128. $name != null ? #adjustHashCodeToArrays($field) : 0##
  129. #if ($brace))##
  130. #end
  131. #end
  132. #end
  133.  
Advertisement
Add Comment
Please, Sign In to add comment