On Wed, 22 Oct 2025 22:02:42 GMT, Harshitha Onkar <[email protected]> wrote:
> `findComponent(final Container container, final Predicate<Component>
> predicate)` is a useful utility method and thus added to`
> javax/swing/regtesthelpers/Util.java` instead of having redundant code in
> tests. It can be used to find a component by label name.
>
> PS: Existing `Util.findSubComponent()` finds component by class name but
> `findComponent()` can be used to search for a particular component by label
> name/title when there are multiple subcomponents of same type by applying a
> predicate logic.
Changes requested by aivanov (Reviewer).
test/jdk/javax/swing/JFileChooser/FileSizeCheck.java line 240:
> 238: private static JTable findTable(final Container container) {
> 239: Component result = Util.findComponent(container,
> 240: c -> c instanceof JTable);
Suggestion:
Component result = Util.findComponent(container,
c -> c instanceof JTable);
I'm sure the second parameter was aligned to the opening parenthesis, it needs
to be indented after you added 5 chars to the method call.
test/jdk/javax/swing/JFileChooser/bug4759934.java line 81:
> 79: }
> 80: Point cancelLoc = Util.getCenterPoint(cancel);
> 81: robot.mouseMove(cancelLoc.x, cancelLoc.y);
I am not sure this is the way to go… However,
[JDK-4759934](https://bugs.openjdk.org/browse/JDK-4759934) doesn't seem to
depend on how the dialog is closed by pressing <kbd>Esc</kbd> or by clicking
the **Cancel** button. If it's the case, click the button programmatically by
calling `cancel.doClick()`, it's even less error-prone than clicking the button
with a robot by sending mouse click.
test/jdk/javax/swing/JFileChooser/bug4759934.java line 133:
> 131: Component result = Util.findComponent(container,
> 132: c -> c instanceof JButton button
> 133: &&
> "Cancel".equals(button.getText()));
Suggestion:
Component result = Util.findComponent(container,
c -> c instanceof JButton button
&&
"Cancel".equals(button.getText()));
Aligning.
test/jdk/javax/swing/regtesthelpers/Util.java line 1:
> 1: /*
> Existing `Util.findSubComponent()` finds component by class name
To eliminate code duplication, the existing `findSubComponent` should use the
new `findComponent` which is more flexible. Just pass
`parent.getClass().getName().contains(className)` as the predicate to the new
method.
test/jdk/javax/swing/regtesthelpers/Util.java line 153:
> 151: * Find a component based on predicate.
> 152: * Always run this method on the EDT thread
> 153: */
The documentation could then explain the parameters, don't you think?
> Always run this method on the EDT thread
The utility method could ensure this automatically. This *public* method will
be a wrapper around a *private* implementation, the implementation will run
directly or on EDT using `invokeOnEDT` which already exists in the `Util` class.
test/jdk/javax/swing/regtesthelpers/Util.java line 155:
> 153: */
> 154: public static Component findComponent(final Container container,
> 155: final Predicate<Component>
> predicate) {
Suggestion:
public static Component findComponent(final Container container,
final Predicate<Component> predicate)
{
-------------
PR Review: https://git.openjdk.org/jdk/pull/27944#pullrequestreview-3370023732
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455199133
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455231458
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455208680
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455242012
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455187844
PR Review Comment: https://git.openjdk.org/jdk/pull/27944#discussion_r2455188360