8142968: Module System implementation

Initial integration of JEP 200, JEP 260, JEP 261, and JEP 282

Co-authored-by: Alex Buckley <alex.buckley@oracle.com>
Co-authored-by: Jonathan Gibbons <jonathan.gibbons@oracle.com>
Co-authored-by: Karen Kinnear <karen.kinnear@oracle.com>
Co-authored-by: Mandy Chung <mandy.chung@oracle.com>
Co-authored-by: Mark Reinhold <mark.reinhold@oracle.com>
Co-authored-by: Harold Seigel <harold.seigel@oracle.com>
Co-authored-by: Lois Foltan <lois.foltan@oracle.com>
Co-authored-by: Calvin Cheung <calvin.cheung@oracle.com>
Co-authored-by: Christian Tornqvist <christian.tornqvist@oracle.com>
Co-authored-by: Erik Joelsson <erik.joelsson@oracle.com>
Co-authored-by: George Triantafillou <george.triantafillou@oracle.com>
Co-authored-by: Igor Ignatyev <igor.ignatyev@oracle.com>
Co-authored-by: Ioi Lam <ioi.lam@oracle.com>
Co-authored-by: James Laskey <james.laskey@oracle.com>
Co-authored-by: Jean-Francois Denise <jean-francois.denise@oracle.com>
Co-authored-by: Jiangli Zhou <jiangli.zhou@oracle.com>
Co-authored-by: Markus Gronlund <markus.gronlund@oracle.com>
Co-authored-by: Serguei Spitsyn <serguei.spitsyn@oracle.com>
Co-authored-by: Staffan Larsen <staffan.larsen@oracle.com>
Co-authored-by: Sundararajan Athijegannathan <sundararajan.athijegannathan@oracle.com>
Reviewed-by: acorn, ccheung, coleenp, ctornqvi, dholmes, dsimms, gtriantafill, iklam, jiangli, mgronlun, mseledtsov, cjplummer, sspitsyn, stefank, twisti, hseigel, lfoltan, alanb, mchung, dfazunen
This commit is contained in:
Alan Bateman 2016-03-17 19:04:01 +00:00
parent 007b0fa3db
commit f30fc1c88b
297 changed files with 15848 additions and 2302 deletions

View file

@ -28,7 +28,9 @@
#include "classfile/altHashing.hpp"
#include "classfile/classFileStream.hpp"
#include "classfile/classLoader.hpp"
#include "classfile/javaClasses.hpp"
#include "classfile/javaClasses.inline.hpp"
#include "classfile/modules.hpp"
#include "classfile/symbolTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "classfile/vmSymbols.hpp"
@ -3443,6 +3445,47 @@ JNI_LEAF(jint, jni_GetJavaVM(JNIEnv *env, JavaVM **vm))
return JNI_OK;
JNI_END
JNI_ENTRY(jobject, jni_GetModule(JNIEnv* env, jclass clazz))
JNIWrapper("GetModule");
return Modules::get_module(clazz, THREAD);
JNI_END
JNI_ENTRY(void, jni_AddModuleReads(JNIEnv* env, jobject m1, jobject m2))
JNIWrapper("AddModuleReads");
if (m1 == NULL || m2 == NULL) {
THROW(vmSymbols::java_lang_NullPointerException());
}
JavaValue result(T_VOID);
Handle m1_h(THREAD, JNIHandles::resolve(m1));
if (!java_lang_reflect_Module::is_instance(m1_h())) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m1 object");
}
Handle m2_h(THREAD, JNIHandles::resolve(m2));
if (!java_lang_reflect_Module::is_instance(m2_h())) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Bad m2 object");
}
JavaCalls::call_static(&result,
KlassHandle(THREAD, SystemDictionary::module_Modules_klass()),
vmSymbols::addReads_name(),
vmSymbols::addReads_signature(),
m1_h,
m2_h,
THREAD);
JNI_END
JNI_ENTRY(jboolean, jni_CanReadModule(JNIEnv* env, jobject m1, jobject m2))
JNIWrapper("CanReadModule");
if (m1 == NULL || m2 == NULL) {
THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
}
jboolean res = Modules::can_read_module(m1, m2, CHECK_false);
return res;
JNI_END
// Structure containing all jni functions
struct JNINativeInterface_ jni_NativeInterface = {
NULL,
@ -3722,7 +3765,13 @@ struct JNINativeInterface_ jni_NativeInterface = {
// New 1_6 features
jni_GetObjectRefType
jni_GetObjectRefType,
// Module features
jni_GetModule,
jni_AddModuleReads,
jni_CanReadModule
};