int (DefaultMutableTreeNode n1, DefaultMutableTreeNode n2) { ClassIndex classIdx1 = getClassIndex(n1); ClassIndex classIdx2 = getClassIndex(n2); if (classIdx1 != classIdx2) return classIdx1.compareTo(classIdx2); if (classIdx1 == ClassIndex.GROUP) { int c = ((GroupNode)n1).compareTo((GroupNode)n2); if (c != 0) return c; } else if (classIdx1 == ClassIndex.USAGE) { int c = ((UsageNode)n1).compareTo((UsageNode)n2); if (c != 0) return c; } // return 0 only for the same Usages inside // (e.g. when tried to insert the UsageNode for the same Usage when interrupted by write action and resumed) Object u1 = n1.getUserObject(); Object u2 = n2.getUserObject(); if (Comparing.equal(u1, u2)) return 0; return System.identityHashCode(u1) - System.identityHashCode(u2); }