8173393: Module system implementation refresh (2/2017)

Paul Sandoz paul.sandoz at oracle.com
Wed Feb 8 03:10:53 UTC 2017


Hi,

Just minor stuff in the JDK area (i browsed quickly through the tests).

Paul.


java.lang.module.Configuration
—

 321      * @implNote In the implementation then observability of modules may depend

s/then/the


ModuleDescriptor
—

2662     private static <T extends Object & Comparable<? super T>>
2663     int compare(Set<T> s1, Set<T> s2) {
2664         Iterator<T> iterator1 = new TreeSet<>(s1).iterator();
2665         Iterator<T> iterator2 =  new TreeSet<>(s2).iterator();
2666         while (iterator1.hasNext()) {
2667             if (!iterator2.hasNext())
2668                 return 1; // s1 has more elements
2669             T e1 = iterator1.next();
2670             T e2 = iterator2.next();
2671             int c = e1.compareTo(e2);
2672             if (c != 0)
2673                 return c;
2674         }
2675         if (iterator2.hasNext()) {
2676             return -1;  // s2 has more elements
2677         } else {
2678             return 0;
2679         }
2680     }

Potential optimisation. Convert the sets to arrays, sort ‘em, then use Arrays.compare.


BuiltinClassLoader
—

 925     private ModuleReader moduleReaderFor(ModuleReference mref) {
 926         return moduleToReader.computeIfAbsent(mref, m -> createModuleReader(m));
 927     }

Use this:: createModuleReader


jdk.internal.module.Builder
—

 279         Set<ModuleDescriptor.Modifier> modifiers;
 280         if (open || synthetic) {
 281             modifiers = new HashSet<>();
 282             if (open) modifiers.add(ModuleDescriptor.Modifier.OPEN);
 283             if (synthetic) modifiers.add(ModuleDescriptor.Modifier.SYNTHETIC);
 284             modifiers = Collections.unmodifiableSet(modifiers);
 285         } else {
 286             modifiers = Collections.emptySet();
 287         }

It would be nice to use the small collection methods given the sizes. The following might work:

  Set<ModuleDescriptor.Modifier> modifiers;
  int n = (open ? 1 : 0) + (synthetic ? 1 : 0);
  if (n > 0) {
      ModuleDescriptor.Modifier[] ms = new ModuleDescriptor.Modifier[n];
      if (open)
          ms[—n] = ModuleDescriptor.Modifier.OPEN;
      if (synthetic)
          ms[—n] = ModuleDescriptor.Modifier.SYNTHETIC;
      modifiers = Set.of(ms);
  } else {
      modifiers = Set.of();
  }


test/tools/jar/modularJar/Basic.java
—

 331     @Test(enabled = false)
 332     public void partialUpdateFooMainClass() throws IOException {

Just checking if that test still needs to be disabled.



—

Separately, we missed the opportunity to add lexicographical comparison and mismatch to List (we added them for arrays).

Paul.

> On 7 Feb 2017, at 14:48, Lois Foltan <lois.foltan at oracle.com> wrote:
> 
> Hotspot changes look good to me.
> Lois
> 
> On 2/7/2017 8:23 AM, Alan Bateman wrote:
>> We've been accumulating changes in the jake forest for the last few weeks and it's time to bring the changes to jdk9/dev, to make jdk-9+157 if possible. JDK 9 is the first phase of rampdown and so this update will need to get approval via the FC-extension process.
>> 
>> The changes this time are significantly smaller than previous updates. Much of this update is API and javadoc cleanup. There are a few new methods, and a few methods have been renamed/changed, but it's otherwise small potatoes.
>> 
>> The webrevs with the changes are here:
>>   http://cr.openjdk.java.net/~alanb/8173393/1/
>> 
>> Note that the webrevs are against jdk-9+155 because that is what jake is currently at. I will re-generate the webrevs later in the week once jdk-9+156 is promoted before eventually merging with jdk9/dev in advance of the eventual push.
>> 
>> One other thing to note is that the hotspot+jdk repos have the changes for JDK-8171855, this is only because that change was backed up in jdk9/hs for several weeks and only got to jdk9/dev for jdk-9+156. This means that the only non-test change in the hotspot repo is to methodHandles.cpp.
>> 
>> In the langtools repo then most of the changes are mechanical, with the only real update being cleanup to jdeps and the change to javac + javap to use the right values for the requires flags (the issue that Rémi brought up on jigsaw-dev last week when sync'ing up ASM).
>> 
>> In the jdk repo then ignore the DEBUG_ADD_OPENS changes in ModuleBootstrap, that is not intended for JDK 9.
>> 
>> There are a few small bug fixes, and a few more startup improvements from Claes. There are a small number of tests that aren't in jake yet for this update but they should be before I refresh the webrev later in the week.
>> 
>> -Alan
>> 
> 



More information about the jigsaw-dev mailing list