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);
}