<AWT Dev> [9] Review request for 8058473: "Comparison method violates its general contract" when using Clipboard

anton nashatyrev anton.nashatyrev at oracle.com
Fri Sep 19 11:58:31 UTC 2014


Hi Sergey,

On 18.09.2014 17:30, Sergey Bylokhov wrote:
>  - Can you try to change sort TimSort algorithm  to mergerSort. What 
> the order will be in this case ?(see JDK-8048887).

The mergeSort seems to be more relaxed regarding the Comparator 
correctness (BTW TimSort also doesn't fail each time - this depends on 
initial elements positions). The order of course is not correct with the 
incorrect comparator:


   MergeSort with current comparator                       Merge/TimSort 
with fixed Comparator
--------------------------------- -----------------------------------
   application/unknown; class=java.io.InputStream application/unknown; 
class=java.io.InputStream
   application/unknown; class=java.io.InputStream application/unknown; 
class=java.io.InputStream
   application/unknown; class=java.lang.Object application/unknown; 
class=java.lang.Object
   application/x-java-jvm-local-objectref; class=java.io.InputStream 
application/x-java-jvm-local-objectref; class=java.io.InputStream
   application/x-java-jvm-local-objectref; class=java.io.InputStream 
application/x-java-jvm-local-objectref; class=java.io.InputStream
   application/x-java-jvm-local-objectref; class=java.lang.Object 
application/x-java-jvm-local-objectref; class=java.lang.Object
   text/unknown; class=java.io.Serializable; charset=unicode            
text/html; class=java.io.Reader
   text/plain; class=java.io.Serializable; charset=unicode              
text/html; class=java.lang.String
   text/html; class=java.io.Serializable; charset=unicode               
text/html; class=java.io.InputStream; charset=unicode
   unknown/flavor; class=java.io.InputStream                            
text/html; class=java.io.InputStream; charset=unicode
   unknown/flavor; class=java.io.InputStream                            
text/html; class=java.io.InputStream
   text/html; class=java.io.Reader text/html; class=java.io.InputStream; 
charset=cp1251
   text/html; class=java.lang.String text/plain; class=java.io.Reader
   text/html; class=java.io.InputStream; charset=unicode                
text/plain; class=java.lang.String
   text/html; class=java.io.InputStream; charset=unicode                
text/plain; class=java.io.InputStream; charset=unicode
   text/html; class=java.io.InputStream text/plain; 
class=java.io.InputStream; charset=unicode
   text/html; class=java.io.InputStream; charset=cp1251                 
text/plain; class=java.io.InputStream
   text/plain; class=java.io.InputStream; charset=unicode               
text/plain; class=java.io.InputStream; charset=cp1251
   text/plain; class=java.io.InputStream; charset=unicode               
text/unknown; class=java.io.Reader
   text/plain; class=java.io.InputStream text/unknown; 
class=java.lang.String
   text/plain; class=java.io.InputStream; charset=cp1251                
text/unknown; class=java.io.InputStream; charset=unicode
   text/unknown; class=java.io.InputStream; charset=unicode             
text/unknown; class=java.io.InputStream; charset=unicode
   text/unknown; class=java.io.InputStream; charset=cp1251              
text/unknown; class=java.io.InputStream
   unknown/flavor; class=java.lang.Object                               
text/unknown; class=java.io.InputStream; charset=cp1251
   text/unknown; class=java.lang.Object; charset=unicode                
text/unknown; class=java.io.Serializable; charset=unicode
   text/unknown; class=java.io.Reader                                   
text/plain; class=java.io.Serializable; charset=unicode
   text/unknown; class=java.lang.String                                 
text/html; class=java.io.Serializable; charset=unicode
   text/unknown; class=java.io.InputStream; charset=unicode             
unknown/flavor; class=java.io.InputStream
   text/unknown; class=java.io.InputStream unknown/flavor; 
class=java.io.InputStream
   text/unknown; class=java.lang.Object unknown/flavor; 
class=java.lang.Object
   text/plain; class=java.lang.String text/unknown; 
class=java.lang.Object; charset=unicode
   text/plain; class=java.lang.Object; charset=unicode                  
text/unknown; class=java.lang.Object
   text/plain; class=java.lang.Object text/plain; 
class=java.lang.Object; charset=unicode
   text/plain; class=java.io.Reader text/plain; class=java.lang.Object
   text/html; class=java.lang.Object; charset=unicode                   
text/html; class=java.lang.Object; charset=unicode
   text/html; class=java.lang.Object text/html; class=java.lang.Object


>  - Can you run all related regression and jck tests.

Executed all 'datatransfer' regression and JCK tests - no regressions 
detected.

> Thanks.
>
> On 18.09.2014 17:04, anton nashatyrev wrote:
>> Hello,
>>     could you please review the following fix:
>>
>> fix: http://cr.openjdk.java.net/~anashaty/8058473/9/webrev.00/ 
>> <http://cr.openjdk.java.net/%7Eanashaty/8058473/9/webrev.00/>
>> bug: https://bugs.openjdk.java.net/browse/JDK-8058473
>>
>>     Problem: DataFlavorComparator violates Comparator contract.
>>
>>     Fix: make the DataFlavorComparator transitive conformant (please 
>> see the bug comment for details)
>>
>> Thanks!
>> Anton.
>
>



More information about the awt-dev mailing list