Skip to content

Commit b3122b4

Browse files
committed
Ast nodes shouldn't override equals/hashCode
Node are are only equal by reference. To compare Nodes use AstComparator
1 parent 0e3c7c9 commit b3122b4

26 files changed

+107
-231
lines changed

src/main/java/graphql/language/Argument.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,18 @@ public List<Node> getChildren() {
3838
return result;
3939
}
4040

41+
4142
@Override
42-
public boolean equals(Object o) {
43+
public boolean isEqualTo(Node o) {
4344
if (this == o) return true;
4445
if (o == null || getClass() != o.getClass()) return false;
4546

4647
Argument argument = (Argument) o;
4748

48-
if (name != null ? !name.equals(argument.name) : argument.name != null) return false;
49-
return !(value != null ? !value.equals(argument.value) : argument.value != null);
49+
return !(name != null ? !name.equals(argument.name) : argument.name != null);
5050

5151
}
5252

53-
@Override
54-
public int hashCode() {
55-
int result = name != null ? name.hashCode() : 0;
56-
result = 31 * result + (value != null ? value.hashCode() : 0);
57-
return result;
58-
}
5953

6054
@Override
6155
public String toString() {

src/main/java/graphql/language/ArrayValue.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,11 @@ public List<Node> getChildren() {
3030
}
3131

3232
@Override
33-
public boolean equals(Object o) {
33+
public boolean isEqualTo(Node o) {
3434
if (this == o) return true;
3535
if (o == null || getClass() != o.getClass()) return false;
3636

37-
ArrayValue that = (ArrayValue) o;
38-
39-
return !(values != null ? !values.equals(that.values) : that.values != null);
40-
41-
}
42-
43-
@Override
44-
public int hashCode() {
45-
return values != null ? values.hashCode() : 0;
37+
return true;
4638
}
4739

4840
@Override
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package graphql.language;
2+
3+
4+
import java.util.List;
5+
6+
public class AstComparator {
7+
8+
9+
public boolean isEqual(Node node1, Node node2) {
10+
if (!node1.isEqualTo(node2)) return false;
11+
List<Node> childs1 = node1.getChildren();
12+
List<Node> childs2 = node2.getChildren();
13+
if (childs1.size() != childs2.size()) return false;
14+
for (int i = 0; i < childs1.size(); i++) {
15+
if (!isEqual(childs1.get(i), childs2.get(i))) return false;
16+
}
17+
return true;
18+
}
19+
}

src/main/java/graphql/language/BooleanValue.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public List<Node> getChildren() {
2727
}
2828

2929
@Override
30-
public boolean equals(Object o) {
30+
public boolean isEqualTo(Node o) {
3131
if (this == o) return true;
3232
if (o == null || getClass() != o.getClass()) return false;
3333

@@ -37,11 +37,6 @@ public boolean equals(Object o) {
3737

3838
}
3939

40-
@Override
41-
public int hashCode() {
42-
return (value ? 1 : 0);
43-
}
44-
4540
@Override
4641
public String toString() {
4742
return "BooleanValue{" +

src/main/java/graphql/language/Directive.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,16 @@ public List<Node> getChildren() {
4040
}
4141

4242
@Override
43-
public boolean equals(Object o) {
43+
public boolean isEqualTo(Node o) {
4444
if (this == o) return true;
4545
if (o == null || getClass() != o.getClass()) return false;
4646

4747
Directive directive = (Directive) o;
4848

49-
if (name != null ? !name.equals(directive.name) : directive.name != null) return false;
50-
return !(arguments != null ? !arguments.equals(directive.arguments) : directive.arguments != null);
49+
return !(name != null ? !name.equals(directive.name) : directive.name != null);
5150

5251
}
5352

54-
@Override
55-
public int hashCode() {
56-
int result = name != null ? name.hashCode() : 0;
57-
result = 31 * result + (arguments != null ? arguments.hashCode() : 0);
58-
return result;
59-
}
60-
6153
@Override
6254
public String toString() {
6355
return "Directive{" +

src/main/java/graphql/language/Document.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,15 @@ public List<Node> getChildren() {
3232

3333

3434
@Override
35-
public boolean equals(Object o) {
35+
public boolean isEqualTo(Node o) {
3636
if (this == o) return true;
3737
if (o == null || getClass() != o.getClass()) return false;
3838

39-
Document document = (Document) o;
4039

41-
return !(definitions != null ? !definitions.equals(document.definitions) : document.definitions != null);
40+
return true;
4241

4342
}
4443

45-
@Override
46-
public int hashCode() {
47-
return definitions != null ? definitions.hashCode() : 0;
48-
}
4944

5045
@Override
5146
public String toString() {

src/main/java/graphql/language/EnumValue.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public List<Node> getChildren() {
2727
}
2828

2929
@Override
30-
public boolean equals(Object o) {
30+
public boolean isEqualTo(Node o) {
3131
if (this == o) return true;
3232
if (o == null || getClass() != o.getClass()) return false;
3333

@@ -37,10 +37,6 @@ public boolean equals(Object o) {
3737

3838
}
3939

40-
@Override
41-
public int hashCode() {
42-
return name != null ? name.hashCode() : 0;
43-
}
4440

4541
@Override
4642
public String toString() {

src/main/java/graphql/language/Field.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.ArrayList;
55
import java.util.List;
66

7-
public class Field extends AbstractNode implements Selection {
7+
public class Field extends AbstractNode implements Selection {
88

99
private String name;
1010
private String alias;
@@ -96,29 +96,17 @@ public void setSelectionSet(SelectionSet selectionSet) {
9696
}
9797

9898
@Override
99-
public boolean equals(Object o) {
99+
public boolean isEqualTo(Node o) {
100100
if (this == o) return true;
101101
if (o == null || getClass() != o.getClass()) return false;
102102

103103
Field field = (Field) o;
104104

105105
if (name != null ? !name.equals(field.name) : field.name != null) return false;
106-
if (alias != null ? !alias.equals(field.alias) : field.alias != null) return false;
107-
if (arguments != null ? !arguments.equals(field.arguments) : field.arguments != null) return false;
108-
if (directives != null ? !directives.equals(field.directives) : field.directives != null) return false;
109-
return !(selectionSet != null ? !selectionSet.equals(field.selectionSet) : field.selectionSet != null);
106+
return !(alias != null ? !alias.equals(field.alias) : field.alias != null);
110107

111108
}
112109

113-
@Override
114-
public int hashCode() {
115-
int result = name != null ? name.hashCode() : 0;
116-
result = 31 * result + (alias != null ? alias.hashCode() : 0);
117-
result = 31 * result + (arguments != null ? arguments.hashCode() : 0);
118-
result = 31 * result + (directives != null ? directives.hashCode() : 0);
119-
result = 31 * result + (selectionSet != null ? selectionSet.hashCode() : 0);
120-
return result;
121-
}
122110

123111
@Override
124112
public String toString() {

src/main/java/graphql/language/FloatValue.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.ArrayList;
66
import java.util.List;
77

8-
public class FloatValue extends AbstractNode implements Value{
8+
public class FloatValue extends AbstractNode implements Value {
99

1010
private BigDecimal value;
1111

@@ -35,7 +35,7 @@ public String toString() {
3535
}
3636

3737
@Override
38-
public boolean equals(Object o) {
38+
public boolean isEqualTo(Node o) {
3939
if (this == o) return true;
4040
if (o == null || getClass() != o.getClass()) return false;
4141

@@ -45,8 +45,4 @@ public boolean equals(Object o) {
4545

4646
}
4747

48-
@Override
49-
public int hashCode() {
50-
return value != null ? value.hashCode() : 0;
51-
}
5248
}

src/main/java/graphql/language/FragmentDefinition.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import java.util.ArrayList;
55
import java.util.List;
66

7-
public class FragmentDefinition extends AbstractNode implements Definition {
7+
public class FragmentDefinition extends AbstractNode implements Definition {
8+
89
private String name;
910
private TypeName typeCondition;
1011
private List<Directive> directives = new ArrayList<>();
@@ -68,28 +69,16 @@ public List<Node> getChildren() {
6869
}
6970

7071
@Override
71-
public boolean equals(Object o) {
72+
public boolean isEqualTo(Node o) {
7273
if (this == o) return true;
7374
if (o == null || getClass() != o.getClass()) return false;
7475

7576
FragmentDefinition that = (FragmentDefinition) o;
7677

77-
if (name != null ? !name.equals(that.name) : that.name != null) return false;
78-
if (typeCondition != null ? !typeCondition.equals(that.typeCondition) : that.typeCondition != null)
79-
return false;
80-
if (directives != null ? !directives.equals(that.directives) : that.directives != null) return false;
81-
return !(selectionSet != null ? !selectionSet.equals(that.selectionSet) : that.selectionSet != null);
78+
return !(name != null ? !name.equals(that.name) : that.name != null);
8279

8380
}
8481

85-
@Override
86-
public int hashCode() {
87-
int result = name != null ? name.hashCode() : 0;
88-
result = 31 * result + (typeCondition != null ? typeCondition.hashCode() : 0);
89-
result = 31 * result + (directives != null ? directives.hashCode() : 0);
90-
result = 31 * result + (selectionSet != null ? selectionSet.hashCode() : 0);
91-
return result;
92-
}
9382

9483
@Override
9584
public String toString() {

0 commit comments

Comments
 (0)