< prev index next >
src/hotspot/share/prims/jvm.cpp
Print this page
@@ -1302,16 +1302,17 @@
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))) {
+ 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(JNIHandles::resolve_non_null(cls)));
+ 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,34 +1328,36 @@
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))) {
+ 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(JNIHandles::resolve_non_null(cls));
+ 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");
- if (JNIHandles::resolve(cls) == NULL) {
+ oop mirror = JNIHandles::resolve_non_null(cls);
+ if (mirror == NULL) {
THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
}
- if (java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
+ if (java_lang_Class::is_primitive(mirror)) {
// Primitive types does not have a protection domain.
return NULL;
}
- oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls));
+ 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,16 +1475,17 @@
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))) {
+ 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(JNIHandles::resolve_non_null(cls));
+ 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,18 +1494,18 @@
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 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(JNIHandles::resolve_non_null(ofClass)));
+ 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,33 +1559,39 @@
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()) {
+ 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(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))
- )->compute_enclosing_class(&inner_is_member, CHECK_NULL);
+ = 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) ||
- !java_lang_Class::as_Klass(mirror)->is_instance_klass()) {
+ if (java_lang_Class::is_primitive(mirror)) {
return NULL;
}
- InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
+ 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,13 +1606,14 @@
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(JNIHandles::resolve(cls))) {
- Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
+ 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,14 +1624,14 @@
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(JNIHandles::resolve(cls))) {
- Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
+ 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,19 +1806,20 @@
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(JNIHandles::resolve_non_null(ofClass)) ||
- java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
+ 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(JNIHandles::resolve_non_null(ofClass)));
+ 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,19 +1915,20 @@
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(JNIHandles::resolve_non_null(ofClass))
- || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
+ 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(JNIHandles::resolve_non_null(ofClass)));
+ 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,16 +1998,17 @@
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))) {
+ 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(JNIHandles::resolve_non_null(cls));
+ 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,12 +2119,13 @@
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));
+ 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,14 +2150,14 @@
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(JNIHandles::resolve_non_null(cls))) {
- Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
+ 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 >