Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 9985:e6bd1004082a
added HotSpotResolvedObjectType.getMethods() to get all methods of a class including those (such as <clinit>) not normally exposed by Java reflection
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 11 Jun 2013 01:18:57 +0200 |
parents | 0f7ca53be929 |
children | f90fc8987779 |
comparison
equal
deleted
inserted
replaced
9984:f3330a4487eb | 9985:e6bd1004082a |
---|---|
589 instanceKlassHandle k = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(klass)); | 589 instanceKlassHandle k = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(klass)); |
590 GrowableArray<Handle> fields(k->java_fields_count()); | 590 GrowableArray<Handle> fields(k->java_fields_count()); |
591 | 591 |
592 for (AllFieldStream fs(k()); !fs.done(); fs.next()) { | 592 for (AllFieldStream fs(k()); !fs.done(); fs.next()) { |
593 if (!fs.access_flags().is_static()) { | 593 if (!fs.access_flags().is_static()) { |
594 Handle type = GraalCompiler::get_JavaTypeFromSignature(fs.signature(), k, Thread::current()); | 594 Handle type = GraalCompiler::get_JavaTypeFromSignature(fs.signature(), k, THREAD); |
595 int flags = fs.access_flags().as_int(); | 595 int flags = fs.access_flags().as_int(); |
596 bool internal = fs.access_flags().is_internal(); | 596 bool internal = fs.access_flags().is_internal(); |
597 Handle name = java_lang_String::create_from_symbol(fs.name(), Thread::current()); | 597 Handle name = java_lang_String::create_from_symbol(fs.name(), THREAD); |
598 Handle field = VMToCompiler::createJavaField(JNIHandles::resolve(klass), name, type, fs.offset(), flags, internal, Thread::current()); | 598 Handle field = VMToCompiler::createJavaField(JNIHandles::resolve(klass), name, type, fs.offset(), flags, internal, THREAD); |
599 fields.append(field()); | 599 fields.append(field()); |
600 } | 600 } |
601 } | 601 } |
602 objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::HotSpotResolvedJavaField_klass(), fields.length(), CHECK_NULL); | 602 objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::HotSpotResolvedJavaField_klass(), fields.length(), CHECK_NULL); |
603 for (int i = 0; i < fields.length(); ++i) { | 603 for (int i = 0; i < fields.length(); ++i) { |
604 field_array->obj_at_put(i, fields.at(i)()); | 604 field_array->obj_at_put(i, fields.at(i)()); |
605 } | 605 } |
606 return JNIHandles::make_local(field_array()); | 606 return JNIHandles::make_local(THREAD, field_array()); |
607 C2V_END | |
608 | |
609 C2V_VMENTRY(jobject, getMethods, (JNIEnv *, jobject, jobject klass)) | |
610 ResourceMark rm; | |
611 | |
612 instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(klass))); | |
613 Array<Method*>* methods = k->methods(); | |
614 int methods_length = methods->length(); | |
615 | |
616 // Allocate result | |
617 objArrayOop r = oopFactory::new_objArray(SystemDictionary::HotSpotResolvedJavaMethod_klass(), methods_length, CHECK_NULL); | |
618 objArrayHandle result (THREAD, r); | |
619 | |
620 for (int i = 0; i < methods_length; i++) { | |
621 methodHandle method(THREAD, methods->at(i)); | |
622 Handle holder = JNIHandles::resolve(klass); | |
623 oop m = VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD); | |
624 result->obj_at_put(i, m); | |
625 } | |
626 | |
627 return JNIHandles::make_local(THREAD, result()); | |
607 C2V_END | 628 C2V_END |
608 | 629 |
609 C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv *env, jobject, jlong addr)) | 630 C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv *env, jobject, jlong addr)) |
610 address target_addr = (address) addr; | 631 address target_addr = (address) addr; |
611 if (target_addr != 0x0) { | 632 if (target_addr != 0x0) { |
1207 {CC"lookupTypeInPool", CC"("HS_RESOLVED_TYPE"I)"TYPE, FN_PTR(lookupTypeInPool)}, | 1228 {CC"lookupTypeInPool", CC"("HS_RESOLVED_TYPE"I)"TYPE, FN_PTR(lookupTypeInPool)}, |
1208 {CC"lookupReferencedTypeInPool", CC"("HS_RESOLVED_TYPE"IB)V", FN_PTR(lookupReferencedTypeInPool)}, | 1229 {CC"lookupReferencedTypeInPool", CC"("HS_RESOLVED_TYPE"IB)V", FN_PTR(lookupReferencedTypeInPool)}, |
1209 {CC"lookupFieldInPool", CC"("HS_RESOLVED_TYPE"IB)"FIELD, FN_PTR(lookupFieldInPool)}, | 1230 {CC"lookupFieldInPool", CC"("HS_RESOLVED_TYPE"IB)"FIELD, FN_PTR(lookupFieldInPool)}, |
1210 {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(resolveMethod)}, | 1231 {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METHOD, FN_PTR(resolveMethod)}, |
1211 {CC"getInstanceFields", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_FIELD, FN_PTR(getInstanceFields)}, | 1232 {CC"getInstanceFields", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_FIELD, FN_PTR(getInstanceFields)}, |
1233 {CC"getMethods", CC"("HS_RESOLVED_TYPE")["HS_RESOLVED_METHOD, FN_PTR(getMethods)}, | |
1212 {CC"isTypeInitialized", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(isTypeInitialized)}, | 1234 {CC"isTypeInitialized", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(isTypeInitialized)}, |
1213 {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, | 1235 {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, |
1214 {CC"initializeType", CC"("HS_RESOLVED_TYPE")V", FN_PTR(initializeType)}, | 1236 {CC"initializeType", CC"("HS_RESOLVED_TYPE")V", FN_PTR(initializeType)}, |
1215 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, | 1237 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, |
1216 {CC"getResolvedType", CC"("CLASS")"RESOLVED_TYPE, FN_PTR(getResolvedType)}, | 1238 {CC"getResolvedType", CC"("CLASS")"RESOLVED_TYPE, FN_PTR(getResolvedType)}, |