Hi Mandy,

On 03/16/2016 10:03 PM, Mandy Chung wrote:
I have cleaned up the code to use toPackage instead:
   
http://cr.openjdk.java.net/~mchung/jigsaw/webrevs/jigsaw-m3/webrev-03-16/index.html

Mandy

Was your intention for public methods getDefinedPackage(name), getPackages() and getDefinedPackages() to return transient Package instances in cases where NamedPackage(s) are present in 'packages' map? Previously, NamedPackage(s) were replaced with Package(s) in 'packages' map when 1st requested. The toPackage(String, NamedPackage, Module) does not replace - it just creates new Package instance if needed.

Perhaps we need a method like:

private Package definePackageIfNeeded(String name, Module m, /* nullable */ NamedPackage np) {
    return (np instanceof Package)
        ? (Package) np
        : packages.compute(name, (n, p) ->
              (p instanceof Package)
                  ? (Package) p
                  : NamedPackage.toPackage(n, m));
}


Then we can use it everywhere:

    public final Package getDefinedPackage(String name) {
        NamedPackage p = packages.get(name);
return (p == null) ? null : definePackageIfNeeded(p.packageName(), p.module(), p);
    }

    Stream<Package> packages() {
        return packages.values().stream()
.map(p -> definePackageIfNeeded(p.packageName(), p.module(), p));
    }

    Package definePackage(String name, Module m) {
        if (name.isEmpty() && m.isNamed()) {
            throw new InternalError("unnamed package in  " + m);
        }

        return definePackageIfNeeded(name, m, null);
    }



What do you think?


Regards, Peter

Reply via email to