[josm-dev] [PATCH 03/24] clean up OsmPrimitive.equals()

Dave Hansen dave at sr71.net
Sat May 3 20:15:04 BST 2008



---

 core-dave/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java |   21 ++++++----
 1 file changed, 13 insertions(+), 8 deletions(-)

diff -puN src/org/openstreetmap/josm/data/osm/OsmPrimitive.java~osmprim src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
--- core/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java~osmprim	2008-05-03 12:08:38.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	2008-05-03 12:08:38.000000000 -0700
@@ -154,15 +154,20 @@ abstract public class OsmPrimitive imple
  	}
 
 	/**
-	 * Equal, if the id (and class) is equal. If both ids are 0, use the super classes
-	 * equal instead.
-	 * 
-	 * An primitive is equal to its incomplete counter part.
+	 * Equal, if the id (and class) is equal.
+	 *
+	 * Note: an primitive is equal to its incomplete counterpart.
 	 */
 	@Override public final boolean equals(Object obj) {
-		if (obj == null || getClass() != obj.getClass() || id == 0 || ((OsmPrimitive)obj).id == 0)
-			return super.equals(obj);
-		return id == ((OsmPrimitive)obj).id;
+        // Unassigned id, only equal if exact same object
+        if (id == 0)
+                return obj == this;
+        if (obj == null)
+                return false;
+        // Never equal to different types
+        if (this.getClass() != obj.getClass())
+                return false;
+        return ((OsmPrimitive)obj).id == id;
 	}
 
 	/**
@@ -259,7 +264,7 @@ abstract public class OsmPrimitive imple
 			(semanticOnly || (visible == osm.visible)) &&
 			(keys == null ? osm.keys==null : keys.equals(osm.keys));
 	}
-	
+
 	public String getTimeStr() {
 		return timestamp == null ? null : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp);
 	}
_




More information about the josm-dev mailing list