The most recent webrev is http://cr.openjdk.java.net/~sdrach/8153654/webrev.11/ 
<http://cr.openjdk.java.net/~sdrach/8153654/webrev.11/>

Comments inline

>> The latest web revs.  Answers to questions in-line below:
>> 
>> http://cr.openjdk.java.net/~sdrach/8153654/webrev.10/
>> 
>> http://cr.openjdk.java.net/~sdrach/8153654/webrev.jdk/
> 
> This looks pretty good. My main comment is in VersionHelper (see below).
> 
> ClassFileReader.java
> 
> 337                     String[] msg = {"err.multirelease.option.exists", 
> f.getName()};
> 389                             String[] msg = 
> {"err.multirelease.jar.malformed”,
> 390                                     jarfile.getName(), rn
> 391                             };
> 
> `msg` is not used.  These lines can be removed.

Done

> 
> line 81-95: this wants to add to VersionHelper if it’s a versioned entry.  I 
> suggest to move this to VersionHelper, something like this and replace the 
> add method.

I did essentially the same thing, but not exactly the same.

> 
> public static void addIfVersionedEntry(Path jarfile, String realEntryName, 
> String className) {
>    if (realEntryName.startsWith(META_INF_VERSIONS)) {
>        int len = META_INF_VERSIONS.length();
>        int n = realEntryName.indexOf('/', len);
>        if (n > 0) {
>            String version = realEntryName.substring(len, n);
>            assert (Integer.parseInt(version) > 8);
> 
>            String v = versionMap.get(className);
>            if (v != null && !v.equals(version)) {
>                // name associated with a different ClassFile
>                throw new 
> MultiReleaseException("err.multirelease.version.associated", className,
>                    v, version);
>            }
>            versionMap.put(className, version);
>        } else {
>            throw new MultiReleaseException("err.multirelease.jar.malformed",
>                jarfile.toString(), realEntryName);
>        }
>    }
> }
> 
> I prefer to call String::length rather than hardcoding the length.

OK

>  I don’t see why VersionHelper caches ClassFile.  

A JarEntry (base) name has a one to many relationship with versions.  This 
implies the class name also has a one to many relationship with versions.  But 
a ClassFile (derived from the contents of the JarEntry) has a one to one 
relationship with version.  We desire a one to one
relationship for className to version and one way to assure that is to create 
two maps as I now have done.  I think the code is more obvious  now, at least I 
hope it is.

> I think it can cache a map from class name to the version for now.  We may 
> have to handle duplicated classes in more than one modular jar (it’s not 
> exported and should be allowed).  We could file a separate issue to look into 
> later.
> 
> This needs a CCC for the new --multi-release option.

That’s next.

> 
> Mandy

Reply via email to