< 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 >