On Tue, 3 Sep 2024 19:09:15 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

> Public APIs for focus traversal and the focus traversal policy:
> 
> https://github.com/andy-goryachev-oracle/Test/blob/main/doc/FocusTraversal/FocusTraversal.md
> 
> This work is loosely based on the patch
> https://cr.openjdk.org/~jgiles/8061673/

I did a first pass of the public API and left a few comments. I'll need a 
second pass and a more careful look at the docs.

modules/javafx.graphics/src/main/java/javafx/scene/Parent.java line 850:

> 848:     /**
> 849:      * The {@link TraversalPolicy} to be used by this Parent to provide 
> assistance to the
> 850:      * JavaFX focus traversal subsystem.

What assistance does this policy provide? When is it used?

modules/javafx.graphics/src/main/java/javafx/scene/Parent.java line 853:

> 851:      *
> 852:      * @defaultValue null
> 853:      * @since 999 TODO

Don't forget to update this (probably to jfx24, since there is plenty of time 
to get this in).

modules/javafx.graphics/src/main/java/javafx/scene/Scene.java line 31:

> 29: import java.io.File;
> 30: import java.lang.ref.WeakReference;
> 31: import java.security.AccessControlContext;

Meta-comment: This is the sort of bulk reordering that _really_ makes me want a 
prescribed ordering that we all use.

modules/javafx.graphics/src/main/java/javafx/scene/traversal/FocusTraversal.java
 line 34:

> 32: 
> 33: /**
> 34:  * Provides the mechanism for focus traversal in the JavaFX application.

I'd like to see additional documentation here describing focus traversal.

modules/javafx.graphics/src/main/java/javafx/scene/traversal/FocusTraversal.java
 line 40:

> 38: public final class FocusTraversal {
> 39:     /**
> 40:      * Traverses focus to the adjacent node as specified by the direction.

What does it do if the `node` to traverse from is not the currently focused 
node?

How does traversal differ if the method is `KEY` vs `DEFAULT`?

modules/javafx.graphics/src/main/java/javafx/scene/traversal/FocusTraversal.java
 line 63:

> 61: 
> 62:     /**
> 63:      * Traverse focus downward as a response to pressing a key.

Is this a convenience method like the ones that follow? If so, add docs (and if 
not, why not?).

modules/javafx.graphics/src/main/java/javafx/scene/traversal/FocusTraversal.java
 line 65:

> 63:      * Traverse focus downward as a response to pressing a key.
> 64:      *
> 65:      * @param node the origin node

What is the "origin" node? Is it is the same as the "node to traverse focus 
from" in the `traverse` method? If so, use the same language. If not, clearly 
define the difference.

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalDirection.java
 line 35:

> 33:  */
> 34: public enum TraversalDirection {
> 35:     /** Moving focus downward. */

Suggestion: `Moving` --> `Moves`

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalMethod.java
 line 26:

> 24:  */
> 25: 
> 26: package javafx.scene.traversal;

You need an `@since` javadoc tag on this class.

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalPolicy.java
 line 51:

> 49:  * @since 999 TODO
> 50:  */
> 51: public abstract class TraversalPolicy {

Who subclasses this? And for what purpose? This should be documented in the 
class docs.

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalPolicy.java
 line 53:

> 51: public abstract class TraversalPolicy {
> 52:     /**
> 53:      * Traverse from owner, in direction dir.

Is the "owner" the "focus owner"? What is its relationship to the "node" 
parameter?

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalPolicy.java
 line 63:

> 61:      * <ol>
> 62:      * <li>Find the nearest parent of the "owner" that is handled by this 
> TraversalPolicy (i.e. it's a direct child of the root).
> 63:      * <li>select the next node within this direct child using the 
> context.selectInSubtree() and return it

I'm going to need a second pass to understand what this does, but one thing 
that jumps out at me: what is "context" ? and what is the "selectInSubtree" 
method? I see no such method in the public API, so this description is not 
comprehensible (nor suitable for public documentation).

modules/javafx.graphics/src/main/java/javafx/scene/traversal/TraversalPolicy.java
 line 96:

> 94:      * The constructor.
> 95:      */
> 96:     public TraversalPolicy() {

Abstract classes should have a `protected` not public constructor. And the docs 
should say "Constructor for subclasses to call."

modules/javafx.graphics/src/main/java/javafx/scene/traversal/package-info.java 
line 28:

> 26: /**
> 27:  * <p>Provides the set of classes for focus traversal.</p>
> 28:  */

This should have an `@since ` tag.

Minor: I don't think the `<p>` HTML tag is needed.

-------------

PR Review: https://git.openjdk.org/jfx/pull/1555#pullrequestreview-2293014279
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752279424
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752281034
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752283448
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752285689
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752288335
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752292570
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752292924
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752297334
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752302045
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752306901
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752308905
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752320230
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752305206
PR Review Comment: https://git.openjdk.org/jfx/pull/1555#discussion_r1752337828

Reply via email to