< prev index next >
src/hotspot/share/prims/jvm.cpp
Print this page
*** 1302,1317 ****
JVM_END
JVM_ENTRY(jobjectArray, JVM_GetClassSigners(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetClassSigners");
JvmtiVMObjectAllocEventCollector oam;
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
// There are no signers for primitive types
return NULL;
}
! objArrayHandle signers(THREAD, java_lang_Class::signers(JNIHandles::resolve_non_null(cls)));
// If there are no signers set in the class, or if the class
// is an array, return NULL.
if (signers == NULL) return NULL;
--- 1302,1318 ----
JVM_END
JVM_ENTRY(jobjectArray, JVM_GetClassSigners(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetClassSigners");
JvmtiVMObjectAllocEventCollector oam;
! oop mirror = JNIHandles::resolve_non_null(cls);
! if (java_lang_Class::is_primitive(mirror)) {
// There are no signers for primitive types
return NULL;
}
! objArrayHandle signers(THREAD, java_lang_Class::signers(mirror));
// If there are no signers set in the class, or if the class
// is an array, return NULL.
if (signers == NULL) return NULL;
*** 1327,1360 ****
JVM_END
JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers))
JVMWrapper("JVM_SetClassSigners");
! if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
// This call is ignored for primitive types and arrays.
// Signers are only set once, ClassLoader.java, and thus shouldn't
// be called with an array. Only the bootstrap loader creates arrays.
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
if (k->is_instance_klass()) {
java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers)));
}
}
JVM_END
JVM_ENTRY(jobject, JVM_GetProtectionDomain(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetProtectionDomain");
! if (JNIHandles::resolve(cls) == NULL) {
THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
}
! if (java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
// Primitive types does not have a protection domain.
return NULL;
}
! oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls));
return (jobject) JNIHandles::make_local(THREAD, pd);
JVM_END
// Returns the inherited_access_control_context field of the running thread.
--- 1328,1363 ----
JVM_END
JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers))
JVMWrapper("JVM_SetClassSigners");
! oop mirror = JNIHandles::resolve_non_null(cls);
! if (!java_lang_Class::is_primitive(mirror)) {
// This call is ignored for primitive types and arrays.
// Signers are only set once, ClassLoader.java, and thus shouldn't
// be called with an array. Only the bootstrap loader creates arrays.
! Klass* k = java_lang_Class::as_Klass(mirror);
if (k->is_instance_klass()) {
java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers)));
}
}
JVM_END
JVM_ENTRY(jobject, JVM_GetProtectionDomain(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetProtectionDomain");
! oop mirror = JNIHandles::resolve_non_null(cls);
! if (mirror == NULL) {
THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
}
! if (java_lang_Class::is_primitive(mirror)) {
// Primitive types does not have a protection domain.
return NULL;
}
! oop pd = java_lang_Class::protection_domain(mirror);
return (jobject) JNIHandles::make_local(THREAD, pd);
JVM_END
// Returns the inherited_access_control_context field of the running thread.
*** 1472,1487 ****
JVM_END
JVM_ENTRY(jint, JVM_GetClassModifiers(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetClassModifiers");
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
// Primitive type
return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
}
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0));
assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK");
return k->modifier_flags();
JVM_END
--- 1475,1491 ----
JVM_END
JVM_ENTRY(jint, JVM_GetClassModifiers(JNIEnv *env, jclass cls))
JVMWrapper("JVM_GetClassModifiers");
! oop mirror = JNIHandles::resolve_non_null(cls);
! if (java_lang_Class::is_primitive(mirror)) {
// Primitive type
return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
}
! Klass* k = java_lang_Class::as_Klass(mirror);
debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0));
assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK");
return k->modifier_flags();
JVM_END
*** 1490,1507 ****
JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass))
JvmtiVMObjectAllocEventCollector oam;
// ofClass is a reference to a java_lang_Class object. The mirror object
// of an InstanceKlass
!
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
return (jobjectArray)JNIHandles::make_local(THREAD, result);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
InnerClassesIterator iter(k);
if (iter.length() == 0) {
// Neither an inner nor outer class
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
--- 1494,1511 ----
JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass))
JvmtiVMObjectAllocEventCollector oam;
// ofClass is a reference to a java_lang_Class object. The mirror object
// of an InstanceKlass
! oop ofMirror = JNIHandles::resolve_non_null(ofClass);
! if (java_lang_Class::is_primitive(ofMirror) ||
! ! java_lang_Class::as_Klass(ofMirror)->is_instance_klass()) {
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
return (jobjectArray)JNIHandles::make_local(THREAD, result);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror));
InnerClassesIterator iter(k);
if (iter.length() == 0) {
// Neither an inner nor outer class
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
*** 1555,1587 ****
JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
{
// ofClass is a reference to a java_lang_Class object.
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
return NULL;
}
bool inner_is_member = false;
Klass* outer_klass
! = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))
! )->compute_enclosing_class(&inner_is_member, CHECK_NULL);
if (outer_klass == NULL) return NULL; // already a top-level class
if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method)
return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror());
}
JVM_END
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)->is_instance_klass()) {
return NULL;
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
int ooff = 0, noff = 0;
if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) {
if (noff != 0) {
constantPoolHandle i_cp(thread, k->constants());
Symbol* name = i_cp->symbol_at(noff);
--- 1559,1597 ----
JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
{
// ofClass is a reference to a java_lang_Class object.
! oop ofMirror = JNIHandles::resolve_non_null(ofClass);
! if (java_lang_Class::is_primitive(ofMirror)) {
! return NULL;
! }
! Klass* klass = java_lang_Class::as_Klass(ofMirror);
! if (!klass->is_instance_klass()) {
return NULL;
}
bool inner_is_member = false;
Klass* outer_klass
! = InstanceKlass::cast(klass)->compute_enclosing_class(&inner_is_member, CHECK_NULL);
if (outer_klass == NULL) return NULL; // already a top-level class
if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method)
return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror());
}
JVM_END
JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls))
{
oop mirror = JNIHandles::resolve_non_null(cls);
! if (java_lang_Class::is_primitive(mirror)) {
return NULL;
}
! Klass* klass = java_lang_Class::as_Klass(mirror);
! if (!klass->is_instance_klass()) {
! return NULL;
! }
! InstanceKlass* k = InstanceKlass::cast(klass);
int ooff = 0, noff = 0;
if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) {
if (noff != 0) {
constantPoolHandle i_cp(thread, k->constants());
Symbol* name = i_cp->symbol_at(noff);
*** 1596,1608 ****
JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassSignature");
JvmtiVMObjectAllocEventCollector oam;
ResourceMark rm(THREAD);
// Return null for arrays and primatives
! if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
if (k->is_instance_klass()) {
Symbol* sym = InstanceKlass::cast(k)->generic_signature();
if (sym == NULL) return NULL;
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
return (jstring) JNIHandles::make_local(THREAD, str());
--- 1606,1619 ----
JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassSignature");
JvmtiVMObjectAllocEventCollector oam;
ResourceMark rm(THREAD);
+ oop mirror = JNIHandles::resolve_non_null(cls);
// Return null for arrays and primatives
! if (!java_lang_Class::is_primitive(mirror)) {
! Klass* k = java_lang_Class::as_Klass(mirror);
if (k->is_instance_klass()) {
Symbol* sym = InstanceKlass::cast(k)->generic_signature();
if (sym == NULL) return NULL;
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
return (jstring) JNIHandles::make_local(THREAD, str());
*** 1613,1626 ****
JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassAnnotations");
!
// Return null for arrays and primitives
! if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
if (k->is_instance_klass()) {
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
return (jbyteArray) JNIHandles::make_local(THREAD, a);
}
}
--- 1624,1637 ----
JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassAnnotations");
! oop mirror = JNIHandles::resolve_non_null(cls);
// Return null for arrays and primitives
! if (!java_lang_Class::is_primitive(mirror)) {
! Klass* k = java_lang_Class::as_Klass(mirror);
if (k->is_instance_klass()) {
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
return (jbyteArray) JNIHandles::make_local(THREAD, a);
}
}
*** 1795,1813 ****
JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly))
{
JVMWrapper("JVM_GetClassDeclaredFields");
JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
// Return empty array
oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
return (jobjectArray) JNIHandles::make_local(THREAD, res);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
constantPoolHandle cp(THREAD, k->constants());
// Ensure class is linked
k->link_class(CHECK_NULL);
--- 1806,1825 ----
JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass, jboolean publicOnly))
{
JVMWrapper("JVM_GetClassDeclaredFields");
JvmtiVMObjectAllocEventCollector oam;
+ oop ofMirror = JNIHandles::resolve_non_null(ofClass);
// Exclude primitive types and array types
! if (java_lang_Class::is_primitive(ofMirror) ||
! java_lang_Class::as_Klass(ofMirror)->is_array_klass()) {
// Return empty array
oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
return (jobjectArray) JNIHandles::make_local(THREAD, res);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror));
constantPoolHandle cp(THREAD, k->constants());
// Ensure class is linked
k->link_class(CHECK_NULL);
*** 1903,1921 ****
bool want_constructor,
Klass* klass, TRAPS) {
JvmtiVMObjectAllocEventCollector oam;
// Exclude primitive types and array types
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
! || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
// Return empty array
oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
return (jobjectArray) JNIHandles::make_local(THREAD, res);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
// Ensure class is linked
k->link_class(CHECK_NULL);
Array<Method*>* methods = k->methods();
--- 1915,1934 ----
bool want_constructor,
Klass* klass, TRAPS) {
JvmtiVMObjectAllocEventCollector oam;
+ oop ofMirror = JNIHandles::resolve_non_null(ofClass);
// Exclude primitive types and array types
! if (java_lang_Class::is_primitive(ofMirror)
! || java_lang_Class::as_Klass(ofMirror)->is_array_klass()) {
// Return empty array
oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
return (jobjectArray) JNIHandles::make_local(THREAD, res);
}
! InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(ofMirror));
// Ensure class is linked
k->link_class(CHECK_NULL);
Array<Method*>* methods = k->methods();
*** 1985,2000 ****
JVM_END
JVM_ENTRY(jint, JVM_GetClassAccessFlags(JNIEnv *env, jclass cls))
{
JVMWrapper("JVM_GetClassAccessFlags");
! if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
// Primitive type
return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
}
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS;
}
JVM_END
JVM_ENTRY(jboolean, JVM_AreNestMates(JNIEnv *env, jclass current, jclass member))
--- 1998,2014 ----
JVM_END
JVM_ENTRY(jint, JVM_GetClassAccessFlags(JNIEnv *env, jclass cls))
{
JVMWrapper("JVM_GetClassAccessFlags");
! oop mirror = JNIHandles::resolve_non_null(cls);
! if (java_lang_Class::is_primitive(mirror)) {
// Primitive type
return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
}
! Klass* k = java_lang_Class::as_Klass(mirror);
return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS;
}
JVM_END
JVM_ENTRY(jboolean, JVM_AreNestMates(JNIEnv *env, jclass current, jclass member))
*** 2105,2116 ****
JVM_END
JVM_ENTRY(jobjectArray, JVM_GetPermittedSubclasses(JNIEnv* env, jclass current))
{
JVMWrapper("JVM_GetPermittedSubclasses");
! assert(!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(current)), "should not be");
! Klass* c = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(current));
assert(c->is_instance_klass(), "must be");
InstanceKlass* ik = InstanceKlass::cast(c);
{
JvmtiVMObjectAllocEventCollector oam;
Array<u2>* subclasses = ik->permitted_subclasses();
--- 2119,2131 ----
JVM_END
JVM_ENTRY(jobjectArray, JVM_GetPermittedSubclasses(JNIEnv* env, jclass current))
{
JVMWrapper("JVM_GetPermittedSubclasses");
! oop mirror = JNIHandles::resolve_non_null(current);
! assert(!java_lang_Class::is_primitive(mirror), "should not be");
! Klass* c = java_lang_Class::as_Klass(mirror);
assert(c->is_instance_klass(), "must be");
InstanceKlass* ik = InstanceKlass::cast(c);
{
JvmtiVMObjectAllocEventCollector oam;
Array<u2>* subclasses = ik->permitted_subclasses();
*** 2135,2148 ****
JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls))
{
JVMWrapper("JVM_GetClassConstantPool");
JvmtiVMObjectAllocEventCollector oam;
!
// Return null for primitives and arrays
! if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
if (k->is_instance_klass()) {
InstanceKlass* k_h = InstanceKlass::cast(k);
Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
reflect_ConstantPool::set_cp(jcp(), k_h->constants());
return JNIHandles::make_local(THREAD, jcp());
--- 2150,2163 ----
JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls))
{
JVMWrapper("JVM_GetClassConstantPool");
JvmtiVMObjectAllocEventCollector oam;
! oop mirror = JNIHandles::resolve_non_null(cls);
// Return null for primitives and arrays
! if (!java_lang_Class::is_primitive(mirror)) {
! Klass* k = java_lang_Class::as_Klass(mirror);
if (k->is_instance_klass()) {
InstanceKlass* k_h = InstanceKlass::cast(k);
Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
reflect_ConstantPool::set_cp(jcp(), k_h->constants());
return JNIHandles::make_local(THREAD, jcp());
< prev index next >