< prev index next >

src/hotspot/share/prims/jvmtiEnv.cpp

Print this page


2613     if (java_lang_Class::is_primitive(k_mirror)) {
2614       *interface_count_ptr = 0;
2615       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2616       return JVMTI_ERROR_NONE;
2617     }
2618     JavaThread* current_thread = JavaThread::current();
2619     HandleMark hm(current_thread);
2620     Klass* k = java_lang_Class::as_Klass(k_mirror);
2621     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2622 
2623     // Return CLASS_NOT_PREPARED error as per JVMTI spec.
2624     if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
2625       return JVMTI_ERROR_CLASS_NOT_PREPARED;
2626 
2627     if (!k->is_instance_klass()) {
2628       *interface_count_ptr = 0;
2629       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2630       return JVMTI_ERROR_NONE;
2631     }
2632 
2633     Array<Klass*>* interface_list = InstanceKlass::cast(k)->local_interfaces();
2634     const int result_length = (interface_list == NULL ? 0 : interface_list->length());
2635     jclass* result_list = (jclass*) jvmtiMalloc(result_length * sizeof(jclass));
2636     for (int i_index = 0; i_index < result_length; i_index += 1) {
2637       Klass* klass_at = interface_list->at(i_index);
2638       assert(klass_at->is_klass(), "interfaces must be Klass*s");
2639       assert(klass_at->is_interface(), "interfaces must be interfaces");
2640       oop mirror_at = klass_at->java_mirror();
2641       Handle handle_at = Handle(current_thread, mirror_at);
2642       result_list[i_index] = (jclass) jni_reference(handle_at);
2643     }
2644     *interface_count_ptr = result_length;
2645     *interfaces_ptr = result_list;
2646   }
2647 
2648   return JVMTI_ERROR_NONE;
2649 } /* end GetImplementedInterfaces */
2650 
2651 
2652 // k_mirror - may be primitive, this must be checked
2653 // minor_version_ptr - pre-checked for NULL
2654 // major_version_ptr - pre-checked for NULL
2655 jvmtiError
2656 JvmtiEnv::GetClassVersionNumbers(oop k_mirror, jint* minor_version_ptr, jint* major_version_ptr) {
2657   if (java_lang_Class::is_primitive(k_mirror)) {




2613     if (java_lang_Class::is_primitive(k_mirror)) {
2614       *interface_count_ptr = 0;
2615       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2616       return JVMTI_ERROR_NONE;
2617     }
2618     JavaThread* current_thread = JavaThread::current();
2619     HandleMark hm(current_thread);
2620     Klass* k = java_lang_Class::as_Klass(k_mirror);
2621     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2622 
2623     // Return CLASS_NOT_PREPARED error as per JVMTI spec.
2624     if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
2625       return JVMTI_ERROR_CLASS_NOT_PREPARED;
2626 
2627     if (!k->is_instance_klass()) {
2628       *interface_count_ptr = 0;
2629       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2630       return JVMTI_ERROR_NONE;
2631     }
2632 
2633     Array<InstanceKlass*>* interface_list = InstanceKlass::cast(k)->local_interfaces();
2634     const int result_length = (interface_list == NULL ? 0 : interface_list->length());
2635     jclass* result_list = (jclass*) jvmtiMalloc(result_length * sizeof(jclass));
2636     for (int i_index = 0; i_index < result_length; i_index += 1) {
2637       InstanceKlass* klass_at = interface_list->at(i_index);
2638       assert(klass_at->is_klass(), "interfaces must be Klass*s");
2639       assert(klass_at->is_interface(), "interfaces must be interfaces");
2640       oop mirror_at = klass_at->java_mirror();
2641       Handle handle_at = Handle(current_thread, mirror_at);
2642       result_list[i_index] = (jclass) jni_reference(handle_at);
2643     }
2644     *interface_count_ptr = result_length;
2645     *interfaces_ptr = result_list;
2646   }
2647 
2648   return JVMTI_ERROR_NONE;
2649 } /* end GetImplementedInterfaces */
2650 
2651 
2652 // k_mirror - may be primitive, this must be checked
2653 // minor_version_ptr - pre-checked for NULL
2654 // major_version_ptr - pre-checked for NULL
2655 jvmtiError
2656 JvmtiEnv::GetClassVersionNumbers(oop k_mirror, jint* minor_version_ptr, jint* major_version_ptr) {
2657   if (java_lang_Class::is_primitive(k_mirror)) {


< prev index next >