Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/reflection.cpp @ 1142:4ce7240d622c
6914300: ciEnv should export all well known classes
Reviewed-by: kvn, twisti
author | never |
---|---|
date | Wed, 06 Jan 2010 14:22:39 -0800 |
parents | c89f86385056 |
children | cd37471eaecc |
comparison
equal
deleted
inserted
replaced
1140:1f6d42899c3a | 1142:4ce7240d622c |
---|---|
447 } | 447 } |
448 // New (1.4) reflection implementation. Allow all accesses from | 448 // New (1.4) reflection implementation. Allow all accesses from |
449 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. | 449 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. |
450 if ( JDK_Version::is_gte_jdk14x_version() | 450 if ( JDK_Version::is_gte_jdk14x_version() |
451 && UseNewReflection | 451 && UseNewReflection |
452 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_magic_klass())) { | 452 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { |
453 return true; | 453 return true; |
454 } | 454 } |
455 | 455 |
456 return can_relax_access_check_for(current_class, new_class, classloader_only); | 456 return can_relax_access_check_for(current_class, new_class, classloader_only); |
457 } | 457 } |
539 | 539 |
540 // New (1.4) reflection implementation. Allow all accesses from | 540 // New (1.4) reflection implementation. Allow all accesses from |
541 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. | 541 // sun/reflect/MagicAccessorImpl subclasses to succeed trivially. |
542 if ( JDK_Version::is_gte_jdk14x_version() | 542 if ( JDK_Version::is_gte_jdk14x_version() |
543 && UseNewReflection | 543 && UseNewReflection |
544 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_magic_klass())) { | 544 && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { |
545 return true; | 545 return true; |
546 } | 546 } |
547 | 547 |
548 return can_relax_access_check_for( | 548 return can_relax_access_check_for( |
549 current_class, field_class, classloader_only); | 549 current_class, field_class, classloader_only); |
629 } | 629 } |
630 | 630 |
631 | 631 |
632 objArrayHandle Reflection::get_parameter_types(methodHandle method, int parameter_count, oop* return_type, TRAPS) { | 632 objArrayHandle Reflection::get_parameter_types(methodHandle method, int parameter_count, oop* return_type, TRAPS) { |
633 // Allocate array holding parameter types (java.lang.Class instances) | 633 // Allocate array holding parameter types (java.lang.Class instances) |
634 objArrayOop m = oopFactory::new_objArray(SystemDictionary::class_klass(), parameter_count, CHECK_(objArrayHandle())); | 634 objArrayOop m = oopFactory::new_objArray(SystemDictionary::Class_klass(), parameter_count, CHECK_(objArrayHandle())); |
635 objArrayHandle mirrors (THREAD, m); | 635 objArrayHandle mirrors (THREAD, m); |
636 int index = 0; | 636 int index = 0; |
637 // Collect parameter types | 637 // Collect parameter types |
638 symbolHandle signature (THREAD, method->signature()); | 638 symbolHandle signature (THREAD, method->signature()); |
639 SignatureStream ss(signature); | 639 SignatureStream ss(signature); |
1306 if (java_lang_Class::is_primitive(mirror)) return NULL; | 1306 if (java_lang_Class::is_primitive(mirror)) return NULL; |
1307 klassOop klass = java_lang_Class::as_klassOop(mirror); | 1307 klassOop klass = java_lang_Class::as_klassOop(mirror); |
1308 if (Klass::cast(klass)->oop_is_array() && which == MEMBER_DECLARED) return NULL; | 1308 if (Klass::cast(klass)->oop_is_array() && which == MEMBER_DECLARED) return NULL; |
1309 | 1309 |
1310 if (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array()) { | 1310 if (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array()) { |
1311 klass = SystemDictionary::object_klass(); | 1311 klass = SystemDictionary::Object_klass(); |
1312 } | 1312 } |
1313 instanceKlassHandle h_k(THREAD, klass); | 1313 instanceKlassHandle h_k(THREAD, klass); |
1314 | 1314 |
1315 // Ensure klass is linked (need not be initialized) | 1315 // Ensure klass is linked (need not be initialized) |
1316 h_k->link_class(CHECK_NULL); | 1316 h_k->link_class(CHECK_NULL); |
1373 | 1373 |
1374 objArrayOop Reflection::reflect_methods(oop mirror, jint which, TRAPS) { | 1374 objArrayOop Reflection::reflect_methods(oop mirror, jint which, TRAPS) { |
1375 // Exclude primitive types | 1375 // Exclude primitive types |
1376 if (java_lang_Class::is_primitive(mirror) || | 1376 if (java_lang_Class::is_primitive(mirror) || |
1377 (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array() && (which == MEMBER_DECLARED))) { | 1377 (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array() && (which == MEMBER_DECLARED))) { |
1378 klassOop klass = SystemDictionary::reflect_method_klass(); | 1378 klassOop klass = SystemDictionary::reflect_Method_klass(); |
1379 return oopFactory::new_objArray(klass, 0, CHECK_NULL); // Return empty array | 1379 return oopFactory::new_objArray(klass, 0, CHECK_NULL); // Return empty array |
1380 } | 1380 } |
1381 | 1381 |
1382 klassOop klass = java_lang_Class::as_klassOop(mirror); | 1382 klassOop klass = java_lang_Class::as_klassOop(mirror); |
1383 if (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array()) { | 1383 if (Klass::cast(java_lang_Class::as_klassOop(mirror))->oop_is_array()) { |
1384 klass = SystemDictionary::object_klass(); | 1384 klass = SystemDictionary::Object_klass(); |
1385 } | 1385 } |
1386 instanceKlassHandle h_k(THREAD, klass); | 1386 instanceKlassHandle h_k(THREAD, klass); |
1387 | 1387 |
1388 // Ensure klass is linked (need not be initialized) | 1388 // Ensure klass is linked (need not be initialized) |
1389 h_k->link_class(CHECK_NULL); | 1389 h_k->link_class(CHECK_NULL); |
1409 } | 1409 } |
1410 } | 1410 } |
1411 } | 1411 } |
1412 | 1412 |
1413 // Allocate result | 1413 // Allocate result |
1414 klassOop klass = SystemDictionary::reflect_method_klass(); | 1414 klassOop klass = SystemDictionary::reflect_Method_klass(); |
1415 objArrayOop r = oopFactory::new_objArray(klass, count, CHECK_NULL); | 1415 objArrayOop r = oopFactory::new_objArray(klass, count, CHECK_NULL); |
1416 objArrayHandle h_result (THREAD, r); | 1416 objArrayHandle h_result (THREAD, r); |
1417 | 1417 |
1418 // Fill in results backwards | 1418 // Fill in results backwards |
1419 { | 1419 { |
1460 count++; | 1460 count++; |
1461 } | 1461 } |
1462 } | 1462 } |
1463 } | 1463 } |
1464 // Allocate result | 1464 // Allocate result |
1465 klassOop klass = SystemDictionary::reflect_method_klass(); | 1465 klassOop klass = SystemDictionary::reflect_Method_klass(); |
1466 objArrayOop r = oopFactory::new_objArray(klass, count, CHECK_NULL); | 1466 objArrayOop r = oopFactory::new_objArray(klass, count, CHECK_NULL); |
1467 objArrayHandle h_result (THREAD, r); | 1467 objArrayHandle h_result (THREAD, r); |
1468 | 1468 |
1469 // Fill in results backwards | 1469 // Fill in results backwards |
1470 { | 1470 { |
1521 objArrayOop Reflection::reflect_constructors(oop mirror, jint which, TRAPS) { | 1521 objArrayOop Reflection::reflect_constructors(oop mirror, jint which, TRAPS) { |
1522 // Exclude primitive, interface and array types | 1522 // Exclude primitive, interface and array types |
1523 bool prim = java_lang_Class::is_primitive(mirror); | 1523 bool prim = java_lang_Class::is_primitive(mirror); |
1524 Klass* k = prim ? NULL : Klass::cast(java_lang_Class::as_klassOop(mirror)); | 1524 Klass* k = prim ? NULL : Klass::cast(java_lang_Class::as_klassOop(mirror)); |
1525 if (prim || k->is_interface() || k->oop_is_array()) { | 1525 if (prim || k->is_interface() || k->oop_is_array()) { |
1526 return oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), 0, CHECK_NULL); // Return empty array | 1526 return oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0, CHECK_NULL); // Return empty array |
1527 } | 1527 } |
1528 | 1528 |
1529 // Must be instanceKlass at this point | 1529 // Must be instanceKlass at this point |
1530 instanceKlassHandle h_k(THREAD, java_lang_Class::as_klassOop(mirror)); | 1530 instanceKlassHandle h_k(THREAD, java_lang_Class::as_klassOop(mirror)); |
1531 | 1531 |