src/share/vm/runtime/reflection.cpp

changeset 1577
4ce7240d622c
parent 1100
c89f86385056
child 1587
cd37471eaecc
equal deleted inserted replaced
1575:1f6d42899c3a 1577: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

mercurial