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.nashorn.internal.runtime; 27 28 import java.lang.module.ModuleDescriptor; 29 import java.lang.reflect.Module; 30 import java.security.CodeSource; 31 import java.util.Objects; 32 33 /** 34 * Responsible for loading script generated classes. 35 * 36 */ 37 final class ScriptLoader extends NashornLoader { 38 private static final String NASHORN_PKG_PREFIX = "jdk.nashorn.internal."; 39 40 private volatile boolean structureAccessAdded; 41 private final Context context; 42 private final Module scriptModule; 43 44 /*package-private*/ Context getContext() { 45 return context; 46 } 47 48 /** 49 * Constructor. 50 */ 51 ScriptLoader(final Context context) { 52 super(context.getStructLoader()); 53 this.context = context; 54 55 // new scripts module, it's specific exports and read-edges 56 scriptModule = createModule("jdk.scripting.nashorn.scripts"); 57 58 // specific exports from nashorn to new scripts module 59 NASHORN_MODULE.addExports(OBJECTS_PKG, scriptModule); 60 NASHORN_MODULE.addExports(RUNTIME_PKG, scriptModule); 61 NASHORN_MODULE.addExports(RUNTIME_ARRAYS_PKG, scriptModule); 62 NASHORN_MODULE.addExports(RUNTIME_LINKER_PKG, scriptModule); 63 NASHORN_MODULE.addExports(SCRIPTS_PKG, scriptModule); 64 65 // nashorn needs to read scripts module methods,fields 66 NASHORN_MODULE.addReads(scriptModule); 67 } 68 69 private Module createModule(final String moduleName) { 70 final Module structMod = context.getStructLoader().getModule(); 71 final ModuleDescriptor.Builder builder = 72 ModuleDescriptor.module(moduleName) 73 .requires("java.base") 74 .requires("java.logging") 75 .requires(NASHORN_MODULE.getName()) 76 .requires(structMod.getName()) 77 .contains(SCRIPTS_PKG); 78 79 if (Context.javaSqlFound) { 80 builder.requires("java.sql"); 81 } 82 83 if (Context.javaSqlRowsetFound) { 84 builder.requires("java.sql.rowset"); 85 } 86 87 final ModuleDescriptor descriptor = builder.build(); 88 89 final Module mod = Context.createModuleTrusted(structMod.getLayer(), descriptor, this); 90 loadModuleManipulator(); 91 return mod; 92 } 93 94 @Override 95 protected Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException { 96 checkPackageAccess(name); 97 final Class<?> cl = super.loadClass(name, resolve); | 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.nashorn.internal.runtime; 27 28 import java.lang.module.ModuleDescriptor; 29 import java.lang.reflect.Module; 30 import java.security.CodeSource; 31 import java.util.Objects; 32 import java.util.Set; 33 34 /** 35 * Responsible for loading script generated classes. 36 * 37 */ 38 final class ScriptLoader extends NashornLoader { 39 private static final String NASHORN_PKG_PREFIX = "jdk.nashorn.internal."; 40 41 private volatile boolean structureAccessAdded; 42 private final Context context; 43 private final Module scriptModule; 44 45 /*package-private*/ Context getContext() { 46 return context; 47 } 48 49 /** 50 * Constructor. 51 */ 52 ScriptLoader(final Context context) { 53 super(context.getStructLoader()); 54 this.context = context; 55 56 // new scripts module, it's specific exports and read-edges 57 scriptModule = createModule("jdk.scripting.nashorn.scripts"); 58 59 // specific exports from nashorn to new scripts module 60 NASHORN_MODULE.addExports(OBJECTS_PKG, scriptModule); 61 NASHORN_MODULE.addExports(RUNTIME_PKG, scriptModule); 62 NASHORN_MODULE.addExports(RUNTIME_ARRAYS_PKG, scriptModule); 63 NASHORN_MODULE.addExports(RUNTIME_LINKER_PKG, scriptModule); 64 NASHORN_MODULE.addExports(SCRIPTS_PKG, scriptModule); 65 66 // nashorn needs to read scripts module methods,fields 67 NASHORN_MODULE.addReads(scriptModule); 68 } 69 70 private Module createModule(final String moduleName) { 71 final Module structMod = context.getStructLoader().getModule(); 72 final ModuleDescriptor.Builder builder = 73 ModuleDescriptor.newModule(moduleName) 74 .requires("java.base") 75 .requires("java.logging") 76 .requires(NASHORN_MODULE.getName()) 77 .requires(structMod.getName()) 78 .packages(Set.of(SCRIPTS_PKG)); 79 80 if (Context.javaSqlFound) { 81 builder.requires("java.sql"); 82 } 83 84 if (Context.javaSqlRowsetFound) { 85 builder.requires("java.sql.rowset"); 86 } 87 88 final ModuleDescriptor descriptor = builder.build(); 89 90 final Module mod = Context.createModuleTrusted(structMod.getLayer(), descriptor, this); 91 loadModuleManipulator(); 92 return mod; 93 } 94 95 @Override 96 protected Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException { 97 checkPackageAccess(name); 98 final Class<?> cl = super.loadClass(name, resolve); |