20
20
package com .github .fge .jackson ;
21
21
22
22
import com .fasterxml .jackson .databind .JsonNode ;
23
+ import com .github .fge .jackson .com .google .common .base .Equivalence ;
23
24
24
- import javax .annotation .Nullable ;
25
25
import java .util .HashSet ;
26
26
import java .util .Iterator ;
27
27
import java .util .Map ;
41
41
* kind of equality.</p>
42
42
*/
43
43
public final class JsonNumEquals
44
+ extends Equivalence <JsonNode >
44
45
{
45
- private static final JsonNumEquals INSTANCE
46
+ private static final Equivalence < JsonNode > INSTANCE
46
47
= new JsonNumEquals ();
47
48
48
49
private JsonNumEquals ()
49
50
{
50
51
}
51
52
52
- public static JsonNumEquals getInstance ()
53
+ public static Equivalence < JsonNode > getInstance ()
53
54
{
54
55
return INSTANCE ;
55
56
}
56
57
57
- /**
58
- * Returns {@code true} if the given objects are considered equivalent.
59
- *
60
- * <p>The {@code equivalent} method implements an equivalence relation on object references:
61
- *
62
- * <ul>
63
- * <li>It is <i>reflexive</i>: for any reference {@code x}, including null, {@code
64
- * equivalent(x, x)} returns {@code true}.
65
- * <li>It is <i>symmetric</i>: for any references {@code x} and {@code y}, {@code
66
- * equivalent(x, y) == equivalent(y, x)}.
67
- * <li>It is <i>transitive</i>: for any references {@code x}, {@code y}, and {@code z}, if
68
- * {@code equivalent(x, y)} returns {@code true} and {@code equivalent(y, z)} returns {@code
69
- * true}, then {@code equivalent(x, z)} returns {@code true}.
70
- * <li>It is <i>consistent</i>: for any references {@code x} and {@code y}, multiple invocations
71
- * of {@code equivalent(x, y)} consistently return {@code true} or consistently return {@code
72
- * false} (provided that neither {@code x} nor {@code y} is modified).
73
- * </ul>
74
- * @param a x
75
- * @param b y
76
- * @return whether nodes are equal according to IETF RFCs
77
- */
78
- public final boolean equivalent (@ Nullable JsonNode a , @ Nullable JsonNode b ) {
79
- if (a == b ) {
80
- return true ;
81
- }
82
- if (a == null || b == null ) {
83
- return false ;
84
- }
85
- return doEquivalent (a , b );
86
- }
87
-
58
+ @ Override
88
59
protected boolean doEquivalent (final JsonNode a , final JsonNode b )
89
60
{
90
61
/*
@@ -122,31 +93,7 @@ protected boolean doEquivalent(final JsonNode a, final JsonNode b)
122
93
return typeA == NodeType .ARRAY ? arrayEquals (a , b ) : objectEquals (a , b );
123
94
}
124
95
125
- /**
126
- * Returns a hash code for {@code t}.
127
- *
128
- * <p>The {@code hash} has the following properties:
129
- * <ul>
130
- * <li>It is <i>consistent</i>: for any reference {@code x}, multiple invocations of
131
- * {@code hash(x}} consistently return the same value provided {@code x} remains unchanged
132
- * according to the definition of the equivalence. The hash need not remain consistent from
133
- * one execution of an application to another execution of the same application.
134
- * <li>It is <i>distributable across equivalence</i>: for any references {@code x} and {@code y},
135
- * if {@code equivalent(x, y)}, then {@code hash(x) == hash(y)}. It is <i>not</i> necessary
136
- * that the hash be distributable across <i>inequivalence</i>. If {@code equivalence(x, y)}
137
- * is false, {@code hash(x) == hash(y)} may still be true.
138
- * <li>{@code hash(null)} is {@code 0}.
139
- * </ul>
140
- * @param t node to hash
141
- * @return hash
142
- */
143
- public final int hash (@ Nullable JsonNode t ) {
144
- if (t == null ) {
145
- return 0 ;
146
- }
147
- return doHash (t );
148
- }
149
-
96
+ @ Override
150
97
protected int doHash (final JsonNode t )
151
98
{
152
99
/*
@@ -236,7 +183,7 @@ private boolean objectEquals(final JsonNode a, final JsonNode b)
236
183
/*
237
184
* Grab the key set from the first node
238
185
*/
239
- final Set <String > keys = new HashSet <String >();
186
+ final Set <String > keys = new HashSet <>();
240
187
Iterator <String > iterator1 = a .fieldNames ();
241
188
while (iterator1 .hasNext ()) {
242
189
final String next = iterator1 .next ();
@@ -251,7 +198,7 @@ private boolean objectEquals(final JsonNode a, final JsonNode b)
251
198
* Grab the key set from the second node, and see if both sets are the
252
199
* same. If not, objects are not equal, no need to check for children.
253
200
*/
254
- final Set <String > set = new HashSet <String >();
201
+ final Set <String > set = new HashSet <>();
255
202
Iterator <String > iterator2 = b .fieldNames ();
256
203
while (iterator2 .hasNext ()) {
257
204
final String next = iterator2 .next ();
0 commit comments