1 /* |
1 /* |
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
26 import myloaders.MyDiffClassLoader; |
26 import myloaders.MyDiffClassLoader; |
27 import p2.c2; |
27 import p2.c2; |
28 |
28 |
29 public class c1ReadEdgeDiffLoader { |
29 public class c1ReadEdgeDiffLoader { |
30 public c1ReadEdgeDiffLoader() { |
30 public c1ReadEdgeDiffLoader() { |
31 // The goal is to establish a read edge between module m1 |
31 // The goal is to establish a read edge between module m1x |
32 // which is the module where p1.c1ReadEdgeDiffLoader is defined, |
32 // which is the module where p1.c1ReadEdgeDiffLoader is defined, |
33 // and the unnamed module that defines p2.c2. This must be |
33 // and the unnamed module that defines p2.c2. This must be |
34 // done in 2 steps: |
34 // done in 2 steps: |
35 // |
35 // |
36 // Step #1: Establish a read edge between m1, where c1ReadEdgeDiffLoader |
36 // Step #1: Establish a read edge between m1x, where c1ReadEdgeDiffLoader |
37 // is defined, and the System ClassLoader's unnamed module, |
37 // is defined, and the System ClassLoader's unnamed module, |
38 // where MyDiffClassLoader is defined. This read edge |
38 // where MyDiffClassLoader is defined. This read edge |
39 // is needed before we can obtain MyDiffClassLoader.loader2's unnamed module. |
39 // is needed before we can obtain MyDiffClassLoader.loader2's unnamed module. |
40 // |
40 // |
41 // Step #2: Establish a read edge between m1, where c1ReadEdgeDiffLoader |
41 // Step #2: Establish a read edge between m1x, where c1ReadEdgeDiffLoader |
42 // is defined, and the MyDiffClassLoader.loader2's unnamed module, |
42 // is defined, and the MyDiffClassLoader.loader2's unnamed module, |
43 // where p2.c2 will be defined. |
43 // where p2.c2 will be defined. |
44 |
44 |
45 // Step #1: read edge m1 -> System ClassLoader's unnamed module |
45 // Step #1: read edge m1x -> System ClassLoader's unnamed module |
46 Module m1 = c1ReadEdgeDiffLoader.class.getModule(); |
46 Module m1x = c1ReadEdgeDiffLoader.class.getModule(); |
47 ClassLoader system_loader = ClassLoader.getSystemClassLoader(); |
47 ClassLoader system_loader = ClassLoader.getSystemClassLoader(); |
48 Module unnamed_module1 = system_loader.getUnnamedModule(); |
48 Module unnamed_module_one = system_loader.getUnnamedModule(); |
49 m1.addReads(unnamed_module1); |
49 m1x.addReads(unnamed_module_one); |
50 |
50 |
51 // Step #2: read edge m1 -> MyDiffClassLoader.loader2's unnamed module |
51 // Step #2: read edge m1x -> MyDiffClassLoader.loader2's unnamed module |
52 ClassLoader loader2 = MyDiffClassLoader.loader2; |
52 ClassLoader loader2 = MyDiffClassLoader.loader2; |
53 Module unnamed_module2 = loader2.getUnnamedModule(); |
53 Module unnamed_module_two = loader2.getUnnamedModule(); |
54 m1.addReads(unnamed_module2); |
54 m1x.addReads(unnamed_module_two); |
55 |
55 |
56 // Attempt access - access should succeed since m1 can read |
56 // Attempt access - access should succeed since m1x can read |
57 // MyDiffClassLoader.loader2's unnamed module |
57 // MyDiffClassLoader.loader2's unnamed module |
58 p2.c2 c2_obj = new p2.c2(); |
58 p2.c2 c2_obj = new p2.c2(); |
59 c2_obj.method2(); |
59 c2_obj.method2(); |
60 } |
60 } |
61 } |
61 } |