Joel,<br><br>Yep.  As a practical matter, it's likely to do so.  But consider the case of a 1-element array: there's no way to test the transitivity and anti-symmetry properties.  That's not the only case where the new implementation will fail to detect a violation, but it's a clear proof that it is, in general, impossible to do so.<br>
<br>   Josh<br><br>P.S.  I'm comfortable with the system property to select the legacy implementation.<br><br><div class="gmail_quote">On Tue, Jul 7, 2009 at 9:44 AM, Joel Kamentz <span dir="ltr"><<a href="mailto:Joel.Kamentz@sas.com">Joel.Kamentz@sas.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><lurking> You sort of said it yourself:  something along the lines of "if the natural comparison ordering violates comparable contract, the method _may_ throw IAE"?<br>

<font color="#888888"><br>
Joel<br>
</font><div><div></div><div class="h5"><br>
-----Original Message-----<br>
From: <a href="mailto:core-libs-dev-bounces@openjdk.java.net">core-libs-dev-bounces@openjdk.java.net</a> [mailto:<a href="mailto:core-libs-dev-bounces@openjdk.java.net">core-libs-dev-bounces@openjdk.java.net</a>] On Behalf Of Martin Buchholz<br>

Sent: Tuesday, July 07, 2009 12:34 PM<br>
To: Christopher Hegarty -Sun Microsystems Ireland<br>
Cc: core-libs-dev<br>
Subject: Re: timsort<br>
<br>
On Tue, Jul 7, 2009 at 08:57, Christopher Hegarty -Sun Microsystems<br>
Ireland<<a href="mailto:Christopher.Hegarty@sun.com">Christopher.Hegarty@sun.com</a>> wrote:<br>
> Martin Buchholz wrote:<br>
>><br>
>><br>
>> On Tue, Jul 7, 2009 at 07:35, Christopher Hegarty -Sun Microsystems<br>
>> Ireland<br>
>><br>
>><br>
>><br>
>>           2) With the addition of @throws IllegalArgumentException, this<br>
>>             condition cannot be met with the old merge sort right, i.e.<br>
>>        running<br>
>>             with -Djava.util.Arrays.useLegacyMergeSort=true. So we're<br>
>>        saying<br>
>>             that all bets are off when running with this property set?<br>
>><br>
>><br>
>>        No.  Please re-read the @throws IllegalArgumentException.<br>
>>        It is carefully worded to make no promises at all.  All bets are<br>
>>        off - period.<br>
>><br>
>>    OK great. But just to clarify, what exactly does "if the natural<br>
>>    order of the array elements is found to violate the Comparable<br>
>>    contract" mean?<br>
>><br>
>><br>
>> "natural order" is defined in the Comparable javadoc.<br>
><br>
> Sorry, I still don't see how this @throws can be a no-op. Is it not possible<br>
> to craft an array of Comparables that violates the Comparable contract and<br>
> therefore provoke the sort method to throw IAE?<br>
<br>
It is not feasible to check whether a particular implementation of Comparable<br>
violates the Comparable contract - there are too many ways the contract<br>
can be violated, and checking may be too expensive.<br>
<br>
+     * @throws IllegalArgumentException if the natural order of the array<br>
+     *         elements is found to violate the {@link Comparable} contract<br>
<br>
So the proposed spec does not and cannot require any exception to be thrown.<br>
What is proposed is *if* the implementation happens to check for violations<br>
and if it chooses to throw an exception, then IAE is the exception type<br>
that will be used.<br>
<br>
Perhaps someone could come up with clearer wording than "is found to violate"?<br>
<br>
Martin<br>
<br>
> -Chris.<br>
>><br>
>>  <a href="http://download.java.net/jdk7/docs/api/java/lang/Comparable.html" target="_blank">http://download.java.net/jdk7/docs/api/java/lang/Comparable.html</a><br>
>><br>
>> We could use @linkplain to the Comparable spec, as elsewhere in java.util.<br>
>><br>
>> Martin<br>
><br>
<br>
</div></div></blockquote></div><br>