On Wed, 12 Jul 2023 08:33:30 GMT, Andrey Turbanov <aturba...@openjdk.org> wrote:
> Found many typos in java.desktop by IDEA's inspection `Proofreading | Typo` Please break such changes into smaller batches: reviewing nearly 200 files is tedious and requires lots of time. Changesets consisting of no more than 20 or 40 files would likely be reviewed quicker. src/java.desktop/macosx/classes/com/apple/laf/AquaFileChooserUI.java line 1417: > 1415: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 1416: // the filter to the choosable filters list when the filter > 1417: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/share/classes/com/sun/imageio/plugins/gif/GIFImageWriter.java line 637: > 635: greyscale images but explicitly resetting it here > 636: is potentially not right thing to do until we > have way > 637: to find whether current value was explicitly set > by Suggestion: greyscale images but explicitly resetting it here is potentially not the right thing to do until we have a way to find whether the current value was explicitly set by src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java line 1473: > 1471: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 1472: // the filter to the choosable filters list when the filter > 1473: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java line 778: > 776: if (value != null) { > 777: //This is a workaround as the "slider-length" property > has been > 778: //deprecated for GtkScale from gtk 3.20, so default > value of 31 Suggestion: //deprecated for GtkScale from gtk 3.20, so the default value of 31 src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java line 781: > 779: //is used and makes rendering of slider wrong. Value 14 > is being > 780: //used as default value for Slider.thumbHeight is 14 and > making > 781: //width 14 as well makes slider thumb render in proper > shape Suggestion: //is used and makes rendering of the slider wrong. Value 14 is //used as the default value for Slider.thumbHeight and making //width 14 as well makes the slider thumb render in proper shape src/java.desktop/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java line 831: > 829: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 830: // the filter to the choosable filters list when the filter > 831: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/share/classes/java/awt/FlowLayout.java line 654: > 652: private static final int currentSerialVersion = 1; > 653: /** > 654: * This represent the {@code currentSerialVersion} Suggestion: * This represents the {@code currentSerialVersion} src/java.desktop/share/classes/java/awt/GridLayout.java line 438: > 436: } > 437: // 4370316. To position components in the center we should: > 438: // 1. get an amount of extra space within Container Suggestion: // 1. get the amount of extra space within Container src/java.desktop/share/classes/java/awt/GridLayout.java line 441: > 439: // 2. incorporate half of that value to the left/top position > 440: // Note that we use truncating division for widthOnComponent > 441: // The reminder goes to extraWidthAvailable Suggestion: // The remainder goes to extraWidthAvailable src/java.desktop/share/classes/java/beans/DefaultPersistenceDelegate.java line 300: > 298: > 299: // The ComponentListener is added automatically, when > 300: // Container:add is called on the parent. Suggestion: // Container.add is called on the parent. I believe it refers to the `add` method in `Container` class, in Java we usually use dots to refer to methods. src/java.desktop/share/classes/java/beans/MetaData.java line 307: > 305: > 306: /** > 307: * Invoke Timestamp getNanos. Should it be `Timestamp.getNanos`? src/java.desktop/share/classes/javax/swing/BufferStrategyPaintManager.java line 694: > 692: * > 693: * @param create If true, and the BufferStrategy is currently > null, > 694: * one will be created. Suggestion: * @param create If true and the BufferStrategy is currently null, * one will be created. I'm pretty sure the comma shouldn't be here: it means “if true and *if* the BufferStrategy is…”. src/java.desktop/share/classes/javax/swing/JLayeredPane.java line 468: > 466: * @return an int giving the component's position, where 0 is the > 467: * topmost position and the highest index value = the count > 468: * of components at that layer, minus 1 Suggestion: * of components at that layer minus 1 Comma is confusing here, it means “the count … minus 1”. src/java.desktop/share/classes/javax/swing/JMenuItem.java line 189: > 187: /** > 188: * Initializes the focusability of the <code>JMenuItem</code>. > 189: * <code>JMenuItem</code>'s are focusable, but subclasses may Suggestion: * <code>JMenuItem</code>'s are non-focusable, but subclasses may The code calls `setFocusable(false)`; otherwise, the following sentence “but subclasses may want to be” doesn't make sense. Thus, it implies a negation in the preceding sentence. src/java.desktop/share/classes/javax/swing/JMenuItem.java line 811: > 809: * the <code>AccessibleContext</code> takes the form of an > 810: * <code>AccessibleJMenuItem</code>. > 811: * A new AccessibleJMenuItem instance is created if necessary. Suggestion: * A new <code>AccessibleJMenuItem</code> instance is created if necessary. src/java.desktop/share/classes/javax/swing/JPopupMenu.java line 345: > 343: Point popupLocation = new Point(xPosition, yPosition); > 344: > 345: if(popupPositionFixDisabled == true || > GraphicsEnvironment.isHeadless()) { Suggestion: if (popupPositionFixDisabled || GraphicsEnvironment.isHeadless()) { The code below has spaces after 'if'; comparing a boolean value to `true` is redundant. src/java.desktop/share/classes/javax/swing/JTree.java line 3108: > 3106: > 3107: // start search from the next/previous element from the > 3108: // selected element Suggestion: // start search from the next/previous element of the // selected element Does it sound better? src/java.desktop/share/classes/javax/swing/PopupFactory.java line 540: > 538: > 539: /** > 540: * As we recycle the <code>Window</code>, we don't want to > dispose it, Suggestion: * As we recycle the <code>Window</code>, we don't want to dispose of it, The verb *“dispose”* requires the preposition *“of”*. src/java.desktop/share/classes/javax/swing/RepaintManager.java line 1868: > 1866: */ > 1867: private final class ProcessingRunnable implements Runnable { > 1868: // If true, we're wanting on the EventQueue. Suggestion: // If true, we're waiting on the EventQueue. src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java line 285: > 283: > 284: // Before all the checks below we first see if it's an FTP > provider or a focus cycle root. > 285: // If it's the case just go down cycle (if it's set to > "implicit"). Suggestion: // If it's the case, just go down cycle (if it's set to "implicit"). src/java.desktop/share/classes/javax/swing/SwingWorker.java line 251: > 249: > 250: /** > 251: * everything is run inside this FutureTask. Also it is used as Suggestion: * Everything is run inside this FutureTask. Also it is used as src/java.desktop/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java line 1030: > 1028: if(!lastFocused.requestFocusInWindow()) { > 1029: // Workaround for 4810575. > 1030: // If lastFocused is not in currently focused window Suggestion: // If lastFocused is not in currently focused window, src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java line 1121: > 1119: > 1120: // We use the location from the UI directly, as the > location the > 1121: // JSplitPane itself maintains is not necessary correct. Suggestion: // JSplitPane itself maintains is not necessarily correct. src/java.desktop/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java line 341: > 339: } > 340: > 341: // These two methods were overloaded and made public. This was > probably a Suggestion: // These two methods were overridden and made public. This was probably a Overloading means a different thing: two or more methods with the same name but with different parameters, doesn't it? src/java.desktop/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java line 414: > 412: > 413: // This method was overloaded and made public. This was probably > 414: // mistake in the implementation. The functionality that they > used to Suggestion: // This method was overridden and made public. This was probably a // mistake in the implementation. The functionality that it used to src/java.desktop/share/classes/javax/swing/plaf/metal/MetalComboBoxUI.java line 416: > 414: // mistake in the implementation. The functionality that they > used to > 415: // provide is no longer necessary and should be removed. However, > 416: // removing them will create an incompatible API change. Suggestion: // removing it will create an incompatible API change. src/java.desktop/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java line 1202: > 1200: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 1201: // the filter to the choosable filters list when the filter > 1202: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/share/classes/javax/swing/plaf/nimbus/DropShadowEffect.java line 45: > 43: /** > 44: * Get the type of this effect, one of UNDER,BLENDED,OVER. UNDER > means the result of apply effect should be painted > 45: * under the src image. BLENDED means the result of apply effect > contains a modified src image so just it should be Suggestion: * under the src image. BLENDED means the result of apply effect contains a modified src image so it should just be It just doesn't sound right. Should it be *“the result of applying the effect”*? src/java.desktop/share/classes/javax/swing/plaf/nimbus/Effect.java line 47: > 45: /** > 46: * Get the type of this effect, one of UNDER,BLENDED,OVER. UNDER > means the result of apply effect should be painted > 47: * under the src image. BLENDED means the result of apply effect > contains a modified src image so just it should be Suggestion: * under the src image. BLENDED means the result of apply effect contains a modified src image so just it should just be src/java.desktop/share/classes/javax/swing/plaf/nimbus/Effect.java line 48: > 46: * Get the type of this effect, one of UNDER,BLENDED,OVER. UNDER > means the result of apply effect should be painted > 47: * under the src image. BLENDED means the result of apply effect > contains a modified src image so just it should be > 48: * painted. OVER means the result of apply effect should be painted > over the src image. Based on the comment for the `applyEffect` method, it should rather be *“the result of applying the effect”* in all the cases and in `DropShadowEffect.java`. src/java.desktop/share/classes/javax/swing/plaf/nimbus/Effect.java line 71: > 69: * @param h The height of the src image to apply effect to, this > allow the src and dst buffers to be bigger than > 70: * the area the need effect applied to it > 71: * @return The result of apply Suggestion: * @return The result of applying the effect src/java.desktop/share/classes/javax/swing/plaf/nimbus/InnerShadowEffect.java line 45: > 43: /** > 44: * Get the type of this effect, one of UNDER,BLENDED,OVER. UNDER > means the result of apply effect should be painted > 45: * under the src image. BLENDED means the result of apply effect > contains a modified src image so just it should be Suggestion: * under the src image. BLENDED means the result of applying the effect contains a modified src image so it should just be src/java.desktop/share/classes/javax/swing/plaf/nimbus/InnerShadowEffect.java line 48: > 46: * painted. OVER means the result of apply effect should be painted > over the src image. > 47: * > 48: * @return The effect type Should we replace this copied javadoc with `{@inheritDoc}`? The text from `Effect.getEffectType` isn't modified at all. This looks the correct fix — eliminate doc duplication. src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java line 548: > 546: } > 547: > 548: // if the width is even, bump it up one. This is critical Suggestion: // if the width is even, bump it up by one. This is critical src/java.desktop/share/classes/javax/swing/plaf/synth/SynthParser.java line 185: > 183: > 184: /** > 185: * defaultsProperties are placed here. Suggestion: * Default properties are placed here. Does it sound better? src/java.desktop/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java line 115: > 113: // key "JComponent.sizeVariant" scales for large/small/mini > 114: // components are based on Apples LAF > 115: String scaleKey = (String)scrollbar.getClientProperty( This looks like a duplicate code in `Synth*UI` which boils down to determining the scale based on the value of `scaleKey` and then applying it to a set of variables. Obviously, it's out of scope for this bug, yet it may be worth exploring… src/java.desktop/share/classes/javax/swing/text/CompositeView.java line 47: > 45: * <p>While <code>CompositeView</code> > 46: * does not impose a layout policy on its child <code>View</code>s, > 47: * it does allow for inserting the child <code>View</code>s Suggestion: * it does allow for insetting the child <code>View</code>s It's non-standard, it refers to applying *insets*. src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java line 1290: > 1288: Position.Bias guessBiasForOffset(int offset, Position.Bias lastBias, > 1289: boolean lastLTR) { > 1290: // There is an ambiguous case here. That if your model looks > like: Suggestion: // There is an ambiguous case here. If your model looks like: src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java line 1293: > 1291: // abAB with the cursor at abB]A (visual representation of > 1292: // 3 forward) deleting could either become abB] or > 1293: // ab[B. I'ld actually prefer abB]. But, if I implement that Suggestion: // ab[B. I'd actually prefer abB]. But, if I implement that src/java.desktop/share/classes/javax/swing/text/DefaultFormatter.java line 1: > 1: /* Perhaps, we should leave **“overwrite”** only. A *strike-through* means a line drawn over the text, ~~like this~~. I hardly understand what *“overstrike”* means, see the `setOverwriteMode` method: https://github.com/openjdk/jdk/blob/e22762c010e5cd4c313e5f2816b67d75862935a7/src/java.desktop/share/classes/javax/swing/text/DefaultFormatter.java#L162-L164 As far as I understand, it refers to the **overwrite mode** when typed characters aren't inserted but instead they replace the characters present in the text. To clarify the meaning, * @param overwriteMode Indicates if overwrite or overstrike mode is used */ public void setOverwriteMode(boolean overwriteMode) { src/java.desktop/share/classes/javax/swing/text/DefaultFormatter.java line 67: > 65: private boolean allowsInvalid; > 66: > 67: /** If true, editing mode is in overwrite (or strikethrough). */ Suggestion: /** If true, overwrite mode is enabled. */ src/java.desktop/share/classes/javax/swing/tree/DefaultTreeModel.java line 351: > 349: * the array of the children objects that were removed. > 350: * > 351: * @param node parent node which children were removed Suggestion: * @param node parent node from which children were removed src/java.desktop/share/classes/sun/awt/FontConfiguration.java line 1556: > 1554: } > 1555: > 1556: /* Same as getComponentFontID() except this method returns the > fontID define by Suggestion: /* Same as getComponentFontID() except this method returns the fontID defined by src/java.desktop/share/classes/sun/print/ProxyPrintGraphics.java line 95: > 93: /* Spec implies dispose() should flush the page, but the implementation > 94: * has in fact always done this on the getGraphics() call, thereby > 95: * ensuring that multiple pages are cannot be rendered simultaneously. Suggestion: * ensuring that multiple pages cannot be rendered simultaneously. src/java.desktop/share/classes/sun/swing/FilePane.java line 134: > 132: * This component is intended to be used in a subclass of > 133: * javax.swing.plaf.basic.BasicFileChooserUI. It relies heavily on the > 134: * implementation of BasicFileChooserUI, and is intended to be API > compatible Suggestion: * implementation of BasicFileChooserUI and is intended to be API compatible Comma is not needed here. src/java.desktop/share/classes/sun/swing/SwingUtilities2.java line 345: > 343: * > 344: * @param c JComponent requesting FontMetrics, may be null > 345: * @param g Graphics Graphics Suggestion: * @param g Graphics src/java.desktop/share/classes/sun/swing/SwingUtilities2.java line 348: > 346: * @param font Font to get FontMetrics for > 347: */ > 348: @SuppressWarnings("deprecation") Just below: - // from the widget to layout out text, otherwise we can get + // from the widget to lay out text, otherwise we can get src/java.desktop/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java line 947: > 945: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 946: // the filter to the choosable filters list when the filter > 947: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/unix/classes/sun/awt/X11/XCheckboxMenuItemPeer.java line 52: > 50: ************************************************/ > 51: > 52: //Prom CheckboxMenuItemPeer Suggestion: //From CheckboxMenuItemPeer However, I'd rather remove the comment altogether: the IDE shows that it implements an interface, `CheckboxMenuItemPeer` in this case. src/java.desktop/unix/classes/sun/awt/X11/XChoicePeer.java line 118: > 116: // use a combination of firstPress and wasDragged variables. > 117: // The only difference in dragging and wasDragged is: last one will > not > 118: // set to false on mouse ungrab. It become false after > MouseReleased() finishes. Suggestion: // set to false on mouse ungrab. It becomes false after MouseReleased() finishes. src/java.desktop/unix/classes/sun/awt/X11/XChoicePeer.java line 1133: > 1131: /* Returns true if the MouseEvent coords > 1132: * are inside of the Choice itself (it doesn't depend on > 1133: * if this choice opened or not). Suggestion: * whether this choice opened or not). src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java line 1273: > 1271: // 'Component'-instances are "remembered". And events are > dispatched to > 1272: // these remembered components, without checking, if > XTextAreaPeer has > 1273: // replaced these instances with another ones. This also > applies to Suggestion: // replaced these instances with other ones. This also applies to src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java line 516: > 514: PrintService defService; > 515: if (name != null && (defService = getDefaultPrintService()) != > null) { > 516: /* To avoid executing a unix command see if the client is > asking Suggestion: /* To avoid executing a unix command, see if the client is asking src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java line 44: > 42: // NOTE: MetalCheckBoxUI inherits from MetalRadioButtonUI instead > 43: // of BasicCheckBoxUI because we want to pick up all the > 44: // painting changes made in MetalRadioButtonUI. Does it even apply here? Should it be instead? Suggestion: // NOTE: WindowsCheckBoxUI inherits from WindowsRadioButtonUI instead // of BasicCheckBoxUI because we want to pick up all the // painting changes made in WindowsRadioButtonUI. src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java line 1272: > 1270: // NOTE: we shouldn't have to do this, since JFileChooser > adds > 1271: // the filter to the choosable filters list when the filter > 1272: // is set. Lets be paranoid just in case someone overrides Suggestion: // is set. Let's be paranoid just in case someone overrides src/java.desktop/windows/classes/sun/java2d/d3d/D3DSurfaceData.java line 961: > 959: void disableAccelerationForSurface() { > 960: // for on-screen surfaces we need to make sure a backup GDI > surface is > 961: // is used until a new one is set (which may happen during a > resize). We Suggestion: // for on-screen surfaces we need to make sure a backup GDI surface is // used until a new one is set (which may happen during a resize). We src/java.desktop/windows/classes/sun/java2d/d3d/D3DSurfaceData.java line 962: > 960: // for on-screen surfaces we need to make sure a backup GDI > surface is > 961: // is used until a new one is set (which may happen during a > resize). We > 962: // don't want the screen update manager to replace the > surface right way Suggestion: // don't want the screen update manager to replace the surface right away ------------- Changes requested by aivanov (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/14847#pullrequestreview-1600838079 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309080750 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309086752 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309088644 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309092167 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309093695 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309095668 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309099295 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309100522 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309101492 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309106855 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309109398 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309115662 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309122200 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309127430 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309128217 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309129658 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309135107 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309137008 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309138791 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309159535 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309161535 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309168222 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309170693 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309177171 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309178985 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309179206 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309180019 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309185080 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309187932 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309187686 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309186380 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309189774 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309193940 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309195645 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309196696 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309201277 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309204741 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309205720 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309206307 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309216328 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309217716 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309225940 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309228312 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309256150 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309258032 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309259695 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309261018 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309263760 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309269770 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309271576 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309272085 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309277505 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309281489 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309283345 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309283892 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309286547 PR Review Comment: https://git.openjdk.org/jdk/pull/14847#discussion_r1309286878