< prev index next >
src/share/vm/prims/jvm.cpp
Print this page
@@ -1521,10 +1521,36 @@
// the system could allow a spoof of an inner class to gain access rights.
Reflection::check_for_inner_class(outer_klass, k, *inner_is_member, CHECK_NULL);
return outer_klass();
}
+JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls))
+{
+ oop mirror = JNIHandles::resolve_non_null(cls);
+ if (java_lang_Class::is_primitive(mirror) ||
+ !java_lang_Class::as_Klass(mirror)->oop_is_instance()) {
+ return NULL;
+ }
+ instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror)));
+ constantPoolHandle i_cp(thread, k->constants());
+ for (InnerClassesIterator iter(k); !iter.done(); iter.next()) {
+ int ioff = iter.inner_class_info_index();
+ int ooff = iter.outer_class_info_index();
+ int noff = iter.inner_name_index();
+ if (noff != 0 && ioff != 0 && i_cp->klass_name_at_matches(k, ioff)) {
+ Klass* inner_klass = i_cp->klass_at(ioff, CHECK_NULL);
+ if (k() == inner_klass) {
+ Symbol* name = i_cp->symbol_at(noff);
+ Handle str = java_lang_String::create_from_symbol(name, CHECK_NULL);
+ return (jstring) JNIHandles::make_local(env, str());
+ }
+ }
+ }
+ return NULL;
+}
+JVM_END
+
JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassSignature");
JvmtiVMObjectAllocEventCollector oam;
ResourceMark rm(THREAD);
< prev index next >