< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page

        

*** 1254,1264 **** size = 2; } // Allocate result array objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL); ! objArrayHandle result (THREAD, r); // Fill in result if (klass->is_instance_klass()) { // Regular instance klass, fill in all local interfaces for (int index = 0; index < size; index++) { Klass* k = InstanceKlass::cast(klass)->local_interfaces()->at(index); --- 1254,1264 ---- size = 2; } // Allocate result array objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL); ! objArrayHandle result(THREAD, r); // Fill in result if (klass->is_instance_klass()) { // Regular instance klass, fill in all local interfaces for (int index = 0; index < size; index++) { Klass* k = InstanceKlass::cast(klass)->local_interfaces()->at(index);
*** 2098,2107 **** --- 2098,2134 ---- } return (jobjectArray)JNIHandles::make_local(THREAD, result()); } } 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(); + int length = subclasses == NULL ? 0 : subclasses->length(); + objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), + length, CHECK_NULL); + objArrayHandle result(THREAD, r); + for (int i = 0; i < length; i++) { + int cp_index = subclasses->at(i); + // This returns <package-name>/<class-name>. + Symbol* klass_name = ik->constants()->klass_name_at(cp_index); + assert(klass_name != NULL, "Unexpected null klass_name"); + Handle perm_subtype_h = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); + result->obj_at_put(i, perm_subtype_h()); + } + return (jobjectArray)JNIHandles::make_local(THREAD, result()); + } + } + JVM_END // Constant pool access ////////////////////////////////////////////////////////// JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls)) {
< prev index next >