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

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Fri Sep 19 13:16:57 UTC 2014


Hi, Anton.
Why "unknown/flavor" is before "text/plain" in the fixed version?

text/plain; class=java.io.Serializable; charset=unicode
text/html; class=java.io.Serializable; charset=unicode
unknown/flavor; class=java.io.InputStream
unknown/flavor; class=java.lang.Object
text/unknown; class=java.lang.Object; charset=unicode
text/unknown; class=java.lang.Object
text/plain; class=java.lang.Object; charset=unicode
text/plain; class=java.lang.Object



On 19.09.2014 15:58, anton nashatyrev wrote:
> 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.
>>
>>
>


-- 
Best regards, Sergey.



More information about the awt-dev mailing list