src/share/classes/com/sun/tools/javac/code/Types.java

Print this page

        

@@ -1315,10 +1315,40 @@
         }
         return ts.isEmpty() && ss.isEmpty();
     }
     // </editor-fold>
 
+
+    private boolean checkUnbox(Type t, Type s) {
+        if (t == syms.numberType)
+            return s.isNumeric();
+        else
+            return isSubtype(unboxedType(t), s);
+    }
+    /**
+     * Can t and s be compared for equality?
+     *
+     */
+    public boolean isEqualityComparable(Type t, Type s, Warner warn) {
+        if (t.tag == ERROR)
+            return true;
+        boolean tPrimitive = t.isPrimitive();
+        boolean sPrimitive = s.isPrimitive();
+        if (tPrimitive && sPrimitive) {
+            return isSubtypeUnchecked(t, s, warn);
+        } else if (!tPrimitive && !sPrimitive)
+            return isCastable(t, s, warn);
+        else if (allowBoxing) {
+            if (tPrimitive) {
+                return checkUnbox(s, t);
+            } else {
+                return checkUnbox(t, s);
+            }
+        } else
+            return false;
+    }
+
     // <editor-fold defaultstate="collapsed" desc="isCastable">
     public boolean isCastable(Type t, Type s) {
         return isCastable(t, s, noWarnings);
     }