< 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 >