<Beans Dev> [9] Review Request: 8156043 Unstable behavior of PropertyDescriptor's getWriteMethod() in case of overloaded setters
Semyon Sadetsky
semyon.sadetsky at oracle.com
Thu May 26 06:51:24 UTC 2016
On 5/25/2016 11:22 PM, Sergey Bylokhov wrote:
> On 25.05.16 22:54, Semyon Sadetsky wrote:
>> Yes, I mistook. It looks like the result is wrong when there is an
>> overloaded method with lexicographicaly smaller parameter type name.
>
> Only if the property have two possibilities of its type, we select the
> first one after sorting. Before the current fix it was a random behavior.
Property may be randomly or predictably selected using some algo. But
the corresponding PropertyDescriptor should contain the correct getter
and setter.
We have :
SUPER.setFoo(Long)
SUPER.getFoo()
SUB.setFoo(Long)
SUB.setFoo(Integer)
How many Foos may be combined here :
1. Long Foo : SUPER.getFoo() / SUB.setFoo(Long)
2. Integer Foo: null / SUB.setFoo(Integer)
In my opinion, the method may return any of this two (also a secondary
rank could be used), but not a mixture of them in any circumstances.
--Semyon
>>>> In my understanding, if I override the setter I should get the
>>>> over-ridden method for the top level class introspection. Otherwise
>>>> I do
>>>> not understand for what such introspector can be used:
>>>>
>>>> I have some object which property I want to set, but using the
>>>> introspector for that I'm calling a wrong method which breaks the
>>>> inheritance and so corrupts the object state.
>>>>
>>>> And moreover, if I reverse the situation and override the getter in
>>>> Sub
>>>> instead of setter :
>>>>
>>>> class Super {
>>>> public void setFoo(Long i) {}
>>>> public Long getFoo() {return null;}
>>>> }
>>>> class Sub extends Super {
>>>> public Long getFoo() {return null;}
>>>> }
>>>>
>>>> the introspector returns the over-ridden getter method for the
>>>> property :
>>>>
>>>> type: class java.lang.Long
>>>> getter: public java.lang.Long Sub.getFoo()
>>>> setter: public void Super.setFoo(java.lang.Long)
>>>>
>>>> This looks inconsistent.
>>>>
>>>> --Semyon
>>>>>
>>>>>
>>>>>> On 5/25/2016 2:14 PM, Sergey Bylokhov wrote:
>>>>>>> On 25.05.16 11:38, Semyon Sadetsky wrote:
>>>>>>>>> In this case the type of foo property will be Enum, before and
>>>>>>>>> after
>>>>>>>>> the fix. But the write method will be found only if this
>>>>>>>>> method is
>>>>>>>>> added to Sub, in other case the write method is recognized only
>>>>>>>>> if we
>>>>>>>>> remove all duplicates of set(xxx). Not sure is it intended
>>>>>>>>> behavior in
>>>>>>>>> jdk9 to skip such writers or not. I will file CR for that.
>>>>>>>> That maybe an another issue.
>>>>>>>
>>>>>>> I dig to the history and found that it was done intentionally when
>>>>>>> JavaBean jep was implemented. but I filed
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8157828 for additional
>>>>>>> investigation.
>>>>>>>
>>>>>>>> But the current fix need to be checked by
>>>>>>>> the scenario when there are several getters (over-ridden with the
>>>>>>>> return
>>>>>>>> type substitutability) in addition to the setters.
>>>>>>>
>>>>>>> Tescase is updated, the case: getE + multiple setE is added:
>>>>>>> http://cr.openjdk.java.net/~serb/8156043/webrev.01/
>>>>>>>
>>>>>>>>>> On 5/17/2016 3:20 PM, Sergey Bylokhov wrote:
>>>>>>>>>>> Hello.
>>>>>>>>>>> Please review the fix for jdk9.
>>>>>>>>>>>
>>>>>>>>>>> We have a number of bugs which state that our JavaBeans
>>>>>>>>>>> randomly
>>>>>>>>>>> does
>>>>>>>>>>> not work, examples: JDK-6807471[1] , JDK-6788525[2], the
>>>>>>>>>>> reason is
>>>>>>>>>>> that the order of methods from Class.getMethods() is not
>>>>>>>>>>> specified.
>>>>>>>>>>> So I propose to fix this bug totally and sort the methods in
>>>>>>>>>>> some
>>>>>>>>>>> order. Note that the resulted list is cached, and we sort the
>>>>>>>>>>> list
>>>>>>>>>>> only the once.
>>>>>>>>>>> The code partly was copied from
>>>>>>>>>>> com.sun.jmx.mbeanserver.MethodOrder
>>>>>>>>>>> [3], but the parameters check and the order for return values
>>>>>>>>>>> were
>>>>>>>>>>> changed. After this fix our bugs(if any) can be easily
>>>>>>>>>>> reproduced.
>>>>>>>>>>>
>>>>>>>>>>> [1] https://bugs.openjdk.java.net/browse/JDK-6807471
>>>>>>>>>>> [2] https://bugs.openjdk.java.net/browse/JDK-6788525
>>>>>>>>>>> [3]
>>>>>>>>>>> http://hg.openjdk.java.net/jdk9/client/jdk/file/fb38b0925915/src/java.management/share/classes/com/sun/jmx/mbeanserver/MBeanAnalyzer.java
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8156043
>>>>>>>>>>> Webrev can be found at:
>>>>>>>>>>> http://cr.openjdk.java.net/~serb/8156043/webrev.00
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>
More information about the beans-dev
mailing list