Skip to content

Commit 78d2207

Browse files
committed
Add IntelliJ Templates for equals and hashCode generation.
Closes #2029
1 parent cc86f44 commit 78d2207

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed

etc/ide/IntelliJ.equals-template.txt

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#parse("equalsHelper.vm")
2+
public boolean equals(##
3+
#if ($settings.generateFinalParameters)
4+
final ##
5+
#end
6+
Object $paramName){
7+
#addEqualsPrologue()
8+
#if ($fields.size() > 0)
9+
10+
#addClassInstance()
11+
12+
#foreach($field in $fields)
13+
#if ($field.primitive)
14+
#addPrimitiveFieldComparison($field)
15+
#elseif ($field.enum)
16+
#addPrimitiveFieldComparison($field)
17+
#else
18+
#addFieldComparison($field)
19+
#end
20+
#end
21+
#end
22+
23+
return true;
24+
}
25+
##
26+
#macro(addPrimitiveFieldComparison $field)
27+
if($field.accessor != ${classInstanceName}.$field.accessor) return false;
28+
#end
29+
##
30+
#macro(addFieldComparison $field)
31+
if(!ObjectUtils.nullSafeEquals($field.accessor, ${classInstanceName}.$field.accessor)) { return false; }
32+
#end
33+
##
+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
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+
ObjectUtils.nullSafeHashCode($name)##
124+
#end

0 commit comments

Comments
 (0)