<Beans Dev> [11] Review Request: 8196373 Introspector does not see overridden generic setter method
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Mon Apr 30 16:02:17 UTC 2018
Hello.
Please review the fix for jdk11.
Bug: https://bugs.openjdk.java.net/browse/JDK-8196373
Webrev: http://cr.openjdk.java.net/~serb/8196373/webrev.00
One more places which depends from the order of methods is fixed.
The bug is occurred in the next code example:
===============================
static class Parent<T> {
public final T getValue()
protected void setValue(T value)
}
static class ChildS extends Parent<String> {
@Override
public void setValue(String value)
}
===============================
The problem is that javac will generate the "synthetic bridge" method
setValue(Ljava/lang/Object) in the ChildS class to support such
generics. This method may be placed before/after the real
setValue(String value) method.
PropertyInfo class which generate the property according set/get methods
for one particular class depends on the order of these methods, it does
not update the type of the property when the preferred "write" method is
found. This is why the bug is reproduced when generic type is String(the
"String" method is placed after setValue(Object)) and is not reproduced
when the type is ArithmeticException(the "ArithmeticException" method is
placed before setValue(Object)).
Three tests were added:
- OverriddenGenericSetter.java - to check an example above and prove
that the bug is fixed.
- OverriddenGenericGetter.java - to check that the similar case for
"getter" works properly
- OverloadedSetter.java - to check some unspecified but existed
behavior, it can be used to check our implementation for accidental changes
Any suggestions are welcome.
--
Best regards, Sergey.
More information about the beans-dev
mailing list