Commits

Anonymous committed 147e5e1

QUARTZ-625 : NullPointer in org.quartz.utils.Pair.hashCode() method

git-svn-id: http://svn.opensymphony.com/svn/quartz/trunk@74769f7d36a-ea1c-0410-88ea-9fd03e4c9665

Comments (0)

Files changed (1)

src/java/org/quartz/utils/Pair.java

-/* 
- * Copyright 2004-2005 OpenSymphony 
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
- * use this file except in compliance with the License. You may obtain a copy 
- * of the License at 
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0 
- *   
- * Unless required by applicable law or agreed to in writing, software 
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
- * License for the specific language governing permissions and limitations 
+/*
+ * Copyright 2004-2005 OpenSymphony
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
  * under the License.
- * 
+ *
  */
 
 /*
  * <p>
  * Utility class for storing two pieces of information together.
  * </p>
- * 
+ *
  * @author <a href="mailto:jeff@binaryfeed.org">Jeffrey Wescott</a>
  */
 public class Pair {
 
     /*
      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-     * 
+     *
      * Data members.
-     * 
+     *
      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      */
 
 
     private Object second;
 
+
+    public Pair()
+    {}
+
+    public Pair(Object first, Object second)
+    {
+        setFirst(first);
+        setSecond(second);
+    }
+
     /*
      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-     * 
+     *
      * Interface.
-     * 
+     *
      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      */
 
      * <p>
      * Get the first object in the pair.
      * </p>
-     * 
+     *
      * @return the first object
      */
     public final Object getFirst() {
      * <p>
      * Set the value of the first object in the pair.
      * </p>
-     * 
+     *
      * @param first
      *          the first object
      */
      * <p>
      * Get the second object in the pair.
      * </p>
-     * 
+     *
      * @return the second object
      */
     public final Object getSecond() {
      * <p>
      * Set the second object in the pair.
      * </p>
-     * 
+     *
      * @param second
      *          the second object
      */
      * <p>
      * Test equality of this object with that.
      * </p>
-     * 
+     *
      * @param that
      *          object to compare
      * @return true if objects are equal, false otherwise
         } else {
             try {
                 Pair other = (Pair) that;
-                return (this.first.equals(other.first) && this.second
+                if(first == null && second == null)
+                    return (other.first == null && other.second == null)
+                if(first != null && second != null)
+                    return (this.first.equals(other.first) && this.second
                         .equals(other.second));
+                if(first != null)
+                    return this.first.equals(other.first);
+                if(second != null)
+                    return this.second.equals(other.second);
+
             } catch (ClassCastException e) {
                 return false;
             }
         }
     }
-    
+
     public int hashCode() {
-        return (17 * first.hashCode()) + second.hashCode();
+        if(first != null && second != null)
+            return (first.hashCode() ^ second.hashCode());
+        if(first != null)
+            return (17 ^ first.hashCode());
+        if(second != null)
+            return (17 ^ second.hashCode());
+        return super.hashCode();
     }
 }