killbill-memoizeit

entitlement: fix repair tests with jdk7 The behavior of TreeMap

2/15/2013 9:43:40 PM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
index 2d1b530..45a9831 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
@@ -93,6 +93,14 @@ public class RepairEntitlementDao implements EntitlementDao, RepairEntitlementLi
             this.events = new TreeSet<EntitlementEventWithOrderingId>(new Comparator<EntitlementEventWithOrderingId>() {
                 @Override
                 public int compare(final EntitlementEventWithOrderingId o1, final EntitlementEventWithOrderingId o2) {
+                    // Work around jdk7 change: compare(o1, o1) is now invoked when inserting the first element
+                    // See:
+                    // - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147
+                    // - http://hg.openjdk.java.net/jdk7/tl/jdk/rev/bf37edb38fbb
+                    if (o1 == o2) {
+                        return 0;
+                    }
+
                     final int result = o1.getEvent().getEffectiveDate().compareTo(o2.getEvent().getEffectiveDate());
                     if (result == 0) {
                         if (o1.getOrderingId() < o2.getOrderingId()) {