Mercurial > hg > truffle
comparison src/share/vm/runtime/reflection.cpp @ 6983:070d523b96a7
8001471: Klass::cast() does nothing
Summary: Remove function Klass::cast() and calls to it.
Reviewed-by: dholmes, coleenp
author | hseigel |
---|---|
date | Mon, 12 Nov 2012 16:15:05 -0500 |
parents | 18fb7da42534 |
children | 35431a769282 |
comparison
equal
deleted
inserted
replaced
6981:8c413497f434 | 6983:070d523b96a7 |
---|---|
68 source_file = s->as_C_string(); | 68 source_file = s->as_C_string(); |
69 } | 69 } |
70 } | 70 } |
71 } | 71 } |
72 if (caller != NULL) { | 72 if (caller != NULL) { |
73 const char * from = Klass::cast(caller)->external_name(); | 73 const char * from = caller->external_name(); |
74 const char * to = Klass::cast(to_class)->external_name(); | 74 const char * to = to_class->external_name(); |
75 // print in a single call to reduce interleaving between threads | 75 // print in a single call to reduce interleaving between threads |
76 if (source_file != NULL) { | 76 if (source_file != NULL) { |
77 tty->print("RESOLVE %s %s %s:%d (reflection)\n", from, to, source_file, line_number); | 77 tty->print("RESOLVE %s %s %s:%d (reflection)\n", from, to, source_file, line_number); |
78 } else { | 78 } else { |
79 tty->print("RESOLVE %s %s (reflection)\n", from, to); | 79 tty->print("RESOLVE %s %s (reflection)\n", from, to); |
328 if (java_lang_Class::is_primitive(element_mirror)) { | 328 if (java_lang_Class::is_primitive(element_mirror)) { |
329 Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); | 329 Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
330 return TypeArrayKlass::cast(tak)->allocate(length, THREAD); | 330 return TypeArrayKlass::cast(tak)->allocate(length, THREAD); |
331 } else { | 331 } else { |
332 Klass* k = java_lang_Class::as_Klass(element_mirror); | 332 Klass* k = java_lang_Class::as_Klass(element_mirror); |
333 if (Klass::cast(k)->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) { | 333 if (k->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) { |
334 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); | 334 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
335 } | 335 } |
336 return oopFactory::new_objArray(k, length, THREAD); | 336 return oopFactory::new_objArray(k, length, THREAD); |
337 } | 337 } |
338 } | 338 } |
364 int dim = len; | 364 int dim = len; |
365 if (java_lang_Class::is_primitive(element_mirror)) { | 365 if (java_lang_Class::is_primitive(element_mirror)) { |
366 klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); | 366 klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); |
367 } else { | 367 } else { |
368 klass = java_lang_Class::as_Klass(element_mirror); | 368 klass = java_lang_Class::as_Klass(element_mirror); |
369 if (Klass::cast(klass)->oop_is_array()) { | 369 if (klass->oop_is_array()) { |
370 int k_dim = ArrayKlass::cast(klass)->dimension(); | 370 int k_dim = ArrayKlass::cast(klass)->dimension(); |
371 if (k_dim + len > MAX_DIM) { | 371 if (k_dim + len > MAX_DIM) { |
372 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); | 372 THROW_0(vmSymbols::java_lang_IllegalArgumentException()); |
373 } | 373 } |
374 dim += k_dim; | 374 dim += k_dim; |
375 } | 375 } |
376 } | 376 } |
377 klass = Klass::cast(klass)->array_klass(dim, CHECK_NULL); | 377 klass = klass->array_klass(dim, CHECK_NULL); |
378 oop obj = ArrayKlass::cast(klass)->multi_allocate(len, dimensions, THREAD); | 378 oop obj = ArrayKlass::cast(klass)->multi_allocate(len, dimensions, THREAD); |
379 assert(obj->is_array(), "just checking"); | 379 assert(obj->is_array(), "just checking"); |
380 return arrayOop(obj); | 380 return arrayOop(obj); |
381 } | 381 } |
382 | 382 |
385 if (java_lang_Class::is_primitive(mirror)) { | 385 if (java_lang_Class::is_primitive(mirror)) { |
386 return NULL; | 386 return NULL; |
387 } | 387 } |
388 | 388 |
389 Klass* klass = java_lang_Class::as_Klass(mirror); | 389 Klass* klass = java_lang_Class::as_Klass(mirror); |
390 if (!Klass::cast(klass)->oop_is_array()) { | 390 if (!klass->oop_is_array()) { |
391 return NULL; | 391 return NULL; |
392 } | 392 } |
393 | 393 |
394 oop result = ArrayKlass::cast(klass)->component_mirror(); | 394 oop result = ArrayKlass::cast(klass)->component_mirror(); |
395 #ifdef ASSERT | 395 #ifdef ASSERT |
396 oop result2 = NULL; | 396 oop result2 = NULL; |
397 if (ArrayKlass::cast(klass)->dimension() == 1) { | 397 if (ArrayKlass::cast(klass)->dimension() == 1) { |
398 if (Klass::cast(klass)->oop_is_typeArray()) { | 398 if (klass->oop_is_typeArray()) { |
399 result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL); | 399 result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL); |
400 } else { | 400 } else { |
401 result2 = Klass::cast(ObjArrayKlass::cast(klass)->element_klass())->java_mirror(); | 401 result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror(); |
402 } | 402 } |
403 } else { | 403 } else { |
404 Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension(); | 404 Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension(); |
405 assert(Klass::cast(lower_dim)->oop_is_array(), "just checking"); | 405 assert(lower_dim->oop_is_array(), "just checking"); |
406 result2 = Klass::cast(lower_dim)->java_mirror(); | 406 result2 = lower_dim->java_mirror(); |
407 } | 407 } |
408 assert(result == result2, "results must be consistent"); | 408 assert(result == result2, "results must be consistent"); |
409 #endif //ASSERT | 409 #endif //ASSERT |
410 return result; | 410 return result; |
411 } | 411 } |
440 // Additional test for protected members: JLS 6.6.2 | 440 // Additional test for protected members: JLS 6.6.2 |
441 | 441 |
442 if (acc.is_protected()) { | 442 if (acc.is_protected()) { |
443 if (target_class != client_class) { | 443 if (target_class != client_class) { |
444 if (!is_same_class_package(client_class, field_class)) { | 444 if (!is_same_class_package(client_class, field_class)) { |
445 if (!Klass::cast(target_class)->is_subclass_of(client_class)) { | 445 if (!target_class->is_subclass_of(client_class)) { |
446 THROW_(vmSymbols::java_lang_IllegalAccessException(), false); | 446 THROW_(vmSymbols::java_lang_IllegalAccessException(), false); |
447 } | 447 } |
448 } | 448 } |
449 } | 449 } |
450 } | 450 } |
466 } | 466 } |
467 // New (1.4) reflection implementation. Allow all accesses from | 467 // New (1.4) reflection implementation. Allow all accesses from |
468 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. | 468 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. |
469 if ( JDK_Version::is_gte_jdk14x_version() | 469 if ( JDK_Version::is_gte_jdk14x_version() |
470 && UseNewReflection | 470 && UseNewReflection |
471 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { | 471 && current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { |
472 return true; | 472 return true; |
473 } | 473 } |
474 | 474 |
475 // Also allow all accesses from | 475 // Also allow all accesses from |
476 // java/lang/invoke/MagicLambdaImpl subclasses to succeed trivially. | 476 // java/lang/invoke/MagicLambdaImpl subclasses to succeed trivially. |
544 } | 544 } |
545 | 545 |
546 if (access.is_protected()) { | 546 if (access.is_protected()) { |
547 if (!protected_restriction) { | 547 if (!protected_restriction) { |
548 // See if current_class is a subclass of field_class | 548 // See if current_class is a subclass of field_class |
549 if (Klass::cast(current_class)->is_subclass_of(field_class)) { | 549 if (current_class->is_subclass_of(field_class)) { |
550 if (access.is_static() || // static fields are ok, see 6622385 | 550 if (access.is_static() || // static fields are ok, see 6622385 |
551 current_class == resolved_class || | 551 current_class == resolved_class || |
552 field_class == resolved_class || | 552 field_class == resolved_class || |
553 Klass::cast(current_class)->is_subclass_of(resolved_class) || | 553 current_class->is_subclass_of(resolved_class) || |
554 Klass::cast(resolved_class)->is_subclass_of(current_class)) { | 554 resolved_class->is_subclass_of(current_class)) { |
555 return true; | 555 return true; |
556 } | 556 } |
557 } | 557 } |
558 } | 558 } |
559 } | 559 } |
564 | 564 |
565 // New (1.4) reflection implementation. Allow all accesses from | 565 // New (1.4) reflection implementation. Allow all accesses from |
566 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. | 566 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. |
567 if ( JDK_Version::is_gte_jdk14x_version() | 567 if ( JDK_Version::is_gte_jdk14x_version() |
568 && UseNewReflection | 568 && UseNewReflection |
569 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { | 569 && current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { |
570 return true; | 570 return true; |
571 } | 571 } |
572 | 572 |
573 // Also allow all accesses from | 573 // Also allow all accesses from |
574 // java/lang/invoke/MagicLambdaImpl subclasses to succeed trivially. | 574 // java/lang/invoke/MagicLambdaImpl subclasses to succeed trivially. |
691 if (type != T_OBJECT) { | 691 if (type != T_OBJECT) { |
692 return Handle(THREAD, Universe::java_mirror(type)); | 692 return Handle(THREAD, Universe::java_mirror(type)); |
693 } | 693 } |
694 | 694 |
695 oop loader = InstanceKlass::cast(k())->class_loader(); | 695 oop loader = InstanceKlass::cast(k())->class_loader(); |
696 oop protection_domain = Klass::cast(k())->protection_domain(); | 696 oop protection_domain = k()->protection_domain(); |
697 Klass* result = SystemDictionary::resolve_or_fail(signature, | 697 Klass* result = SystemDictionary::resolve_or_fail(signature, |
698 Handle(THREAD, loader), | 698 Handle(THREAD, loader), |
699 Handle(THREAD, protection_domain), | 699 Handle(THREAD, protection_domain), |
700 true, CHECK_(Handle())); | 700 true, CHECK_(Handle())); |
701 | 701 |
702 if (TraceClassResolution) { | 702 if (TraceClassResolution) { |
703 trace_class_resolution(result); | 703 trace_class_resolution(result); |
704 } | 704 } |
705 | 705 |
706 oop nt = Klass::cast(result)->java_mirror(); | 706 oop nt = result->java_mirror(); |
707 return Handle(THREAD, nt); | 707 return Handle(THREAD, nt); |
708 } | 708 } |
709 | 709 |
710 | 710 |
711 oop Reflection::new_method(methodHandle method, bool intern_name, bool for_constant_pool_access, TRAPS) { | 711 oop Reflection::new_method(methodHandle method, bool intern_name, bool for_constant_pool_access, TRAPS) { |
935 // new default: 6531596 | 935 // new default: 6531596 |
936 if (ReflectionWrapResolutionErrors) { | 936 if (ReflectionWrapResolutionErrors) { |
937 ResourceMark rm(THREAD); | 937 ResourceMark rm(THREAD); |
938 Handle h_origexception = Exceptions::new_exception(THREAD, | 938 Handle h_origexception = Exceptions::new_exception(THREAD, |
939 vmSymbols::java_lang_AbstractMethodError(), | 939 vmSymbols::java_lang_AbstractMethodError(), |
940 Method::name_and_sig_as_C_string(Klass::cast(target_klass()), | 940 Method::name_and_sig_as_C_string(target_klass(), |
941 method->name(), | 941 method->name(), |
942 method->signature())); | 942 method->signature())); |
943 JavaCallArguments args(h_origexception); | 943 JavaCallArguments args(h_origexception); |
944 THROW_ARG_0(vmSymbols::java_lang_reflect_InvocationTargetException(), | 944 THROW_ARG_0(vmSymbols::java_lang_reflect_InvocationTargetException(), |
945 vmSymbols::throwable_void_signature(), | 945 vmSymbols::throwable_void_signature(), |
946 &args); | 946 &args); |
947 } else { | 947 } else { |
948 ResourceMark rm(THREAD); | 948 ResourceMark rm(THREAD); |
949 THROW_MSG_0(vmSymbols::java_lang_AbstractMethodError(), | 949 THROW_MSG_0(vmSymbols::java_lang_AbstractMethodError(), |
950 Method::name_and_sig_as_C_string(Klass::cast(target_klass()), | 950 Method::name_and_sig_as_C_string(target_klass(), |
951 method->name(), | 951 method->name(), |
952 method->signature())); | 952 method->signature())); |
953 } | 953 } |
954 } | 954 } |
955 } | 955 } |
960 // I believe this is a ShouldNotGetHere case which requires | 960 // I believe this is a ShouldNotGetHere case which requires |
961 // an internal vtable bug. If you ever get this please let Karen know. | 961 // an internal vtable bug. If you ever get this please let Karen know. |
962 if (method.is_null()) { | 962 if (method.is_null()) { |
963 ResourceMark rm(THREAD); | 963 ResourceMark rm(THREAD); |
964 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), | 964 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), |
965 Method::name_and_sig_as_C_string(Klass::cast(klass()), | 965 Method::name_and_sig_as_C_string(klass(), |
966 reflected_method->name(), | 966 reflected_method->name(), |
967 reflected_method->signature())); | 967 reflected_method->signature())); |
968 } | 968 } |
969 | 969 |
970 // In the JDK 1.4 reflection implementation, the security check is | 970 // In the JDK 1.4 reflection implementation, the security check is |