< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page

        

*** 1302,1317 **** JVM_END JVM_ENTRY(jobjectArray, JVM_GetClassSigners(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassSigners"); JvmtiVMObjectAllocEventCollector oam; ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // There are no signers for primitive types return NULL; } ! objArrayHandle signers(THREAD, java_lang_Class::signers(JNIHandles::resolve_non_null(cls))); // If there are no signers set in the class, or if the class // is an array, return NULL. if (signers == NULL) return NULL; --- 1302,1318 ---- JVM_END JVM_ENTRY(jobjectArray, JVM_GetClassSigners(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassSigners"); JvmtiVMObjectAllocEventCollector oam; ! oop mirror = JNIHandles::resolve_non_null(cls); ! if (java_lang_Class::is_primitive(mirror)) { // There are no signers for primitive types return NULL; } ! objArrayHandle signers(THREAD, java_lang_Class::signers(mirror)); // If there are no signers set in the class, or if the class // is an array, return NULL. if (signers == NULL) return NULL;
*** 1327,1360 **** JVM_END JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)) JVMWrapper("JVM_SetClassSigners"); ! if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // This call is ignored for primitive types and arrays. // Signers are only set once, ClassLoader.java, and thus shouldn't // be called with an array. Only the bootstrap loader creates arrays. ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); if (k->is_instance_klass()) { java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers))); } } JVM_END JVM_ENTRY(jobject, JVM_GetProtectionDomain(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetProtectionDomain"); ! if (JNIHandles::resolve(cls) == NULL) { THROW_(vmSymbols::java_lang_NullPointerException(), NULL); } ! if (java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { // Primitive types does not have a protection domain. return NULL; } ! oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls)); return (jobject) JNIHandles::make_local(THREAD, pd); JVM_END // Returns the inherited_access_control_context field of the running thread. --- 1328,1363 ---- JVM_END JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)) JVMWrapper("JVM_SetClassSigners"); ! oop mirror = JNIHandles::resolve_non_null(cls); ! if (!java_lang_Class::is_primitive(mirror)) { // This call is ignored for primitive types and arrays. // Signers are only set once, ClassLoader.java, and thus shouldn't // be called with an array. Only the bootstrap loader creates arrays. ! Klass* k = java_lang_Class::as_Klass(mirror); if (k->is_instance_klass()) { java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers))); } } JVM_END JVM_ENTRY(jobject, JVM_GetProtectionDomain(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetProtectionDomain"); ! oop mirror = JNIHandles::resolve_non_null(cls); ! if (mirror == NULL) { THROW_(vmSymbols::java_lang_NullPointerException(), NULL); } ! if (java_lang_Class::is_primitive(mirror)) { // Primitive types does not have a protection domain. return NULL; } ! oop pd = java_lang_Class::protection_domain(mirror); return (jobject) JNIHandles::make_local(THREAD, pd); JVM_END // Returns the inherited_access_control_context field of the running thread.
*** 1472,1487 **** JVM_END JVM_ENTRY(jint, JVM_GetClassModifiers(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassModifiers"); ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // Primitive type return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0)); assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK"); return k->modifier_flags(); JVM_END --- 1475,1491 ---- JVM_END JVM_ENTRY(jint, JVM_GetClassModifiers(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassModifiers"); ! oop mirror = JNIHandles::resolve_non_null(cls); ! if (java_lang_Class::is_primitive(mirror)) { // Primitive type return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } ! Klass* k = java_lang_Class::as_Klass(mirror); debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0)); assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK"); return k->modifier_flags(); JVM_END
*** 1490,1507 **** JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)) JvmtiVMObjectAllocEventCollector oam; // ofClass is a reference to a java_lang_Class object. The mirror object // of an InstanceKlass ! ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) { oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); return (jobjectArray)JNIHandles::make_local(THREAD, result); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); InnerClassesIterator iter(k); if (iter.length() == 0) { // Neither an inner nor outer class oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); --- 1494,1511 ---- JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)) JvmtiVMObjectAllocEventCollector oam; // ofClass is a reference to a java_lang_Class object. The mirror object // of an InstanceKlass ! oop ofMirror = JNIHandles::resolve_non_null(ofClass); ! if (java_lang_Class::is_primitive(ofMirror) || ! ! java_lang_Class::as_Klass(ofMirror)->is_instance_klass()) { oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); return (jobjectArray)JNIHandles::make_local(THREAD, result); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror)); InnerClassesIterator iter(k); if (iter.length() == 0) { // Neither an inner nor outer class oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
*** 1555,1587 **** JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) { // ofClass is a reference to a java_lang_Class object. ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) { return NULL; } bool inner_is_member = false; Klass* outer_klass ! = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)) ! )->compute_enclosing_class(&inner_is_member, CHECK_NULL); if (outer_klass == NULL) return NULL; // already a top-level class if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method) return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror()); } JVM_END JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) { oop mirror = JNIHandles::resolve_non_null(cls); ! if (java_lang_Class::is_primitive(mirror) || ! !java_lang_Class::as_Klass(mirror)->is_instance_klass()) { return NULL; } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(mirror)); int ooff = 0, noff = 0; if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) { if (noff != 0) { constantPoolHandle i_cp(thread, k->constants()); Symbol* name = i_cp->symbol_at(noff); --- 1559,1597 ---- JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) { // ofClass is a reference to a java_lang_Class object. ! oop ofMirror = JNIHandles::resolve_non_null(ofClass); ! if (java_lang_Class::is_primitive(ofMirror)) { ! return NULL; ! } ! Klass* klass = java_lang_Class::as_Klass(ofMirror); ! if (!klass->is_instance_klass()) { return NULL; } bool inner_is_member = false; Klass* outer_klass ! = InstanceKlass::cast(klass)->compute_enclosing_class(&inner_is_member, CHECK_NULL); if (outer_klass == NULL) return NULL; // already a top-level class if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method) return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror()); } JVM_END JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) { oop mirror = JNIHandles::resolve_non_null(cls); ! if (java_lang_Class::is_primitive(mirror)) { return NULL; } ! Klass* klass = java_lang_Class::as_Klass(mirror); ! if (!klass->is_instance_klass()) { ! return NULL; ! } ! InstanceKlass* k = InstanceKlass::cast(klass); int ooff = 0, noff = 0; if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) { if (noff != 0) { constantPoolHandle i_cp(thread, k->constants()); Symbol* name = i_cp->symbol_at(noff);
*** 1596,1608 **** JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls)) assert (cls != NULL, "illegal class"); JVMWrapper("JVM_GetClassSignature"); JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); // Return null for arrays and primatives ! if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return NULL; Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); return (jstring) JNIHandles::make_local(THREAD, str()); --- 1606,1619 ---- JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls)) assert (cls != NULL, "illegal class"); JVMWrapper("JVM_GetClassSignature"); JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); + oop mirror = JNIHandles::resolve_non_null(cls); // Return null for arrays and primatives ! if (!java_lang_Class::is_primitive(mirror)) { ! Klass* k = java_lang_Class::as_Klass(mirror); if (k->is_instance_klass()) { Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return NULL; Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); return (jstring) JNIHandles::make_local(THREAD, str());
*** 1613,1626 **** JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls)) assert (cls != NULL, "illegal class"); JVMWrapper("JVM_GetClassAnnotations"); ! // Return null for arrays and primitives ! if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); return (jbyteArray) JNIHandles::make_local(THREAD, a); } } --- 1624,1637 ---- JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls)) assert (cls != NULL, "illegal class"); JVMWrapper("JVM_GetClassAnnotations"); ! oop mirror = JNIHandles::resolve_non_null(cls); // Return null for arrays and primitives ! if (!java_lang_Class::is_primitive(mirror)) { ! Klass* k = java_lang_Class::as_Klass(mirror); if (k->is_instance_klass()) { typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); return (jbyteArray) JNIHandles::make_local(THREAD, a); } }
*** 1795,1813 **** JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)) { JVMWrapper("JVM_GetClassDeclaredFields"); JvmtiVMObjectAllocEventCollector oam; // Exclude primitive types and array types ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(THREAD, res); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); constantPoolHandle cp(THREAD, k->constants()); // Ensure class is linked k->link_class(CHECK_NULL); --- 1806,1825 ---- JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly)) { JVMWrapper("JVM_GetClassDeclaredFields"); JvmtiVMObjectAllocEventCollector oam; + oop ofMirror = JNIHandles::resolve_non_null(ofClass); // Exclude primitive types and array types ! if (java_lang_Class::is_primitive(ofMirror) || ! java_lang_Class::as_Klass(ofMirror)->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(THREAD, res); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror)); constantPoolHandle cp(THREAD, k->constants()); // Ensure class is linked k->link_class(CHECK_NULL);
*** 1903,1921 **** bool want_constructor, Klass* klass, TRAPS) { JvmtiVMObjectAllocEventCollector oam; // Exclude primitive types and array types ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ! || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(THREAD, res); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); // Ensure class is linked k->link_class(CHECK_NULL); Array<Method*>* methods = k->methods(); --- 1915,1934 ---- bool want_constructor, Klass* klass, TRAPS) { JvmtiVMObjectAllocEventCollector oam; + oop ofMirror = JNIHandles::resolve_non_null(ofClass); // Exclude primitive types and array types ! if (java_lang_Class::is_primitive(ofMirror) ! || java_lang_Class::as_Klass(ofMirror)->is_array_klass()) { // Return empty array oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(THREAD, res); } ! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror)); // Ensure class is linked k->link_class(CHECK_NULL); Array<Method*>* methods = k->methods();
*** 1985,2000 **** JVM_END JVM_ENTRY(jint, JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)) { JVMWrapper("JVM_GetClassAccessFlags"); ! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { // Primitive type return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS; } JVM_END JVM_ENTRY(jboolean, JVM_AreNestMates(JNIEnv *env, jclass current, jclass member)) --- 1998,2014 ---- JVM_END JVM_ENTRY(jint, JVM_GetClassAccessFlags(JNIEnv *env, jclass cls)) { JVMWrapper("JVM_GetClassAccessFlags"); ! oop mirror = JNIHandles::resolve_non_null(cls); ! if (java_lang_Class::is_primitive(mirror)) { // Primitive type return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } ! Klass* k = java_lang_Class::as_Klass(mirror); return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS; } JVM_END JVM_ENTRY(jboolean, JVM_AreNestMates(JNIEnv *env, jclass current, jclass member))
*** 2105,2116 **** JVM_END JVM_ENTRY(jobjectArray, JVM_GetPermittedSubclasses(JNIEnv* env, jclass current)) { JVMWrapper("JVM_GetPermittedSubclasses"); ! assert(!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(current)), "should not be"); ! Klass* c = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(current)); assert(c->is_instance_klass(), "must be"); InstanceKlass* ik = InstanceKlass::cast(c); { JvmtiVMObjectAllocEventCollector oam; Array<u2>* subclasses = ik->permitted_subclasses(); --- 2119,2131 ---- JVM_END JVM_ENTRY(jobjectArray, JVM_GetPermittedSubclasses(JNIEnv* env, jclass current)) { JVMWrapper("JVM_GetPermittedSubclasses"); ! oop mirror = JNIHandles::resolve_non_null(current); ! assert(!java_lang_Class::is_primitive(mirror), "should not be"); ! Klass* c = java_lang_Class::as_Klass(mirror); assert(c->is_instance_klass(), "must be"); InstanceKlass* ik = InstanceKlass::cast(c); { JvmtiVMObjectAllocEventCollector oam; Array<u2>* subclasses = ik->permitted_subclasses();
*** 2135,2148 **** JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls)) { JVMWrapper("JVM_GetClassConstantPool"); JvmtiVMObjectAllocEventCollector oam; ! // Return null for primitives and arrays ! if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { ! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); if (k->is_instance_klass()) { InstanceKlass* k_h = InstanceKlass::cast(k); Handle jcp = reflect_ConstantPool::create(CHECK_NULL); reflect_ConstantPool::set_cp(jcp(), k_h->constants()); return JNIHandles::make_local(THREAD, jcp()); --- 2150,2163 ---- JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls)) { JVMWrapper("JVM_GetClassConstantPool"); JvmtiVMObjectAllocEventCollector oam; ! oop mirror = JNIHandles::resolve_non_null(cls); // Return null for primitives and arrays ! if (!java_lang_Class::is_primitive(mirror)) { ! Klass* k = java_lang_Class::as_Klass(mirror); if (k->is_instance_klass()) { InstanceKlass* k_h = InstanceKlass::cast(k); Handle jcp = reflect_ConstantPool::create(CHECK_NULL); reflect_ConstantPool::set_cp(jcp(), k_h->constants()); return JNIHandles::make_local(THREAD, jcp());
< prev index next >