1 /*
2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.module;
27
28 import java.lang.module.Configuration;
29 import java.lang.module.ModuleFinder;
30 import java.util.Map;
31 import java.util.Objects;
32 import java.util.Set;
33
34 import jdk.internal.misc.VM;
35
36 /**
37 * Used by ModuleBootstrap to obtain the archived system modules and finder.
38 */
39 final class ArchivedModuleGraph {
40 private static ArchivedModuleGraph archivedModuleGraph;
41
42 private final String mainModule;
43 private final boolean hasSplitPackages;
44 private final boolean hasIncubatorModules;
45 private final ModuleFinder finder;
46 private final Configuration configuration;
47 private final Map<String, Set<String>> concealedPackagesToOpen;
48 private final Map<String, Set<String>> exportedPackagesToOpen;
49
50 private ArchivedModuleGraph(String mainModule,
51 boolean hasSplitPackages,
52 boolean hasIncubatorModules,
53 ModuleFinder finder,
54 Configuration configuration,
55 Map<String, Set<String>> concealedPackagesToOpen,
56 Map<String, Set<String>> exportedPackagesToOpen) {
57 this.mainModule = mainModule;
58 this.hasSplitPackages = hasSplitPackages;
59 this.hasIncubatorModules = hasIncubatorModules;
60 this.finder = finder;
61 this.configuration = configuration;
62 this.concealedPackagesToOpen = concealedPackagesToOpen;
63 this.exportedPackagesToOpen = exportedPackagesToOpen;
64 }
65
66 ModuleFinder finder() {
67 return finder;
68 }
69
70 Configuration configuration() {
71 return configuration;
72 }
73
74 Map<String, Set<String>> concealedPackagesToOpen() {
75 return concealedPackagesToOpen;
76 }
77
78 Map<String, Set<String>> exportedPackagesToOpen() {
79 return exportedPackagesToOpen;
80 }
81
82 boolean hasSplitPackages() {
83 return hasSplitPackages;
84 }
85
86 boolean hasIncubatorModules() {
87 return hasIncubatorModules;
88 }
89
90 /**
91 * Returns the ArchivedModuleGraph for the given initial module.
92 */
93 static ArchivedModuleGraph get(String mainModule) {
94 ArchivedModuleGraph graph = archivedModuleGraph;
95 if (graph != null && Objects.equals(mainModule, graph.mainModule)) {
96 return graph;
97 } else {
98 return null;
99 }
100 }
101
102 /**
103 * Archive the module graph for the given initial module.
104 */
105 static void archive(String mainModule,
106 boolean hasSplitPackages,
107 boolean hasIncubatorModules,
108 ModuleFinder finder,
109 Configuration configuration,
110 Map<String, Set<String>> concealedPackagesToOpen,
111 Map<String, Set<String>> exportedPackagesToOpen) {
112 if (mainModule != null) {
113 throw new UnsupportedOperationException();
114 }
115 archivedModuleGraph = new ArchivedModuleGraph(mainModule,
116 hasSplitPackages,
117 hasIncubatorModules,
118 finder,
119 configuration,
120 concealedPackagesToOpen,
121 exportedPackagesToOpen);
122 }
123
124 static {
125 VM.initializeFromArchive(ArchivedModuleGraph.class);
126 }
127 }
|
1 /*
2 * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.module;
27
28 import java.lang.module.Configuration;
29 import java.lang.module.ModuleFinder;
30 import java.util.Map;
31 import java.util.Objects;
32 import java.util.Set;
33
34 import jdk.internal.misc.VM;
35
36 /**
37 * Used by ModuleBootstrap to obtain the archived system modules and finder.
38 */
39 final class ArchivedModuleGraph {
40 private static ArchivedModuleGraph archivedModuleGraph;
41
42 private final boolean hasSplitPackages;
43 private final boolean hasIncubatorModules;
44 private final ModuleFinder finder;
45 private final Configuration configuration;
46 private final ModuleLoaderMap.Mapper classLoaderFunction;
47 private final Map<String, Set<String>> concealedPackagesToOpen;
48 private final Map<String, Set<String>> exportedPackagesToOpen;
49
50 public ArchivedModuleGraph(boolean hasSplitPackages,
51 boolean hasIncubatorModules,
52 ModuleFinder finder,
53 Configuration configuration,
54 ModuleLoaderMap.Mapper classLoaderFunction,
55 Map<String, Set<String>> concealedPackagesToOpen,
56 Map<String, Set<String>> exportedPackagesToOpen) {
57 this.hasSplitPackages = hasSplitPackages;
58 this.hasIncubatorModules = hasIncubatorModules;
59 this.finder = finder;
60 this.configuration = configuration;
61 this.classLoaderFunction = classLoaderFunction;
62 this.concealedPackagesToOpen = concealedPackagesToOpen;
63 this.exportedPackagesToOpen = exportedPackagesToOpen;
64 }
65
66 ModuleFinder finder() {
67 return finder;
68 }
69
70 Configuration configuration() {
71 return configuration;
72 }
73
74 ModuleLoaderMap.Mapper classLoaderFunction() {
75 return classLoaderFunction;
76 }
77
78 Map<String, Set<String>> concealedPackagesToOpen() {
79 return concealedPackagesToOpen;
80 }
81
82 Map<String, Set<String>> exportedPackagesToOpen() {
83 return exportedPackagesToOpen;
84 }
85
86 boolean hasSplitPackages() {
87 return hasSplitPackages;
88 }
89
90 boolean hasIncubatorModules() {
91 return hasIncubatorModules;
92 }
93
94 /**
95 * Returns the ArchivedModuleGraph for the given initial module.
96 */
97 static ArchivedModuleGraph get(String mainModule) {
98 ArchivedModuleGraph graph = archivedModuleGraph;
99 // We only allow the unnamed module (default) case for now
100 if (mainModule == null) {
101 return graph;
102 } else {
103 return null;
104 }
105 }
106
107 /**
108 * Archive the module graph for the given initial module.
109 */
110 static void archive(ArchivedModuleGraph graph) {
111 archivedModuleGraph = graph;
112 }
113
114 static {
115 VM.initializeFromArchive(ArchivedModuleGraph.class);
116 }
117 }
|