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

anton nashatyrev anton.nashatyrev at oracle.com
Wed Sep 24 09:51:48 UTC 2014


Sergey, thanks for review!

Any other volunteer?

On 19.09.2014 17:27, Sergey Bylokhov wrote:
> Hi, Anton.
> Then the fix looks good, thanks for clarification.
>
> On 19.09.2014 17:25, anton nashatyrev wrote:
>> We don't treat the 'text/plain; class=java.lang.Object' as TextType 
>> (DataFlavor.isFlavorTextType()) since it has unknown representation 
>> class. Such flavors fall into 'other' category.
>>
>> On 19.09.2014 17:16, Sergey Bylokhov wrote:
>>> 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.
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>



More information about the awt-dev mailing list