@SuppressWarnings("cast")
    private int compareEqualPosition(Declaration d1, Declaration d2) {
      assert d1.getPosition() == d2.getPosition();

      DeclPartialOrder dpo1 = new DeclPartialOrder();
      DeclPartialOrder dpo2 = new DeclPartialOrder();

      d1.accept(dpo1);
      d2.accept(dpo2);

      int difference = dpo1.getValue() - dpo2.getValue();
      if (difference != 0) return difference;
      else {
        int result = d1.getSimpleName().compareTo(d2.getSimpleName());
        if (result != 0) return result;
        return (int)
            (Long.signum((long) System.identityHashCode(d1) - (long) System.identityHashCode(d2)));
      }
    }