Files
openide/java/java-impl/resources/com/intellij/codeInsight/generation/defaultHashCode.vm
Leonid Shalupov 40795fe787 IJI-2422: community/java: move resources under resources root
GitOrigin-RevId: 8b2b63fc6db476ca0c2cfe5cadd84db6c4236d0f
2025-02-05 04:43:28 +00:00

151 lines
3.7 KiB
Plaintext

public int hashCode() {
#if (!$superHasHashCode && $fields.size() == 1)
#set($field = $fields.get(0))
#if ($field.primitive)
#addTempForOneField($field)
return #addPrimitiveFieldHashCode($field);
#else
return #addFieldHashCode($field, false);
#end
#elseif ($fields.size() > 0)
#set($resultName = $helper.getUniqueLocalVarName("result", $fields, $settings))
int $resultName ##
#set($resultAssigned = false)
#set($resultDeclarationCompleted = false)
#if ($superHasHashCode)
= #addSuperHashCode();
#set($resultAssigned = true)
#set($resultDeclarationCompleted = true)
#end
#addTempDeclaration($resultDeclarationCompleted)
#set($tempName = "#addTempDeclaration($resultDeclarationCompleted)")
#foreach($field in $fields)
#addTempAssignment($field)
#if ($resultDeclarationCompleted)
$resultName ##
#end
= ##
#if ($resultAssigned)
31 * $resultName + ##
#end
#if ($field.primitive)
#addPrimitiveFieldHashCode($field)##
#else
#addFieldHashCode($field, $resultAssigned)##
#end
;
#set($resultAssigned = true)
#set($resultDeclarationCompleted = true)
#end
return $resultName;
#else
return 0;
#end
}
##
#macro (addPrimitiveFieldHashCode $field)
#set ($fName = $field.accessor)
#if ($field.byte || $field.short || $field.char)
$fName##
#elseif ($field.long)
#if ($java_version < 8)
(int)($fName ^ ($fName >>> 32))##
#else
java.lang.Long.hashCode($fName)##
#end
#elseif ($field.boolean)
#if ($java_version < 8)
($fName ? 1 : 0)##
#else
java.lang.Boolean.hashCode($fName)##
#end
#elseif ($field.float)
#if ($java_version < 8)
java.lang.Float.floatToIntBits($fName)##
#else
java.lang.Float.hashCode($fName)##
#end
#elseif ($field.double)
#if ($java_version < 8)
#set($tempName = "#getTempVarName()")
(int) ($tempName ^ ($tempName >>> 32))##
#else
java.lang.Double.hashCode($fName)##
#end
#elseif ($field.void)
0##
#else
$fName##
#end
#end
##
#macro(getTempVarName)
$helper.getUniqueLocalVarName("temp", $fields, $settings)##
#end
##
#macro(addTempForOneField $field)
#if ($field.double && $java_version < 8)
#if ($settings.generateFinalLocals)
final ##
#end
#set($tempName = "#getTempVarName()")
long $tempName = java.lang.Double.doubleToLongBits($field.accessor);
#end
#end
##
#macro(adjustHashCodeToArrays $field)
#if ($field.array && $java_version > 4)
#if ($field.nestedArray)
java.util.Arrays.deepHashCode($field.accessor)##
#else
java.util.Arrays.hashCode($field.accessor)##
#end
#else
${field.accessor}.hashCode()##
#end
#end
##
#macro(addSuperHashCode)
#if ($superHasHashCode)
super.hashCode()##
#else
0##
#end
#end
##
#macro(addTempDeclaration $resultDeclarationCompleted)
#foreach($field in $fields)
#if ($field.double && $java_version < 8)
#if (!$resultDeclarationCompleted)
;
#end
#set($tempName = "#getTempVarName()")
long $tempName;
#set($resultDeclarationCompleted = true)
#break
#end
#end
#end
##
#macro(addTempAssignment $field)
#if ($field.double && $java_version < 8)
#set($tempName = "#getTempVarName()")
$tempName = java.lang.Double.doubleToLongBits($field.accessor);
#end
#end
##
#macro(addFieldHashCode $field $brace)
#set($name = $field.accessor)
#if ($field.notNull)#adjustHashCodeToArrays($field)
#elseif ($field.array && $java_version > 4)#adjustHashCodeToArrays($field)
#elseif ($java_version >= 7)
java.util.Objects.hashCode($field.accessor) ##
#else
#if ($brace)(##
#end
$name != null ? #adjustHashCodeToArrays($field) : 0##
#if ($brace))##
#end
#end
#end