JFileChooser impl uses getCanonicalFile() internally during FS browsing.
If the user has a file and a symlink, e.g.:
/data -> /home/user/data,
and wants to select the file through that symlink, he can't browse there,
because the JFileChooser will convert /data to /home/user/data
There are legitimate uses for the need to get the user selected symlink
instead of the canonical path to the target, example:
The selected path may be persisted between app sessions and the user may need
to change the target of the symlink (different version of a library, some VCS uses symlinks for paths to latest valid bits, ...)
File.getCanonical* calls are not apparently made from JFileChooser itself, nor from FileSystemView, but are made from various FileChooserUI subclasses.