1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | package Torello.Java.ReadOnly; import java.util.Iterator; class ROHelperEquals { // Borrowed from java.util.AbstractList static boolean roListEq(ReadOnlyList<?> rol1, Object other) { if (rol1 == other) return true; if (! (other instanceof ReadOnlyList)) return false; ReadOnlyList<?> rol2 = (ReadOnlyList<?>) other; Iterator<?> e1 = rol1.iterator(); Iterator<?> e2 = rol2.iterator(); while (e1.hasNext() && e2.hasNext()) { Object o1 = e1.next(); Object o2 = e2.next(); if (o1 == null) { if (o2 != null) return false; } else if (! o1.equals(o2)) return false; } return !(e1.hasNext() || e2.hasNext()); } // Lifted from java.util.AbstractSet static boolean roSetEq(ReadOnlySet<?> ros1, Object other) { if (ros1 == other) return true; if (! (other instanceof ReadOnlySet)) return false; ReadOnlySet<?> ros2 = (ReadOnlySet<?>) other; if (ros1.size() != ros2.size()) return false; try { return ros1.containsAND(ros2); } catch (ClassCastException | NullPointerException unused) { return false; } } // Lifted from java.util.AbstractMap static boolean roMapEq(ReadOnlyMap<?, ?> rom1, Object other) { if (rom1 == other) return true; if (! (other instanceof ReadOnlyMap)) return false; ReadOnlyMap<?, ?> rom2 = (ReadOnlyMap<?, ?>) other; if (rom1.size() != rom2.size()) return false; try { for (ReadOnlyMap.Entry<?, ?> e : rom1.entrySet()) { Object key = e.getKey(); Object value = e.getValue(); if (value == null) { if (! rom2.containsKey(key)) return false; if (rom2.get(key) != null) return false; } else if (! value.equals(rom2.get(key))) return false; } } catch (ClassCastException | NullPointerException unused) { return false; } return true; } // Copied from Method above (ROHelper.roSetEq) - almost identical, but slightly less // "restrictive" // // This is not actually used anywhere amongst the "Main Classes". Instead there is JUST ONE // place in the "InterfaceBuilder" (Wrapper thing) where this is used // // In this one: toReadOnlyCollection(final java.util.Collection<X> c) static boolean roCollectionEq(Object objOther, ReadOnlyCollection<?> objThis) { if (objThis == objOther) return true; if (!(objOther instanceof ReadOnlyCollection)) return false; ReadOnlyCollection<?> roc = (ReadOnlyCollection<?>) objOther; if (roc.size() != objThis.size()) return false; try { return objThis.containsAND(roc); } catch (ClassCastException | NullPointerException unused) { return false; } } } |