Avoid use of Objects.hash when there's only 1 params

- directly call #hashCode() when hashed Object seems non-null
- replace with Objects.hashCode(Object) when Nullable
- replace with Long.hashCode(long), etc. when primitive

Change-Id: I08c24ebbe94cf4162d1491209a14baf953163e41
diff --git a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
index 206a34c..dfa150e 100644
--- a/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
+++ b/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java
@@ -30,8 +30,8 @@
  */
 public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> {
 
-    private Path<V, E> primary, secondary;
-    boolean primaryActive = true;
+    private final Path<V, E> primary, secondary;
+    private boolean primaryActive = true;
 
     /**
      * Creates a disjoint path pair from two paths.
@@ -88,7 +88,7 @@
      * @return boolean representing whether it has backup
      */
     public boolean hasBackup() {
-        return secondary != null && secondary.edges() != null;
+        return secondary != null;
     }
 
     @Override
@@ -103,7 +103,9 @@
 
     @Override
     public int hashCode() {
-        return hasBackup() ? Objects.hash(primary) + Objects.hash(secondary) :
+        // Note: DisjointPathPair with primary and secondary swapped
+        // must result in same hashCode
+        return hasBackup() ? primary.hashCode() + secondary.hashCode() :
                 Objects.hash(primary);
     }