On Fri, 30 Sep 2022 10:57:37 GMT, Tejesh R <[email protected]> wrote:
>> When a custom `FileView` is used and folder traversal is restricted to a
>> particular directory NPE occurs when user tries to traverse/select other
>> folders except traversable folder. This is caused because when user selects
>> folder other than traversable, the traversal is rejected and hence no file
>> is selected as `currentDirectory` of `JFileChooser`. When user tries to
>> access the restricted folder second time, previous selected file check is
>> failing because of NPE since `getFileChooser().getCurrentDirectory();` is
>> null. To fix the issue, NPE check is added.
>
> Tejesh R has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Updated based on review comments
You say that the current directory in `JFileChooser` gets set to `null` because
of forbidden navigation to a folder which is not traversable. You avoid the NPE
by a null-check.
However, you should prevent the current directory to be set to `null`. If
navigation is not allowed, the current directory should remain unchanged
_instead of being reset to `null`_.
src/java.desktop/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java
line 1271:
> 1269: File curDir = getFileChooser().getCurrentDirectory();
> 1270:
> 1271: if (curDir != null && !curDir.equals(f)) {
If `f` is always not null, you can you use `!f.equals(curDir)`.
test/jdk/javax/swing/JFileChooser/FileViewNPETest.java line 84:
> 82: String path = "";
> 83: if (Platform.isWindows()) {
> 84: path = "C:" + File.separator + "temp";
It's rare but possible that Windows is installed not on `C:` drive.
test/jdk/javax/swing/JFileChooser/FileViewNPETest.java line 114:
> 112: } else {
> 113: return false;
> 114: }
I can be simplified to:
Suggestion:
return ((filePath != null) && (filePath.isDirectory())
&& filePath.getAbsolutePath().startsWith(basePath));
I'm not insisting though.
-------------
PR: https://git.openjdk.org/jdk/pull/10485