Hi Paul, > Hi. I would like to point out that it appears JarFile.Release enum is > specifically tailored to address multi-version jar specification.
I think you are looking at the current code, not the webrev. What the webrev does is remove the JarFile.Release enum. > However, I find nothing in that enum specific except for the documentation > and BASE_VERSION. Wouldn't it better to create a top-level Release enum that > can be used to identify anything in the JDK with release semantics -- apart > from Jar files? > > Cheers, > Paul > > On Tue, Jun 21, 2016 at 1:23 PM, Steve Drach <steve.dr...@oracle.com > <mailto:steve.dr...@oracle.com>> wrote: > Hi Paul, > > I believe this webrev addresses your concerns: > > http://cr.openjdk.java.net/~sdrach/8150680/webrev.03/index.html > <http://cr.openjdk.java.net/~sdrach/8150680/webrev.03/index.html> > <http://cr.openjdk.java.net/~sdrach/8150680/webrev.03/index.html > <http://cr.openjdk.java.net/~sdrach/8150680/webrev.03/index.html>> > > > > On Jun 16, 2016, at 3:49 PM, Paul Sandoz <paul.san...@oracle.com > > <mailto:paul.san...@oracle.com>> wrote: > > > > > >> On 16 Jun 2016, at 14:44, Steve Drach <steve.dr...@oracle.com > >> <mailto:steve.dr...@oracle.com>> wrote: > >> > >> This webrev uses methods instead of fields to return the base and runtime > >> values used internally by JarFile. I’ve also optimized it a bit. > >> > >> http://cr.openjdk.java.net/~sdrach/8150680/webrev.02/ > >> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.02/> > >> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.02/ > >> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.02/>> > >> > > > > JarFIle > > — > > > > 132 private final static int base_version; > > > > You are using lower case, here, this caught me out as i thought it was an > > non-static field. Call it something like BASE_VERSION_MAJOR. > > > > > > 155 BASE_VERSION = > > Runtime.Version.parse(String.valueOf(base_version)); > > > > 164 RUNTIME_VERSION = > > Runtime.Version.parse(String.valueOf(runtimeVersion)); > > > > Use Integer.toString rather than String.valueOf (also update specification). > > > > > > 337 public final Runtime.Version getVersion() { > > 338 if (VERSION == null) { > > 339 if (isMultiRelease()) { > > 340 VERSION = > > Runtime.Version.parse(String.valueOf(version)); > > 341 } else { > > 342 VERSION = BASE_VERSION; > > 343 } > > 344 } > > 345 return VERSION; > > 346 } > > 347 private Runtime.Version VERSION; > > > > You are using the style for a static field. > > > > In the JarFile constructor why don’t you just store the version passed in > > unless MULTI_RELEASE_FORCED? > > > > Have final fields: > > > > final Runtime.Version version; > > final int version_major; > > > > then do: > > > > if (MULTI_RELEASE_FORCED || version.major() == RUNTIME_VERSION.major()) { > > // This also deals with the common case where the value from > > JarFile.runtimeVersion() is passed > > this.version = RUNTIME_VERSION; > > } else if (version.major() <= BASE_VERSION_MAJOR) { > > // This also deals with the common case where the value from > > JarFile.baseVersion() is passed > > this.version = BASE_VERSION; > > } else { > > // Canonicalize > > this.version = Runtime.Version.parse(Integer.toString(version.major())); > > } > > this.version_major = version.major(); > > > > Paul. > > > > > > > > > >>> On Jun 15, 2016, at 4:31 PM, Joseph D. Darcy <joe.da...@oracle.com > >>> <mailto:joe.da...@oracle.com>> wrote: > >>> > >>> Steve, > >>> > >>> In JarFile, please use methods not fields to return the new information. > >>> The information in question is not constant across versions. Using > >>> methods instead of fields avoid over-committing on a particular > >>> implementation, etc. > >>> > >>> Cheers, > >>> > >>> -Joe > >>> > >>> On 6/15/2016 3:49 PM, Steve Drach wrote: > >>>> I’ve updated the webrev to address the issue of the constructor > >>>> accepting values like Version.parse(“7.1”) > >>>> > >>>> http://cr.openjdk.java.net/~sdrach/8150680/webrev.01/ > >>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.01/> > >>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.01/ > >>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.01/>> > >>>> > >>>>> On Jun 15, 2016, at 8:56 AM, Steve Drach <steve.dr...@oracle.com > >>>>> <mailto:steve.dr...@oracle.com>> wrote: > >>>>> > >>>>>>> Please review the following changeset: > >>>>>>> > >>>>>>> webrev: > >>>>>>> http://cr.openjdk.java.net/~sdrach/8150680/webrev.00/index.html > >>>>>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.00/index.html> > >>>>>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.00/index.html > >>>>>>> <http://cr.openjdk.java.net/~sdrach/8150680/webrev.00/index.html>> > >>>>>>> issue: https://bugs.openjdk.java.net/browse/JDK-8150680 > >>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8150680> > >>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8150680 > >>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8150680>> > >>>>>>> > >>>>>>> The issue calls for reconsidering the JarFile.Release enum. A > >>>>>>> comment in the bug report suggests replacing JarFile.Release with > >>>>>>> Runtime.Version, and that’s what I did. Specifically I removed the > >>>>>>> enum, changed the constructor to accept a Runtime.Version object > >>>>>>> instead of a JarFile.Release object, updated all places in the JDK > >>>>>>> that invoked the constructor and updated all tests. > >>>>>>> > >>>>>> Moving to Runtime.Version seems right but doesn't the javadoc for the > >>>>>> constructor need to be updated to make it clear how it behavior when > >>>>>> invoking with something like Version.parse("7.1") ? If I read the code > >>>>>> correctly then this will be accepted and getVersion() will return 7.1. > >>>>> Yes, it needs to be updated and it needs to be fixed. Thanks for > >>>>> finding that. > >>>>> > >>>>>> Fields or methods is another discussion point for the base and runtime > >>>>>> versions. > >>>>> My thinking is, in this case fields and methods are equivalent, the > >>>>> method not giving any more flexibility than a field. For example the > >>>>> method JarFile.baseVersion will just return the value contained in the > >>>>> private final static field BASE_VERSION. Or the public final static > >>>>> field BASE_VERSION can be directly accessed. I see no advantage of a > >>>>> method here. But I’m willing to be enlightened. > >>>>> > >>>>>> -Alan. > >>> > >> > > > >