8173393: Module system implementation refresh (2/2017)

Co-authored-by: George Triantafillou <george.triantafillou@oracle.com>
Reviewed-by: lfoltan, acorn, mchung
This commit is contained in:
Alan Bateman 2017-02-10 09:03:55 +00:00
parent 27dc8df66b
commit 9db79d57c8
59 changed files with 1070 additions and 1069 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -34,14 +34,14 @@ import java.util.Map;
import java.util.Set;
//
// ClassLoader1 --> defines m1 --> packages p1
// ClassLoader1 --> defines m2 --> packages p2
// ClassLoader1 --> defines m1x --> packages p1
// ClassLoader1 --> defines m2x --> packages p2
//
// m1 can read m2
// package p2 in m2 is exported to m1
// m1x can read m2x
// package p2 in m2x is exported to m1x
//
// class p1.c1 defined in m1 tries to access p2.c2 defined in m2
// Access allowed since m1 can read m2 and package p2 is exported to m1.
// class p1.c1 defined in m1x tries to access p2.c2 defined in m2x
// Access allowed since m1x can read m2x and package p2 is exported to m1x.
//
public class ModuleSameCLMain {
@ -50,45 +50,45 @@ public class ModuleSameCLMain {
// publically defined classes within packages of those modules.
public void createLayerOnBoot() throws Throwable {
// Define module: m1
// Can read: java.base, m2
// Define module: m1x
// Can read: java.base, m2x
// Packages: p1
// Packages exported: p1 is exported to unqualifiedly
ModuleDescriptor descriptor_m1 =
ModuleDescriptor.module("m1")
ModuleDescriptor descriptor_m1x =
ModuleDescriptor.newModule("m1x")
.requires("java.base")
.requires("m2")
.requires("m2x")
.exports("p1")
.build();
// Define module: m2
// Define module: m2x
// Can read: java.base
// Packages: p2
// Packages exported: package p2 is exported to m1
ModuleDescriptor descriptor_m2 =
ModuleDescriptor.module("m2")
// Packages exported: package p2 is exported to m1x
ModuleDescriptor descriptor_m2x =
ModuleDescriptor.newModule("m2x")
.requires("java.base")
.exports("p2", Set.of("m1"))
.exports("p2", Set.of("m1x"))
.build();
// Set up a ModuleFinder containing all modules for this layer.
ModuleFinder finder = ModuleLibrary.of(descriptor_m1, descriptor_m2);
ModuleFinder finder = ModuleLibrary.of(descriptor_m1x, descriptor_m2x);
// Resolves "m1"
// Resolves "m1x"
Configuration cf = Layer.boot()
.configuration()
.resolveRequires(finder, ModuleFinder.of(), Set.of("m1"));
.resolve(finder, ModuleFinder.of(), Set.of("m1x"));
// map each module to the same class loader for this test
Map<String, ClassLoader> map = new HashMap<>();
Loader1 cl1 = new Loader1();
map.put("m1", cl1);
map.put("m2", cl1);
map.put("m1x", cl1);
map.put("m2x", cl1);
// Create Layer that contains m1 & m2
// Create Layer that contains m1x & m2x
Layer layer = Layer.boot().defineModules(cf, map::get);
assertTrue(layer.findLoader("m1") == cl1);
assertTrue(layer.findLoader("m2") == cl1);
assertTrue(layer.findLoader("m1x") == cl1);
assertTrue(layer.findLoader("m2x") == cl1);
assertTrue(layer.findLoader("java.base") == null);
// now use the same loader to load class p1.c1
@ -96,7 +96,7 @@ public class ModuleSameCLMain {
try {
p1_c1_class.newInstance();
} catch (IllegalAccessError e) {
throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1");
throw new RuntimeException("Test Failed, an IAE should not be thrown since p2 is exported qualifiedly to m1x");
}
}