Skip to content

Commit 61fb559

Browse files
authored
Override equals() and hashCode() in BannedElement (#1510)
* add equals and hashcode to BannedElement * address review * address review * address review
1 parent 0b927cd commit 61fb559

2 files changed

Lines changed: 75 additions & 6 deletions

File tree

  • plugins
    • com.google.cloud.tools.eclipse.appengine.validation.test/src/com/google/cloud/tools/eclipse/appengine/validation
    • com.google.cloud.tools.eclipse.appengine.validation/src/com/google/cloud/tools/eclipse/appengine/validation

plugins/com.google.cloud.tools.eclipse.appengine.validation.test/src/com/google/cloud/tools/eclipse/appengine/validation/BannedElementTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
package com.google.cloud.tools.eclipse.appengine.validation;
1818

19+
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertFalse;
21+
import static org.junit.Assert.assertTrue;
22+
1923
import org.junit.Test;
2024

2125
public class BannedElementTest {
@@ -29,6 +33,45 @@ public void testBannedElementConstructor_nullElementName() {
2933
public void testBannedElementConstructor_nullLocation() {
3034
new BannedElement("test", "org.eclipse.core.resources.problemmarker", 1, null, 0);
3135
}
36+
37+
@Test
38+
public void testEquals() {
39+
BannedElement element1 = new BannedElement("message");
40+
BannedElement element1_copy = element1;
41+
assertTrue(element1.equals(element1_copy));
42+
43+
BannedElement element2 = new BannedElement("message");
44+
assertTrue(element1.equals(element2));
45+
assertTrue(element2.equals(element1));
46+
47+
BannedElement element3 =
48+
new BannedElement("message", "markerId_1", 13, new DocumentLocation(1, 1), 20);
49+
BannedElement element4 =
50+
new BannedElement("message", "markerId_2", 13, new DocumentLocation(1, 1), 20);
51+
assertFalse(element3.equals(element4));
52+
53+
BannedElement element5 =
54+
new BannedElement("message", "markerId", 13, new DocumentLocation(1, 1), 20);
55+
BannedElement element6 =
56+
new BannedElement("message", "markerId", 13, new DocumentLocation(1, 15), 20);
57+
assertFalse(element5.equals(element6));
58+
59+
BannedElement element7 =
60+
new BannedElement("message_1", "markerId", 13, new DocumentLocation(1, 1), 20);
61+
BannedElement element8 =
62+
new BannedElement("message_2", "markerId", 13, new DocumentLocation(1, 1), 20);
63+
assertFalse(element7.equals(element8));
64+
65+
assertFalse(element1.equals(null));
66+
assertFalse(element1.equals("test"));
67+
}
68+
69+
@Test
70+
public void testHashCode() {
71+
BannedElement element1 = new BannedElement("message");
72+
BannedElement element2 = new BannedElement("message");
73+
assertEquals(element1.hashCode(), element2.hashCode());
74+
}
3275

3376
}
3477

plugins/com.google.cloud.tools.eclipse.appengine.validation/src/com/google/cloud/tools/eclipse/appengine/validation/BannedElement.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
package com.google.cloud.tools.eclipse.appengine.validation;
1818

19+
import java.util.Objects;
20+
1921
import com.google.common.base.Preconditions;
2022

2123
/**
2224
* A blacklisted element that will receive a problem marker.
2325
*/
24-
public class BannedElement {
26+
class BannedElement {
2527

2628
private final String message;
2729
private final DocumentLocation start;
@@ -33,7 +35,7 @@ public class BannedElement {
3335
* @param length the length of the marker underline. Length == 0 results in a
3436
* marker in the vertical ruler and no underline
3537
*/
36-
public BannedElement(String message, String markerId, int severity,
38+
BannedElement(String message, String markerId, int severity,
3739
DocumentLocation start, int length) {
3840
Preconditions.checkNotNull(message, "message is null");
3941
Preconditions.checkNotNull(markerId, "markerId is null");
@@ -46,20 +48,20 @@ public BannedElement(String message, String markerId, int severity,
4648
this.severity = severity;
4749
}
4850

49-
public BannedElement(String message) {
51+
BannedElement(String message) {
5052
this(message, "org.eclipse.core.resources.problemmarker",
5153
1, new DocumentLocation(0, 0), 0);
5254
}
5355

54-
public String getMessage() {
56+
String getMessage() {
5557
return message;
5658
}
5759

58-
public DocumentLocation getStart() {
60+
DocumentLocation getStart() {
5961
return start;
6062
}
6163

62-
public int getLength() {
64+
int getLength() {
6365
return length;
6466
}
6567

@@ -70,5 +72,29 @@ String getMarkerId() {
7072
int getSeverity() {
7173
return severity;
7274
}
75+
76+
/**
77+
* BannedElements are equal if they represent the same marker type (marker ID),
78+
* have the same location within a document, and will display the same message.
79+
*/
80+
@Override
81+
public boolean equals(Object object) {
82+
if (object == this) {
83+
return true;
84+
}
85+
if (object == null || !(object instanceof BannedElement)) {
86+
return false;
87+
}
88+
BannedElement element = (BannedElement) object;
89+
return Objects.equals(markerId, element.getMarkerId()) &&
90+
Objects.equals(message, element.getMessage()) &&
91+
start.getLineNumber() == element.getStart().getLineNumber() &&
92+
start.getColumnNumber() == element.getStart().getColumnNumber();
93+
}
94+
95+
@Override
96+
public int hashCode() {
97+
return Objects.hash(markerId, message, start.getLineNumber(), start.getColumnNumber());
98+
}
7399

74100
}

0 commit comments

Comments
 (0)