Author: rwhitcomb
Date: Wed Nov  1 02:16:53 2023
New Revision: 1913476

URL: http://svn.apache.org/viewvc?rev=1913476&view=rev
Log:
PIVOT-1032: Last set of changes to reduce "checkstyle" violations, plus some 
code enhancements.

Modified:
    pivot/trunk/core/src/org/apache/pivot/collections/HashSet.java
    pivot/trunk/core/src/org/apache/pivot/util/StringUtils.java
    pivot/trunk/core/src/org/apache/pivot/util/Utils.java
    pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java
    pivot/trunk/core/src/org/apache/pivot/util/concurrent/TimeoutException.java
    pivot/trunk/core/test/org/apache/pivot/util/test/StringUtilsTest.java
    pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml
    
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java
    
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Keyboard.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/DisplaySkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java
    
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java

Modified: pivot/trunk/core/src/org/apache/pivot/collections/HashSet.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/collections/HashSet.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/collections/HashSet.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/collections/HashSet.java Wed Nov  1 
02:16:53 2023
@@ -35,7 +35,7 @@ public class HashSet<E> implements Set<E
 
         private E element = null;
 
-        public ElementIterator(Iterator<E> iterator) {
+        public ElementIterator(final Iterator<E> iterator) {
             Utils.checkNull(iterator, "iterator");
 
             this.iterator = iterator;
@@ -79,25 +79,25 @@ public class HashSet<E> implements Set<E
     public HashSet() {
     }
 
-    public HashSet(Set<E> set) {
+    public HashSet(final Set<E> set) {
         for (E element : set) {
             add(element);
         }
     }
 
     @SafeVarargs
-    public HashSet(E... elements) {
+    public HashSet(final E... elements) {
         for (E element : elements) {
             add(element);
         }
     }
 
-    public HashSet(Comparator<E> comparator) {
+    public HashSet(final Comparator<E> comparator) {
         setComparator(comparator);
     }
 
     @Override
-    public boolean add(E element) {
+    public boolean add(final E element) {
         boolean added = false;
 
         if (!hashMap.containsKey(element)) {
@@ -113,7 +113,7 @@ public class HashSet<E> implements Set<E
     }
 
     @Override
-    public boolean remove(E element) {
+    public boolean remove(final E element) {
         boolean removed = false;
 
         if (hashMap.containsKey(element)) {
@@ -140,7 +140,7 @@ public class HashSet<E> implements Set<E
     }
 
     @Override
-    public boolean contains(E element) {
+    public boolean contains(final E element) {
         return hashMap.containsKey(element);
     }
 
@@ -160,7 +160,7 @@ public class HashSet<E> implements Set<E
     }
 
     @Override
-    public void setComparator(Comparator<E> comparator) {
+    public void setComparator(final Comparator<E> comparator) {
         Comparator<E> previousComparator = getComparator();
 
         hashMap.setComparator(comparator);
@@ -186,7 +186,7 @@ public class HashSet<E> implements Set<E
 
     @Override
     @SuppressWarnings("unchecked")
-    public boolean equals(Object o) {
+    public boolean equals(final Object o) {
         boolean equals = false;
 
         if (this == o) {
@@ -224,7 +224,7 @@ public class HashSet<E> implements Set<E
     public String toString() {
         StringBuilder sb = new StringBuilder();
 
-        sb.append(getClass().getName());
+        sb.append(getClass().getSimpleName());
         sb.append(" (");
 
         int i = 0;

Modified: pivot/trunk/core/src/org/apache/pivot/util/StringUtils.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/StringUtils.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/StringUtils.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/util/StringUtils.java Wed Nov  1 
02:16:53 2023
@@ -18,6 +18,7 @@ package org.apache.pivot.util;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.Arrays;
 
 
 /**
@@ -50,16 +51,10 @@ public final class StringUtils {
            throw new IllegalArgumentException("Requested string size " + n + " 
is out of range.");
         }
 
-        // Nothing fancy here, but allocate the space and set length upfront
-        // because we know how big the result should be.
-        StringBuilder builder = new StringBuilder(n);
-        builder.setLength(n);
-        if (ch != '\0') {
-            for (int i = 0; i < n; i++) {
-                builder.setCharAt(i, ch);
-            }
-        }
-        return builder.toString();
+        char[] chars = new char[n];
+        Arrays.fill(chars, ch);
+
+        return new String(chars);
     }
 
     /**

Modified: pivot/trunk/core/src/org/apache/pivot/util/Utils.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/Utils.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/Utils.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/util/Utils.java Wed Nov  1 02:16:53 
2023
@@ -450,5 +450,19 @@ public final class Utils {
         }
     }
 
+    /**
+     * Check and throw an exception if the given object is not of the given 
class.
+     *
+     * @param nm  A suitable object name for the object.
+     * @param obj The object whose class must be checked.
+     * @param cls The required class of the object.
+     * @throws    IllegalArgumentException if the object is NOT the required 
class.
+     */
+    public static void notInstanceOf(final String nm, final Object obj, final 
Class<?> cls) {
+        if (!cls.isInstance(obj)) {
+            throw new IllegalArgumentException(nm + " (" + 
obj.getClass().getSimpleName() + ") "
+                + "must be an instance of " + cls.getSimpleName() + ".");
+        }
+    }
 
 }

Modified: pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/util/concurrent/Task.java Wed Nov  1 
02:16:53 2023
@@ -31,63 +31,110 @@ import org.apache.pivot.util.Utils;
  */
 public abstract class Task<V> {
     /**
-     * Task execution callback that is posted to the executor service.
+     * Task execution callback that is posted to the executor service; 
responsible
+     * for running the background task from the {@link #run} method, where it
+     * invokes the {@link Task#execute} method (abstract here, so it must be
+     * implemented in the subclass).
      */
     private class ExecuteCallback implements Runnable {
         @Override
         public void run() {
-            V resultLocal = null;
-            Throwable faultLocal = null;
+            V taskResult = null;
+            Throwable taskFault = null;
 
             synchronized (Task.this) {
                 Task.this.taskThread = new 
WeakReference<Thread>(Thread.currentThread());
             }
 
             try {
-                resultLocal = execute();
+                taskResult = execute();
             } catch (Throwable throwable) {
-                faultLocal = throwable;
+                taskFault = throwable;
             }
 
-            TaskListener<V> taskListenerLocal;
+            TaskListener<V> localListener;
             synchronized (Task.this) {
-                Task.this.result = resultLocal;
-                Task.this.fault = faultLocal;
+                Task.this.result = taskResult;
+                Task.this.fault = taskFault;
 
                 abort = false;
 
-                taskListenerLocal = Task.this.taskListener;
+                localListener = Task.this.taskListener;
                 Task.this.taskListener = null;
             }
 
-            if (faultLocal == null) {
-                taskListenerLocal.taskExecuted(Task.this);
+            if (taskFault == null) {
+                localListener.taskExecuted(Task.this);
             } else {
-                taskListenerLocal.executeFailed(Task.this);
+                localListener.executeFailed(Task.this);
             }
         }
     }
 
+    /**
+     * The executor service used to launch this background task.
+     */
     private ExecutorService executorService;
 
+    /**
+     * The result of this task's execution. Not valid until and unless the task
+     * finishes successfully.
+     */
     private V result = null;
+    /**
+     * The reason for the task's failure, if any. Not valid until and unless 
the
+     * task's {@link #execute} method throws an exception.
+     */
     private Throwable fault = null;
+    /**
+     * Listener attached to this task which is notified when the task finishes
+     * either successfully, or with an exception.
+     */
     private TaskListener<V> taskListener = null;
+    /**
+     * Weak reference to the thread actually executing the task. Provided as a
+     * convenience if needed. Not valid until the task's {@link #execute} 
method
+     * is called. "Weak" so that garbage collection can recover all this task's
+     * resources once this thread finishes.
+     */
     private WeakReference<Thread> taskThread = null;
 
+    /**
+     * Timeout value, which can be used to ensure the task finishes even if 
something
+     * untoward happens. Must be implemented and respected by the subclass.
+     */
     protected volatile long timeout = Long.MAX_VALUE;
+    /**
+     * Flag used to signal that the task should be / has been aborted.  
Implemented and
+     * respected by the subclass.
+     */
     protected volatile boolean abort = false;
 
+    /**
+     * Default executor service used to launch tasks if no other is provided. 
The default is a
+     * cached thread pool.
+     */
     public static final ExecutorService DEFAULT_EXECUTOR_SERVICE = 
Executors.newCachedThreadPool();
 
+
+    /**
+     * Construct this task using the default executor service to launch it.
+     */
     public Task() {
         this(DEFAULT_EXECUTOR_SERVICE);
     }
 
-    public Task(ExecutorService executorService) {
-        Utils.checkNull(executorService, "executorService");
+    /**
+     * Construct this task using the given executor service to launch it.
+     *
+     * @param execService The service to use to execute this background task 
(must not
+     *                    be <code>null</code>).
+     * @throws IllegalArgumentException if the executor service is {@code 
null}.
+     */
+    public Task(final ExecutorService execService) {
+        Utils.checkNull(execService, "executorService");
 
-        this.executorService = executorService;
+        executorService = execService;
     }
 
     /**
@@ -100,39 +147,42 @@ public abstract class Task<V> {
     public abstract V execute() throws TaskExecutionException;
 
     /**
-     * Asynchronously executes the task. The caller is notified of the task's
-     * completion via the listener argument. Note that the listener will be
-     * notified on the task's worker thread, not on the thread that executed 
the
-     * task.
-     *
-     * @param taskListenerArgument The listener to be notified when the task
-     * completes.
+     * Asynchronously executes the task using the executor service specified
+     * at construction time.. The caller is notified of the task's completion
+     * via the listener argument. Note that the listener will be notified on
+     * the task's worker thread, not on the thread that requested the task
+     * execution.
+     *
+     * @param taskListenerValue The listener to be notified when the task
+     * completes or throws an exception.
+     * @throws IllegalThreadStateException if this task is already scheduled / 
running.
      */
-    public synchronized void execute(TaskListener<V> taskListenerArgument) {
-        execute(taskListenerArgument, executorService);
+    public synchronized void execute(final TaskListener<V> taskListenerValue) {
+        execute(taskListenerValue, executorService);
     }
 
     /**
      * Asynchronously executes the task. The caller is notified of the task's
      * completion via the listener argument. Note that the listener will be
-     * notified on the task's worker thread, not on the thread that executed 
the
-     * task.
+     * notified on the task's background worker thread, not on the thread that
+     * requested the task execution.
      *
-     * @param taskListenerArgument The listener to be notified when the task
-     * completes.
-     * @param executorServiceArgument The service to submit the task to,
-     * overriding the Task's own ExecutorService.
-     */
-    public synchronized void execute(TaskListener<V> taskListenerArgument,
-        ExecutorService executorServiceArgument) {
-        Utils.checkNull(taskListenerArgument, "taskListener");
-        Utils.checkNull(executorServiceArgument, "executorService");
+     * @param taskListenerValue The listener to be notified when the task
+     * completes or throws an exception.
+     * @param execServiceOverride The service to submit the task to (which may 
be
+     * an override of the Task's own <code>ExecutorService</code>).
+     * @throws IllegalThreadStateException if this task is already scheduled / 
running.
+     */
+    public synchronized void execute(final TaskListener<V> taskListenerValue,
+        final ExecutorService execServiceOverride) {
+        Utils.checkNull(taskListenerValue, "taskListener");
+        Utils.checkNull(execServiceOverride, "executorService");
 
-        if (this.taskListener != null) {
+        if (taskListener != null) {
             throw new IllegalThreadStateException("Task is already pending.");
         }
 
-        this.taskListener = taskListenerArgument;
+        taskListener = taskListenerValue;
 
         result = null;
         fault = null;
@@ -140,8 +190,7 @@ public abstract class Task<V> {
         abort = false;
 
         // Create a new execute callback and post it to the executor service
-        ExecuteCallback executeCallback = new ExecuteCallback();
-        executorServiceArgument.submit(executeCallback);
+        execServiceOverride.submit(new ExecuteCallback());
     }
 
     /**
@@ -155,9 +204,10 @@ public abstract class Task<V> {
      * Returns the result of executing the task.
      *
      * @return The task result, or {@code null} if the task is still executing
-     * or has failed. The result itself may also be {@code null}; callers
-     * should call {@link #isPending()} and {@link #getFault()} to distinguish
-     * between these cases.
+     * or has failed. The result itself may also be {@code null}, especially
+     * for a {@code Task<Void>}, or just if the task execution resulted in 
that.
+     * Callers should call {@link #isPending()} and {@link #getFault()} to
+     * distinguish between these cases.
      */
     public synchronized V getResult() {
         return result;
@@ -208,11 +258,12 @@ public abstract class Task<V> {
      * Sets the timeout value for this task. It is the responsibility of the
      * implementing class to respect this value.
      *
-     * @param timeout The time by which the task must complete execution. If 
the
-     * timeout is exceeded, a {@link TimeoutException} will be thrown.
+     * @param timeoutValue The time by which the task must complete execution. 
If the
+     * timeout is exceeded, a {@link TimeoutException} must be thrown (again, 
the
+     * responsibility of the implementing class).
      */
-    public synchronized void setTimeout(long timeout) {
-        this.timeout = timeout;
+    public synchronized void setTimeout(final long timeoutValue) {
+        timeout = timeoutValue;
     }
 
     /**

Modified: 
pivot/trunk/core/src/org/apache/pivot/util/concurrent/TimeoutException.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/util/concurrent/TimeoutException.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/util/concurrent/TimeoutException.java 
(original)
+++ pivot/trunk/core/src/org/apache/pivot/util/concurrent/TimeoutException.java 
Wed Nov  1 02:16:53 2023
@@ -22,11 +22,19 @@ package org.apache.pivot.util.concurrent
 public class TimeoutException extends RuntimeException {
     private static final long serialVersionUID = 7512511291820426011L;
 
+    /**
+     * Construct the exception with no message.
+     */
     public TimeoutException() {
         super();
     }
 
-    public TimeoutException(String message) {
+    /**
+     * Construct the exception with the given message.
+     *
+     * @param message Message associated with this exception.
+     */
+    public TimeoutException(final String message) {
         super(message);
     }
 }

Modified: pivot/trunk/core/test/org/apache/pivot/util/test/StringUtilsTest.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/core/test/org/apache/pivot/util/test/StringUtilsTest.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/core/test/org/apache/pivot/util/test/StringUtilsTest.java 
(original)
+++ pivot/trunk/core/test/org/apache/pivot/util/test/StringUtilsTest.java Wed 
Nov  1 02:16:53 2023
@@ -54,5 +54,23 @@ public class StringUtilsTest {
         assertEquals("[a, b, c, d, e, f, g]", output);
     }
 
+    /**
+     * Run tests of {@link StringUtils#fromNChars}.
+     */
+    @Test
+    public void test2() {
+        String actual1 = StringUtils.fromNChars(' ', 0);
+        assertEquals("", actual1);
+
+        String actual2 = StringUtils.fromNChars('\0', 10);
+        assertEquals("\0\0\0\0\0\0\0\0\0\0", actual2);
+
+        String actual3 = StringUtils.fromNChars(' ', 8);
+        assertEquals("        ", actual3);
+
+        String actual4 = StringUtils.fromNChars('\u2022', 6);
+        assertEquals("••••••", actual4);
+    }
+
 }
 

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml
URL: 
http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml Wed Nov  1 
02:16:53 2023
@@ -26,12 +26,12 @@ limitations under the License.
       <TablePane.Column width="1*"/>
     </columns>
     <rows>
-      <TablePane.Row height="3*">
+      <TablePane.Row height="1*">
         <FlowPane>
           <PushButton bxml:id="logMessageButton" buttonData="Log Message"/>
         </FlowPane>
       </TablePane.Row>
-      <TablePane.Row height="1*">
+      <TablePane.Row height="3*">
         <Border title="Console">
           <ScrollPane horizontalScrollBarPolicy="fill" 
verticalScrollBarPolicy="auto">
             <TextArea bxml:id="consoleArea" editable="false" 
styles="{wrapText:true}"/>

Modified: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java 
(original)
+++ 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraGaugeSkin.java 
Wed Nov  1 02:16:53 2023
@@ -147,7 +147,7 @@ public class TerraGaugeSkin<T extends Nu
     public void paint(final Graphics2D graphics) {
         @SuppressWarnings("unchecked")
         Gauge<T> gauge = (Gauge<T>) getComponent();
-        // NOTE: sanity check:  warning level > min && < max, warning < 
critical if both set
+        // NOTE: warning level > min && < max, warning < critical if both set
         // also critical > main && < max, critical > warning if both set
 
         String text = gauge.getText();

Modified: 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
 (original)
+++ 
pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraTextInputSkin.java
 Wed Nov  1 02:16:53 2023
@@ -1178,23 +1178,22 @@ public class TerraTextInputSkin extends
         return consumed;
     }
 
-    private boolean handleLeftRightKeys(final TextInput textInput, final int 
keyCode, final boolean isShiftPressed,
-        final int selStart, final int selLength) {
+    private boolean handleLeftRightKeys(final TextInput textInput, final int 
keyCode,
+        final Keyboard.Modifiers mods, final int selStart, final int 
selLength) {
         boolean consumed = false;
         int start = selStart, length = selLength;
-        Modifier wordNavigationModifier = Platform.getWordNavigationModifier();
 
         // Sometimes while selecting we need to make the opposite end visible
         if (keyCode == KeyCode.LEFT) {
             SelectDirection visiblePosition = SelectDirection.LEFT;
 
-            if (Keyboard.isPressed(wordNavigationModifier)) {
+            if (mods.wordNavPressed) {
                 int wordStart = (selectDirection == SelectDirection.RIGHT) ? 
start + length : start;
                 // Find the start of the next word to the left
                 if (wordStart > 0) {
                     wordStart = 
CharUtils.findPriorWord(textInput.getCharacters(), wordStart);
 
-                    if (isShiftPressed) {
+                    if (mods.shiftPressed) {
                         if (wordStart >= start) {
                             // We've just reduced the previous right 
selection, so leave the anchor alone
                             length = wordStart - start;
@@ -1217,7 +1216,7 @@ public class TerraTextInputSkin extends
 
                     start = wordStart;
                 }
-            } else if (isShiftPressed) {
+            } else if (mods.shiftPressed) {
                 // If the previous direction was LEFT, then increase the 
selection
                 // else decrease the selection back to the anchor.
                 if (selectDirection != null) {
@@ -1287,13 +1286,13 @@ public class TerraTextInputSkin extends
         } else if (keyCode == KeyCode.RIGHT) {
             SelectDirection visiblePosition = SelectDirection.RIGHT;
 
-            if (Keyboard.isPressed(wordNavigationModifier)) {
+            if (mods.wordNavPressed) {
                 int wordStart = (selectDirection == SelectDirection.LEFT) ? 
start : start + length;
                 // Find the start of the next word to the right
                 if (wordStart < textInput.getCharacterCount()) {
                     wordStart = 
CharUtils.findNextWord(textInput.getCharacters(), wordStart);
 
-                    if (isShiftPressed) {
+                    if (mods.shiftPressed) {
                         if (wordStart <= start + length) {
                             // We've just reduced the previous left selection, 
so leave the anchor alone
                             length -= wordStart - start;
@@ -1316,7 +1315,7 @@ public class TerraTextInputSkin extends
                         selectDirection = null;
                     }
                 }
-            } else if (isShiftPressed) {
+            } else if (mods.shiftPressed) {
                 // If the previous direction was RIGHT, then increase the 
selection
                 // else decrease the selection back to the anchor.
                 if (selectDirection != null) {
@@ -1439,8 +1438,7 @@ public class TerraTextInputSkin extends
         int start = textInput.getSelectionStart();
         int length = textInput.getSelectionLength();
 
-        boolean isMetaPressed = Keyboard.isPressed(Modifier.META);
-        boolean isShiftPressed = Keyboard.isPressed(Modifier.SHIFT);
+        Keyboard.Modifiers mods = Keyboard.pressed();
 
         if (keyCode == KeyCode.DELETE && isEditable) {
             if (start < textInput.getCharacterCount()) {
@@ -1457,8 +1455,8 @@ public class TerraTextInputSkin extends
                 textInput.removeText(start, length);
                 consumed = true;
             }
-        } else if (keyCode == KeyCode.HOME || (keyCode == KeyCode.LEFT && 
isMetaPressed)) {
-            if (isShiftPressed) {
+        } else if (keyCode == KeyCode.HOME || (keyCode == KeyCode.LEFT && 
mods.metaPressed)) {
+            if (mods.shiftPressed) {
                 // Select from the beginning of the text to the current pivot 
position
                 if (selectDirection == SelectDirection.LEFT) {
                     textInput.setSelection(0, start + length);
@@ -1475,10 +1473,10 @@ public class TerraTextInputSkin extends
             scrollCharacterToVisible(0);
 
             consumed = true;
-        } else if (keyCode == KeyCode.END || (keyCode == KeyCode.RIGHT && 
isMetaPressed)) {
+        } else if (keyCode == KeyCode.END || (keyCode == KeyCode.RIGHT && 
mods.metaPressed)) {
             int n = textInput.getCharacterCount();
 
-            if (isShiftPressed) {
+            if (mods.shiftPressed) {
                 // Select from current pivot position to the end of the text
                 if (selectDirection == SelectDirection.LEFT) {
                     start += length;
@@ -1495,10 +1493,10 @@ public class TerraTextInputSkin extends
 
             consumed = true;
         } else if (keyCode == KeyCode.LEFT) {
-            consumed = handleLeftRightKeys(textInput, keyCode, isShiftPressed, 
start, length);
+            consumed = handleLeftRightKeys(textInput, keyCode, mods, start, 
length);
         } else if (keyCode == KeyCode.RIGHT) {
-            consumed = handleLeftRightKeys(textInput, keyCode, isShiftPressed, 
start, length);
-        } else if (Keyboard.isPressed(Platform.getCommandModifier())) {
+            consumed = handleLeftRightKeys(textInput, keyCode, mods, start, 
length);
+        } else if (mods.cmdPressed) {
             if (keyCode == KeyCode.A) {
                 textInput.setSelection(0, textInput.getCharacterCount());
                 consumed = true;
@@ -1522,14 +1520,14 @@ public class TerraTextInputSkin extends
                 textInput.paste();
                 consumed = true;
             } else if (keyCode == KeyCode.Z && isEditable) {
-                if (!isShiftPressed) {
+                if (!mods.shiftPressed) {
                     textInput.undo();
                 }
 
                 consumed = true;
             }
         } else if (keyCode == KeyCode.INSERT) {
-            if (isShiftPressed && isEditable) {
+            if (mods.shiftPressed && isEditable) {
                 textInput.paste();
                 consumed = true;
             }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Wed Nov  1 02:16:53 
2023
@@ -145,11 +145,8 @@ public abstract class Button extends Com
     private DataRenderer dataRenderer = null;
 
     private Action action = null;
-    private ActionListener actionListener = new ActionListener() {
-        @Override
-        public void enabledChanged(Action actionArgument) {
-            setEnabled(actionArgument.isEnabled());
-        }
+    private ActionListener actionListener = (buttonAction) -> {
+        setEnabled(buttonAction.isEnabled());
     };
 
     private State state = State.UNSELECTED;

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Keyboard.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Keyboard.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Keyboard.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Keyboard.java Wed Nov  1 02:16:53 
2023
@@ -16,9 +16,12 @@
  */
 package org.apache.pivot.wtk;
 
-import static java.awt.event.InputEvent.*;
-import java.awt.event.KeyEvent;
+import static java.awt.event.InputEvent.ALT_DOWN_MASK;
+import static java.awt.event.InputEvent.CTRL_DOWN_MASK;
+import static java.awt.event.InputEvent.META_DOWN_MASK;
+import static java.awt.event.InputEvent.SHIFT_DOWN_MASK;
 import static java.awt.event.KeyEvent.*;
+import java.awt.event.KeyEvent;
 import java.lang.reflect.Field;
 import java.util.Locale;
 import java.util.regex.Matcher;
@@ -182,6 +185,24 @@ public final class Keyboard {
     }
 
     /**
+     * A tuple class to return in one swoop the current set of modifiers being 
pressed.
+     */
+    public static class Modifiers {
+        /** Is the platform-specified {@code Cmd} key pressed? */
+        public boolean cmdPressed;
+        /** Is the platform-specific word navigation key pressed? */
+        public boolean wordNavPressed;
+        /** Is the {@link Modifier#SHIFT} key pressed? */
+        public boolean shiftPressed;
+        /** Is the {@link Modifier#CTRL} key pressed? */
+        public boolean ctrlPressed;
+        /** Is the {@link Modifier#ALT} key pressed? */
+        public boolean altPressed;
+        /** Is the {@link Modifier#META} key prssed? */
+        public boolean metaPressed;
+    }
+
+    /**
      * Enumeration representing key locations.
      */
     public enum KeyLocation {
@@ -595,6 +616,38 @@ public final class Keyboard {
     }
 
     /**
+     * Shortcut method to test if the {@link 
Platform#getWordNavigationModifier} is pressed.
+     *
+     * @return The result of {@code 
isPressed(Platform.getWordNavigationModifier())}.
+     */
+    public static boolean isWordNavPressed() {
+        return isPressed(Platform.getWordNavigationModifier());
+    }
+
+    /**
+     * Return a standardized set of flags to say which modifiers are currently 
pressed.
+     * <p> This is for convenience in keypress handlers that typically need to 
know all
+     * these states, and have to deal with the platform differences as well.  
So,
+     * consolidate that logic here for "one-stop shopping".
+     *
+     * @return The platform-specific set of flags as to which modifiers are 
currently
+     *         pressed by the user.
+     */
+    public static Modifiers pressed() {
+        Modifiers mods = new Modifiers();
+
+        mods.cmdPressed = isCmdPressed();
+        mods.wordNavPressed = isWordNavPressed();
+
+        mods.shiftPressed = isPressed(Modifier.SHIFT);
+        mods.ctrlPressed = isPressed(Modifier.CTRL);
+        mods.altPressed = isPressed(Modifier.ALT);
+        mods.metaPressed = isPressed(Modifier.META);
+
+        return mods;
+    }
+
+    /**
      * Returns the current drop action.
      *
      * @return The drop action corresponding to the currently pressed modifier 
keys.

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInput.java Wed Nov  1 02:16:53 
2023
@@ -41,14 +41,14 @@ public class TextInput extends Component
          *
          * @param x The X-position (of the mouse probably).
          */
-        public int getInsertionPoint(int x);
+        int getInsertionPoint(int x);
 
         /**
          * @return The bounds of the character at a given index.
          *
          * @param index The location to check.
          */
-        public Bounds getCharacterBounds(int index);
+        Bounds getCharacterBounds(int index);
     }
 
     /**
@@ -62,7 +62,7 @@ public class TextInput extends Component
          * @param value The value retrieved from the bound object.
          * @return A text representation of this value for display.
          */
-        public String toString(Object value);
+        String toString(Object value);
 
         /**
          * Converts a text string to a value to be stored in the bind context
@@ -71,14 +71,14 @@ public class TextInput extends Component
          * @param text The current text from the control.
          * @return A value suitable for storage in the bound object.
          */
-        public Object valueOf(String text);
+        Object valueOf(String text);
     }
 
     /**
      * Interface for a text operation that can be undone.
      */
     private interface Edit {
-        public void undo();
+        void undo();
     }
 
     /**
@@ -88,8 +88,8 @@ public class TextInput extends Component
         private final int index;
         private final int count;
 
-        public InsertTextEdit(final CharSequence text, final int index) {
-            this.index = index;
+        InsertTextEdit(final CharSequence text, final int insertIndex) {
+            this.index = insertIndex;
             count = text.length();
         }
 
@@ -106,9 +106,9 @@ public class TextInput extends Component
         private final int index;
         private final String text;
 
-        public RemoveTextEdit(final int index, final int count) {
-            this.index = index;
-            text = getText(index, index + count);
+        RemoveTextEdit(final int removeIndex, final int count) {
+            this.index = removeIndex;
+            text = getText(removeIndex, removeIndex + count);
         }
 
         @Override
@@ -181,17 +181,17 @@ public class TextInput extends Component
     }
 
     public void setText(final String text) {
-        setText(text);
+        setText((CharSequence) text);
     }
 
-    public void setText(final CharSequence text) {
-        Utils.checkNull(text, "text");
+    public void setText(final CharSequence newText) {
+        CharSequence text = newText;
 
-        if (text.length() > maximumLength) {
-            throw new IllegalArgumentException("Text length is greater than 
maximum length.");
-        }
+        Utils.checkNull(text, "text");
+        Utils.checkTextMaximumLength(-1, text.length(), maximumLength);
 
-        characters = new StringBuilder(text);
+        characters.setLength(0);
+        characters.append(text);
 
         // Update selection
         int previousSelectionStart = selectionStart;
@@ -222,12 +222,11 @@ public class TextInput extends Component
         insertText(text, index, true);
     }
 
-    private void insertText(final CharSequence text, final int index, final 
boolean addToEditHistory) {
-        Utils.checkNull(text, "text");
+    private void insertText(final CharSequence newText, final int index, final 
boolean addToEditHistory) {
+        Utils.checkNull(newText, "text");
+        Utils.checkTextMaximumLength(characters.length(), newText.length(), 
maximumLength);
 
-        if (characters.length() + text.length() > maximumLength) {
-            throw new IllegalArgumentException("Insertion of text would exceed 
maximum length.");
-        }
+        CharSequence text = newText;
 
         if (text.length() > 0) {
             Vote vote = textInputContentListeners.previewInsertText(this, 
text, index);
@@ -335,11 +334,11 @@ public class TextInput extends Component
      * composed text (that is, the text currently being composed into something
      * meaningful).
      *
-     * @param composedText The current composed text (which can be {@code null}
+     * @param currentComposedText The current composed text (which can be 
{@code null}
      * for many different reasons).
      */
-    public void setComposedText(final AttributedStringCharacterIterator 
composedText) {
-        this.composedText = composedText;
+    public void setComposedText(final AttributedStringCharacterIterator 
currentComposedText) {
+        this.composedText = currentComposedText;
     }
 
     /**
@@ -468,23 +467,24 @@ public class TextInput extends Component
      * Sets the selection. The sum of the selection start and length must be
      * less than the length of the text input's content.
      *
-     * @param selectionStart The starting index of the selection.
-     * @param selectionLength The length of the selection.
+     * @param newStart The starting index of the selection.
+     * @param newLength The length of the selection.
      */
-    public final void setSelection(final int selectionStart, final int 
selectionLength) {
-        Utils.checkNonNegative(selectionLength, "selectionLength");
+    public final void setSelection(final int newStart, final int newLength) {
+        int start = newStart;
+        int length = newLength;
+
+        Utils.checkNonNegative(length, "selectionLength");
 
         int composedTextLength = composedText != null ? 
(composedText.getEndIndex() - composedText.getBeginIndex()) : 0;
-        if (selectionStart < 0 || selectionStart + selectionLength > 
characters.length() + composedTextLength) {
-            throw new IndexOutOfBoundsException("Selection value is out of 
bounds.");
-        }
+        Utils.checkIndexBounds(start, length, 0, characters.length() + 
composedTextLength);
 
-        int previousSelectionStart = this.selectionStart;
-        int previousSelectionLength = this.selectionLength;
+        int previousSelectionStart = selectionStart;
+        int previousSelectionLength = selectionLength;
 
-        if (previousSelectionStart != selectionStart || 
previousSelectionLength != selectionLength) {
-            this.selectionStart = selectionStart;
-            this.selectionLength = selectionLength;
+        if (previousSelectionStart != start || previousSelectionLength != 
length) {
+            selectionStart = start;
+            selectionLength = length;
 
             textInputSelectionListeners.selectionChanged(this, 
previousSelectionStart,
                 previousSelectionLength);
@@ -552,16 +552,16 @@ public class TextInput extends Component
     /**
      * Sets the text size.
      *
-     * @param textSize The number of characters to display in the text input.
+     * @param textSizeValue The number of characters to display in the text 
input.
      * @throws IllegalArgumentException if the size value is negative.
      */
-    public final void setTextSize(final int textSize) {
-        Utils.checkNonNegative(textSize, "textSize");
+    public final void setTextSize(final int textSizeValue) {
+        Utils.checkNonNegative(textSizeValue, "textSize");
 
-        int previousTextSize = this.textSize;
+        int previousTextSize = textSize;
 
-        if (previousTextSize != textSize) {
-            this.textSize = textSize;
+        if (previousTextSize != textSizeValue) {
+            textSize = textSizeValue;
             textInputListeners.textSizeChanged(this, previousTextSize);
         }
     }
@@ -578,16 +578,16 @@ public class TextInput extends Component
     /**
      * Sets the maximum length of the text input's text content.
      *
-     * @param maximumLength The maximum length of the text input's text 
content.
+     * @param newMaximumLength The maximum length of the text input's text 
content.
      * @throws IllegalArgumentException if the length value is negative.
      */
-    public final void setMaximumLength(final int maximumLength) {
-        Utils.checkNonNegative(maximumLength, "maximumLength");
+    public final void setMaximumLength(final int newMaximumLength) {
+        Utils.checkNonNegative(newMaximumLength, "maximumLength");
 
-        int previousMaximumLength = this.maximumLength;
+        int previousMaximumLength = maximumLength;
 
-        if (previousMaximumLength != maximumLength) {
-            this.maximumLength = maximumLength;
+        if (previousMaximumLength != newMaximumLength) {
+            maximumLength = newMaximumLength;
 
             // Truncate the text, if necessary (do not allow listeners to vote 
on this change)
             int length = characters.length();
@@ -617,12 +617,12 @@ public class TextInput extends Component
      * Sets or clears the password flag. If the password flag is set, the text
      * input will visually mask its contents.
      *
-     * @param password {@code true} if this is a password text input;
+     * @param passwordValue {@code true} if this is a password text input;
      * {@code false}, otherwise.
      */
-    public final void setPassword(final boolean password) {
-        if (this.password != password) {
-            this.password = password;
+    public final void setPassword(final boolean passwordValue) {
+        if (password != passwordValue) {
+            password = passwordValue;
             textInputListeners.passwordChanged(this);
         }
     }
@@ -637,13 +637,13 @@ public class TextInput extends Component
     /**
      * Sets the text input's prompt.
      *
-     * @param prompt The prompt text, or {@code null} for no prompt.
+     * @param promptText The prompt text, or {@code null} for no prompt.
      */
-    public final void setPrompt(final String prompt) {
-        String previousPrompt = this.prompt;
+    public final void setPrompt(final String promptText) {
+        String previousPrompt = prompt;
 
-        if (previousPrompt != prompt) {
-            this.prompt = prompt;
+        if (previousPrompt != promptText) {
+            prompt = promptText;
             textInputListeners.promptChanged(this, previousPrompt);
         }
     }
@@ -660,13 +660,13 @@ public class TextInput extends Component
     /**
      * Sets the text input's text key.
      *
-     * @param textKey The text key, or {@code null} to clear the binding.
+     * @param newTextKey The text key, or {@code null} to clear the binding.
      */
-    public final void setTextKey(final String textKey) {
-        String previousTextKey = this.textKey;
+    public final void setTextKey(final String newTextKey) {
+        String previousTextKey = textKey;
 
-        if (previousTextKey != textKey) {
-            this.textKey = textKey;
+        if (previousTextKey != newTextKey) {
+            textKey = newTextKey;
             textInputBindingListeners.textKeyChanged(this, previousTextKey);
         }
     }
@@ -675,13 +675,13 @@ public class TextInput extends Component
         return textBindType;
     }
 
-    public final void setTextBindType(final BindType textBindType) {
-        Utils.checkNull(textBindType, "textBindType");
+    public final void setTextBindType(final BindType newTextBindType) {
+        Utils.checkNull(newTextBindType, "textBindType");
 
-        BindType previousTextBindType = this.textBindType;
+        BindType previousTextBindType = textBindType;
 
-        if (previousTextBindType != textBindType) {
-            this.textBindType = textBindType;
+        if (previousTextBindType != newTextBindType) {
+            textBindType = newTextBindType;
             textInputBindingListeners.textBindTypeChanged(this, 
previousTextBindType);
         }
     }
@@ -690,11 +690,11 @@ public class TextInput extends Component
         return textBindMapping;
     }
 
-    public final void setTextBindMapping(final TextBindMapping 
textBindMapping) {
-        TextBindMapping previousTextBindMapping = this.textBindMapping;
+    public final void setTextBindMapping(final TextBindMapping 
newTextBindMapping) {
+        TextBindMapping previousTextBindMapping = textBindMapping;
 
-        if (previousTextBindMapping != textBindMapping) {
-            this.textBindMapping = textBindMapping;
+        if (previousTextBindMapping != newTextBindMapping) {
+            textBindMapping = newTextBindMapping;
             textInputBindingListeners.textBindMappingChanged(this, 
previousTextBindMapping);
         }
     }
@@ -750,14 +750,14 @@ public class TextInput extends Component
     /**
      * Sets the validator associated with this text input.
      *
-     * @param validator The validator to use, or {@code null} to use no
+     * @param newValidator The validator to use, or {@code null} to use no
      * validator.
      */
-    public final void setValidator(final Validator validator) {
+    public final void setValidator(final Validator newValidator) {
         Validator previousValidator = this.validator;
 
-        if (validator != previousValidator) {
-            this.validator = validator;
+        if (newValidator != previousValidator) {
+            this.validator = newValidator;
 
             // Store previous text valid flag
             boolean previousTextValid = textValid;
@@ -785,11 +785,11 @@ public class TextInput extends Component
      * Sets the text input's strict validation flag. When enabled, only valid
      * text will be accepted by the text input.
      *
-     * @param strictValidation The new flag setting.
+     * @param strictValidationValue The new flag setting.
      */
-    public final void setStrictValidation(final boolean strictValidation) {
-        if (this.strictValidation != strictValidation) {
-            this.strictValidation = strictValidation;
+    public final void setStrictValidation(final boolean strictValidationValue) 
{
+        if (strictValidation != strictValidationValue) {
+            strictValidation = strictValidationValue;
             textInputListeners.strictValidationChanged(this);
         }
     }
@@ -815,17 +815,17 @@ public class TextInput extends Component
     /**
      * Sets the text area's editable flag.
      *
-     * @param editable The new flag setting.
+     * @param editableValue The new flag setting.
      */
-    public final void setEditable(final boolean editable) {
-        if (this.editable != editable) {
-            if (!editable) {
+    public final void setEditable(final boolean editableValue) {
+        if (editable != editableValue) {
+            if (!editableValue) {
                 if (isFocused()) {
                     clearFocus();
                 }
             }
 
-            this.editable = editable;
+            editable = editableValue;
 
             textInputListeners.editableChanged(this);
         }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputListener.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputListener.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/TextInputListener.java Wed Nov  1 
02:16:53 2023
@@ -28,44 +28,44 @@ public interface TextInputListener {
      * @deprecated Since 2.1 and Java 8 the interface itself has default 
implementations.
      */
     @Deprecated
-    public static class Adapter implements TextInputListener {
+    class Adapter implements TextInputListener {
         @Override
-        public void textSizeChanged(TextInput textInput, int previousTextSize) 
{
+        public void textSizeChanged(final TextInput textInput, final int 
previousTextSize) {
             // empty block
         }
 
         @Override
-        public void maximumLengthChanged(TextInput textInput, int 
previousMaximumLength) {
+        public void maximumLengthChanged(final TextInput textInput, final int 
previousMaximumLength) {
             // empty block
         }
 
         @Override
-        public void passwordChanged(TextInput textInput) {
+        public void passwordChanged(final TextInput textInput) {
             // empty block
         }
 
         @Override
-        public void promptChanged(TextInput textInput, String previousPrompt) {
+        public void promptChanged(final TextInput textInput, final String 
previousPrompt) {
             // empty block
         }
 
         @Override
-        public void textValidatorChanged(TextInput textInput, Validator 
previousValidator) {
+        public void textValidatorChanged(final TextInput textInput, final 
Validator previousValidator) {
             // empty block
         }
 
         @Override
-        public void strictValidationChanged(TextInput textInput) {
+        public void strictValidationChanged(final TextInput textInput) {
             // empty block
         }
 
         @Override
-        public void textValidChanged(TextInput textInput) {
+        public void textValidChanged(final TextInput textInput) {
             // empty block
         }
 
         @Override
-        public void editableChanged(TextInput textInput) {
+        public void editableChanged(final TextInput textInput) {
             // empty block
         }
     }
@@ -73,44 +73,44 @@ public interface TextInputListener {
     /**
      * Text input listener listeners list.
      */
-    public static class Listeners extends ListenerList<TextInputListener> 
implements TextInputListener {
+    class Listeners extends ListenerList<TextInputListener> implements 
TextInputListener {
         @Override
-        public void textSizeChanged(TextInput textInput, int previousTextSize) 
{
+        public void textSizeChanged(final TextInput textInput, final int 
previousTextSize) {
             forEach(listener -> listener.textSizeChanged(textInput, 
previousTextSize));
         }
 
         @Override
-        public void maximumLengthChanged(TextInput textInput, int 
previousMaximumLength) {
+        public void maximumLengthChanged(final TextInput textInput, final int 
previousMaximumLength) {
             forEach(listener -> listener.maximumLengthChanged(textInput, 
previousMaximumLength));
         }
 
         @Override
-        public void passwordChanged(TextInput textInput) {
+        public void passwordChanged(final TextInput textInput) {
             forEach(listener -> listener.passwordChanged(textInput));
         }
 
         @Override
-        public void promptChanged(TextInput textInput, String previousPrompt) {
+        public void promptChanged(final TextInput textInput, final String 
previousPrompt) {
             forEach(listener -> listener.promptChanged(textInput, 
previousPrompt));
         }
 
         @Override
-        public void textValidatorChanged(TextInput textInput, Validator 
previousValidator) {
+        public void textValidatorChanged(final TextInput textInput, final 
Validator previousValidator) {
             forEach(listener -> listener.textValidatorChanged(textInput, 
previousValidator));
         }
 
         @Override
-        public void strictValidationChanged(TextInput textInput) {
+        public void strictValidationChanged(final TextInput textInput) {
             forEach(listener -> listener.strictValidationChanged(textInput));
         }
 
         @Override
-        public void textValidChanged(TextInput textInput) {
+        public void textValidChanged(final TextInput textInput) {
             forEach(listener -> listener.textValidChanged(textInput));
         }
 
         @Override
-        public void editableChanged(TextInput textInput) {
+        public void editableChanged(final TextInput textInput) {
             forEach(listener -> listener.editableChanged(textInput));
         }
     }
@@ -121,7 +121,7 @@ public interface TextInputListener {
      * @param textInput        The source of this event.
      * @param previousTextSize The previous text size for the control
      */
-    default void textSizeChanged(TextInput textInput, int previousTextSize) {
+    default void textSizeChanged(final TextInput textInput, final int 
previousTextSize) {
     }
 
     /**
@@ -130,7 +130,7 @@ public interface TextInputListener {
      * @param textInput             The source of this event.
      * @param previousMaximumLength The previous maximum text length.
      */
-    default void maximumLengthChanged(TextInput textInput, int 
previousMaximumLength) {
+    default void maximumLengthChanged(final TextInput textInput, final int 
previousMaximumLength) {
     }
 
     /**
@@ -138,7 +138,7 @@ public interface TextInputListener {
      *
      * @param textInput The source of this event.
      */
-    default void passwordChanged(TextInput textInput) {
+    default void passwordChanged(final TextInput textInput) {
     }
 
     /**
@@ -147,7 +147,7 @@ public interface TextInputListener {
      * @param textInput      The source of this event.
      * @param previousPrompt The previous prompt string.
      */
-    default void promptChanged(TextInput textInput, String previousPrompt) {
+    default void promptChanged(final TextInput textInput, final String 
previousPrompt) {
     }
 
     /**
@@ -156,7 +156,7 @@ public interface TextInputListener {
      * @param textInput         The source of this event.
      * @param previousValidator The previous validator for the text.
      */
-    default void textValidatorChanged(TextInput textInput, Validator 
previousValidator) {
+    default void textValidatorChanged(final TextInput textInput, final 
Validator previousValidator) {
     }
 
     /**
@@ -164,7 +164,7 @@ public interface TextInputListener {
      *
      * @param textInput The text input that has changed.
      */
-    default void strictValidationChanged(TextInput textInput) {
+    default void strictValidationChanged(final TextInput textInput) {
     }
 
     /**
@@ -172,7 +172,7 @@ public interface TextInputListener {
      *
      * @param textInput The text input that has been changed.
      */
-    default void textValidChanged(TextInput textInput) {
+    default void textValidChanged(final TextInput textInput) {
     }
 
     /**
@@ -180,7 +180,7 @@ public interface TextInputListener {
      *
      * @param textInput The text input whose state has changed.
      */
-    default void editableChanged(TextInput textInput) {
+    default void editableChanged(final TextInput textInput) {
     }
 
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/DisplaySkin.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/DisplaySkin.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/DisplaySkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/DisplaySkin.java Wed Nov  1 
02:16:53 2023
@@ -35,6 +35,9 @@ public class DisplaySkin extends Contain
         setBackgroundColor(Color.LIGHT_GRAY);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void install(final Component component) {
         if (!(component instanceof Display)) {
@@ -45,6 +48,9 @@ public class DisplaySkin extends Contain
         super.install(component);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void layout() {
         Display display = (Display) getComponent();

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkin.java Wed Nov  1 
02:16:53 2023
@@ -1071,6 +1071,73 @@ org.apache.pivot.util.Console.getDefault
         return consumed;
     }
 
+    private boolean navigateHome(final TextPane textPane, final Document 
document,
+        final boolean commandPressed, final boolean shiftPressed) {
+        int selectionStart = textPane.getSelectionStart();
+        int selectionLength = textPane.getSelectionLength();
+
+        int start;
+        if (commandPressed) {
+            // Move the caret to the beginning of the text
+            start = 0;
+        } else {
+            // Move the caret to the beginning of the line
+            start = getRowOffset(document, selectionStart);
+        }
+
+        if (shiftPressed) {
+            // TODO: if last direction was left, then extend further left
+            // but if right, then reverse selection from the pivot point
+            selectionLength += selectionStart - start;
+        } else {
+            selectionLength = 0;
+        }
+
+        if (start >= 0) {
+            textPane.setSelection(start, selectionLength);
+            scrollCharacterToVisible(start);
+            return true;
+        }
+
+        return false;
+    }
+
+    private boolean navigateEnd(final TextPane textPane, final Document 
document,
+        final boolean commandPressed, final boolean shiftPressed) {
+        int selectionStart = textPane.getSelectionStart();
+        int selectionLength = textPane.getSelectionLength();
+
+        int end;
+        int index = selectionStart + selectionLength;
+
+        if (commandPressed) {
+            // Move the caret to end of the text
+            end = textPane.getCharacterCount() - 1;
+        } else {
+            // Move the caret to the end of the line
+            int rowOffset = getRowOffset(document, index);
+            int rowLength = getRowLength(document, index);
+            end = rowOffset + rowLength;
+        }
+
+        if (shiftPressed) {
+            // TODO: if last direction was right, then extend further right
+            // but if left, then reverse selection from the pivot point
+            selectionLength += end - index;
+        } else {
+            selectionStart = end;
+            selectionLength = 0;
+        }
+
+        if (selectionStart + selectionLength <= textPane.getCharacterCount()) {
+            textPane.setSelection(selectionStart, selectionLength);
+            scrollCharacterToVisible(selectionStart + selectionLength);
+            return true;
+        }
+
+        return false;
+    }
+
     @Override
     public boolean keyPressed(final Component component, final int keyCode,
         final Keyboard.KeyLocation keyLocation) {
@@ -1097,57 +1164,10 @@ org.apache.pivot.util.Console.getDefault
                 consumed = commandKey(textPane, document, keyCode, isEditable, 
shiftPressed);
             } else if (keyCode == Keyboard.KeyCode.HOME
                    || (keyCode == Keyboard.KeyCode.LEFT && metaPressed)) {
-                int start;
-                if (commandPressed) {
-                    // Move the caret to the beginning of the text
-                    start = 0;
-                } else {
-                    // Move the caret to the beginning of the line
-                    start = getRowOffset(document, selectionStart);
-                }
-
-                if (shiftPressed) {
-                    // TODO: if last direction was left, then extend further 
left
-                    // but if right, then reverse selection from the pivot 
point
-                    selectionLength += selectionStart - start;
-                } else {
-                    selectionLength = 0;
-                }
-
-                if (start >= 0) {
-                    textPane.setSelection(start, selectionLength);
-                    scrollCharacterToVisible(start);
-                    consumed = true;
-                }
+                consumed = navigateHome(textPane, document, commandPressed, 
shiftPressed);
             } else if (keyCode == Keyboard.KeyCode.END
                    || (keyCode == Keyboard.KeyCode.RIGHT && metaPressed)) {
-                int end;
-                int index = selectionStart + selectionLength;
-
-                if (commandPressed) {
-                    // Move the caret to end of the text
-                    end = textPane.getCharacterCount() - 1;
-                } else {
-                    // Move the caret to the end of the line
-                    int rowOffset = getRowOffset(document, index);
-                    int rowLength = getRowLength(document, index);
-                    end = rowOffset + rowLength;
-                }
-
-                if (shiftPressed) {
-                    // TODO: if last direction was right, then extend further 
right
-                    // but if left, then reverse selection from the pivot point
-                    selectionLength += end - index;
-                } else {
-                    selectionStart = end;
-                    selectionLength = 0;
-                }
-
-                if (selectionStart + selectionLength <= 
textPane.getCharacterCount()) {
-                    textPane.setSelection(selectionStart, selectionLength);
-                    scrollCharacterToVisible(selectionStart + selectionLength);
-                    consumed = true;
-                }
+                consumed = navigateEnd(textPane, document, commandPressed, 
shiftPressed);
             } else if (keyCode == Keyboard.KeyCode.LEFT) {
                 if (wordNavPressed) {
                     // Move the caret to the start of the next word to our left

Modified: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java 
(original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinListItemView.java 
Wed Nov  1 02:16:53 2023
@@ -21,15 +21,26 @@ import java.util.Iterator;
 import org.apache.pivot.wtk.text.List;
 import org.apache.pivot.wtk.text.TextNode;
 
+/**
+ * View (which includes layout) for list items inside a <code>TextPane</code>.
+ */
 class TextPaneSkinListItemView extends TextPaneSkinVerticalElementView {
 
+    /** The included text node for the index for this list item. */
     private TextNode indexTextNode;
+    /** The view for the index text node. */
     private TextPaneSkinTextNodeView indexTextNodeView;
 
-    public TextPaneSkinListItemView(TextPaneSkin textPaneSkin, List.Item 
listItem) {
+    /**
+     * Construct one of these from the model references.
+     *
+     * @param textPaneSkin Skin of the entire <code>TextPane</code> component.
+     * @param listItem     The list item we represent, which has the data to 
layout and display.
+     */
+    TextPaneSkinListItemView(final TextPaneSkin textPaneSkin, final List.Item 
listItem) {
         super(textPaneSkin, listItem);
 
-        this.indexTextNode = new TextNode("");
+        indexTextNode = new TextNode("");
     }
 
     @Override
@@ -42,13 +53,18 @@ class TextPaneSkinListItemView extends T
         insert(indexTextNodeView, 0);
     }
 
-    public void setIndexText(String indexText) {
+    /**
+     * Set the text for this item's index.
+     *
+     * @param indexText The new text for this item's index.
+     */
+    public void setIndexText(final String indexText) {
         indexTextNode.setText(indexText);
         indexTextNodeView.invalidateUpTree();
     }
 
     @Override
-    protected void childLayout(int breakWidth) {
+    protected void childLayout(final int breakWidth) {
         int bw = breakWidth;
         indexTextNodeView.layout(bw);
 
@@ -76,6 +92,11 @@ class TextPaneSkinListItemView extends T
         setSize(width, height);
     }
 
+    /**
+     * Calculate and return the width of our index text.
+     *
+     * @return Width of our index text.
+     */
     public int getIndexTextWidth() {
         return indexTextNodeView.getWidth();
     }

Modified: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java?rev=1913476&r1=1913475&r2=1913476&view=diff
==============================================================================
--- 
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java 
(original)
+++ 
pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/TextPaneSkinNumberedListView.java 
Wed Nov  1 02:16:53 2023
@@ -22,15 +22,18 @@ import org.apache.pivot.wtk.text.Numbere
 import org.apache.pivot.wtk.text.NumberedList.Style;
 import org.apache.pivot.wtk.text.NumberedListListener;
 
+/**
+ * Skin implementation of the {@link NumberedList} elements.
+ */
 class TextPaneSkinNumberedListView extends TextPaneSkinListView implements 
NumberedListListener {
 
     private static class RomanValue {
         public final int integerVal;
         public final String romanNumeral;
 
-        public RomanValue(int integerVal, String romanNumeral) {
-            this.integerVal = integerVal;
-            this.romanNumeral = romanNumeral;
+        public RomanValue(final int intVal, final String roman) {
+            integerVal = intVal;
+            romanNumeral = roman;
         }
     }
 
@@ -50,7 +53,7 @@ class TextPaneSkinNumberedListView exten
         new RomanValue(1, "I")
     };
 
-    private static String int2roman(int n) {
+    private static String int2roman(final int n) {
         int num = n;
         StringBuffer result = new StringBuffer(10);
 
@@ -65,8 +68,8 @@ class TextPaneSkinNumberedListView exten
         return result.toString();
     }
 
-    private static String int2alpha(int n) {
-        return (char) ('A' + n - 1) + "";
+    private static String int2alpha(final int n) {
+        return Character.toString((char) (n - 1 + 'A'));
     }
 
     public TextPaneSkinNumberedListView(TextPaneSkin textPaneSkin, 
NumberedList numberedList) {


Reply via email to