Preferring class files to source files in ClassReader.java
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Nov 13 14:58:30 PST 2013
Not before 9.
-- Jon
On 11/13/2013 02:38 PM, Jeremy Manson wrote:
> Hi folks,
>
> A bit of background:
>
> - We use a content-addressable storage around here, so to minimize the
> diffs between two JAR files (and get more hits in our
> content-addressable storage), we reset all timestamps in JAR files to
> the same values.
> - Some of our users include both source and class files in their JAR
> files.
> - When those users want to put those JAR files on the classpath for
> javac, and use them to compile other files, they may not have included
> enough on the classpath to compile the source files.
> - We've worked around this by favoring classfiles when the two files
> are of the same age. This has the added benefit of not having to
> recompile the source files when they are found.
> - What do you think? Too esoteric? Wait for JDK9?
>
> Jeremy
>
> diff --git
> a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
> b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
> --- a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
> +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
> @@ -2690,7 +2690,11 @@
> long bdate = b.getLastModified();
> // 6449326: policy for bad lastModifiedTime in ClassReader
> //assert adate >= 0 && bdate >= 0;
> - return (adate > bdate) ? a : b;
> + return (adate > bdate) ? a :
> + (bdate > adate) ? b :
> + // These dates can be equal if the files' timestamps
> were reset.
> + // In this case, prefer the .class file.
> + (a.getKind() == JavaFileObject.Kind.CLASS) ? a : b;
> }
> }
>
More information about the compiler-dev
mailing list