JSR199 FileObjects don't obey general contract of equals.
peter at ahe.dk
Thu Jun 21 11:22:21 PDT 2007
You're right about that. I guess it would be better to use
getAbsoluteFile only, which was always the intent.
On 6/21/07, Jonathan Gibbons <Jonathan.Gibbons at sun.com> wrote:
> Compiler gets the canonical path of one file successfully.
> Network goes down (It has been known to happen, even at Sun.)
> Compiler tries to get the canonical path of a similar file, using an
> NFS path like /net/machine.domain/file, which fails because
> machine.domain is inaccessible. java.io.File throws an IOException
> because it cannot determine the canonical file.
> The compiler falls back to using getAbsoluteFile, and incorrectly
> determines these files are different, even though they might have
> been symlink equivalent had the network been working.
> That's not a bug in java.io.File. It is arguably a bug in the
> compiler for using File.getCanonicalFile in JavaFileObject.equals.
> -- Jon
> On Jun 21, 2007, at 10:39 AM, Peter Ahé wrote:
> > On 6/21/07, Jonathan Gibbons <Jonathan.Gibbons at sun.com> wrote:
> >> My concern would be the unspecified nature of IOExceptions, and
> >> whether network failure outside the virtual machine could lead the
> >> code to incorrectly determine that two files were different, when in
> >> fact they were "symlink-equal" in a part of the path that is no
> >> longer accessible by virtue of the network failure.
> > Unless somebody is deliberately trying to foil the compiler, that
> > situation must be characterized as a bug in java.io.File, not the
> > compiler.
> > Cheers,
> > Peter
More information about the compiler-dev