Reflection usage in LazyPainter class
Alexander Scherbatiy
alexander.scherbatiy at bell-sw.com
Wed Sep 15 08:21:39 UTC 2021
Hello,
LazyPainter class from Defaults.template uses reflection to create a
Painter classes [1].
There are some fixes which replace LazyValue with lambdas [2], [3]:
8039750: KSS: Replace MetalLazyValue with lambda
8035313: Change SwingLazyValue usage to lambda
Would it be useful to get rid of reflection in LazyPainter as well?
It looks like LazyPainter can't be directly converted to Lambda.
It stores PaintContext during createValue(...) calls.
And it can use a custom class loader which it gets from UIDefaults by
"ClassLoader" key.
May be LazyPainter can check if a class loader from UIDefaults is null
and create a Painter class directly
in this case just mapping a class string to corresponding object
creation code like:
private static AbstractRegionPainter createPainter(
String className, AbstractRegionPainter.PaintContext ctx,
int which) {
switch (className) {
case "javax.swing.plaf.nimbus.ScrollPanePainter":
return new
javax.swing.plaf.nimbus.ScrollPanePainter(ctx, which);
case "javax.swing.plaf.nimbus.InternalFramePainter":
return new
javax.swing.plaf.nimbus.InternalFramePainter(ctx, which);
...
}
}
[1]
https://github.com/openjdk/jdk/blob/febcc72a549e973de4649503fc686fc520e3b3cd/src/java.desktop/share/classes/javax/swing/plaf/nimbus/Defaults.template#L414
[2]
https://github.com/openjdk/jdk/commit/717bcde5f3596b695100de468c352617625c17cc
[3]
https://github.com/openjdk/jdk/commit/c8ad756ad83c7af296ce2b621be12ed7a9d23f6e
Thanks,
Alexander.
More information about the client-libs-dev
mailing list