(original) (raw)
src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/jvm.cpp Tue Oct 27 13:06:58 2015** --- new/src/share/vm/prims/jvm.cpp Tue Oct 27 13:06:57 2015
*** 1020,1041 **** --- 1020,1041 ---- }
KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
// Figure size of result array
int size;
! if (klass->oop_is_instance()) {
! if (klass->is_instance_klass()) {
size = InstanceKlass::cast(klass())->local_interfaces()->length();
} else {
! assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass");
! assert(klass->is_objArray_klass() || klass->is_typeArray_klass(), "Illegal mirror klass");
size = 2;
}
// Allocate result array
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL);
objArrayHandle result (THREAD, r);
// Fill in result
! if (klass->oop_is_instance()) {
! if (klass->is_instance_klass()) {
// Regular instance klass, fill in all local interfaces
for (int index = 0; index < size; index++) {
Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
result->obj_at_put(index, k->java_mirror());
}
*** 1054,1064 ****
--- 1054,1064 ----
if (java_lang_Class::is_primitive(mirror)) {
return JNI_FALSE;
}
Klass* k = java_lang_Class::as_Klass(mirror);
jboolean result = k->is_interface();
! assert(!result || k->oop_is_instance(),
! assert(!result || k->is_instance_klass(),
"all interfaces are instance types");
// The compiler intrinsic for isInterface tests the
// Klass::_access_flags bits in the same way.
return result;
JVM_END
*** 1095,1105 ****
--- 1095,1105 ----
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->oop_is_instance()) {
! if (k->is_instance_klass()) {
java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers)));
}
}
JVM_END
*** 1354,1364 **** --- 1354,1364 ----
JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv env, jclass cls))
JVMWrapper("JVM_IsArrayClass");
Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
! return (k != NULL) && k->oop_is_array() ? true : false;
! return (k != NULL) && k->is_array_klass() ? true : false;
JVM_END
JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsPrimitiveClass");
*** 1387,1397 **** --- 1387,1397 ---- 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))->oop_is_instance()) {
! ! 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(env, result);
}
instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
*** 1451,1461 **** --- 1451,1461 ----
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))->oop_is_instance()) {
! ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
return NULL;
}
bool inner_is_member = false;
Klass* outer_klass
*** 1469,1479 **** --- 1469,1479 ----
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()) {
! !java_lang_Class::as_Klass(mirror)->is_instance_klass()) {
return NULL;
}
instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror)));
int ooff = 0, noff = 0;
if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) {
*** 1494,1504 ****
--- 1494,1504 ----
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->oop_is_instance()) {
! 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(env, str());
}
*** 1512,1522 **** --- 1512,1522 ---- 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->oop_is_instance()) {
! if (k->is_instance_klass()) {
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
return (jbyteArray) JNIHandles::make_local(env, a);
}
}
return NULL;
*** 1582,1592 ****
--- 1582,1592 ----
JVMWrapper("JVM_GetClassTypeAnnotations");
ResourceMark rm(THREAD);
// 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->oop_is_instance()) {
! if (k->is_instance_klass()) {
AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations();
if (type_annotations != NULL) {
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
return (jbyteArray) JNIHandles::make_local(env, a);
}
*** 1691,1701 ****
--- 1691,1701 ----
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))->oop_is_array()) {
! 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(env, res);
}
*** 1765,1775 ****
--- 1765,1775 ----
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))->oop_is_array()) {
! || 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(env, res);
}
*** 1866,1876 **** --- 1866,1876 ---- 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->oop_is_instance()) {
! if (k->is_instance_klass()) {
instanceKlassHandle k_h(THREAD, k);
Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
return JNIHandles::make_local(jcp());
}
*** 2134,2145 **** --- 2134,2145 ---- oop r = JNIHandles::resolve(cls); assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); if (java_lang_Class::is_primitive(r)) return false;
Klass* k = java_lang_Class::as_Klass(r);
! assert(k->oop_is_instance(), "must be an instance klass");
! if (! k->oop_is_instance()) return false;
! assert(k->is_instance_klass(), "must be an instance klass");
! if (!k->is_instance_klass()) return false;
ResourceMark rm(THREAD);
const char* name = k->name()->as_C_string();
bool system_class = k->class_loader() == NULL;
return JavaAssertions::enabled(name, system_class);
*** 2180,2190 ****
--- 2180,2190 ----
JVMWrapper("JVM_GetClassCPTypes");
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
// types will have length zero if this is not an InstanceKlass
// (length is determined by call to JVM_GetClassCPEntriesCount)
! if (k->oop_is_instance()) {
! if (k->is_instance_klass()) {
ConstantPool* cp = InstanceKlass::cast(k)->constants();
for (int index = cp->length() - 1; index >= 0; index--) {
constantTag tag = cp->tag_at(index);
types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value();
}
*** 2194,2226 **** --- 2194,2220 ----
JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv env, jclass cls))
JVMWrapper("JVM_GetClassCPEntriesCount");
Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
if (!k->oop_is_instance())
return 0;
return InstanceKlass::cast(k)->constants()->length();
+ return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->constants()->length();
JVM_END
JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv env, jclass cls))
JVMWrapper("JVM_GetClassFieldsCount");
Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
if (!k->oop_is_instance())
return 0;
return InstanceKlass::cast(k)->java_fields_count();
+ return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->java_fields_count();
JVM_END
JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv env, jclass cls))
JVMWrapper("JVM_GetClassMethodsCount");
Klass k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
if (!k->oop_is_instance())
return 0;
return InstanceKlass::cast(k)->methods()->length();
+ return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->methods()->length();
JVM_END
// The following methods, used for the verifier, are never called with // array klasses, so a direct cast to InstanceKlass is safe.
*** 3474,3484 ****
--- 3468,3478 ----
// if there is no security manager in 3-arg Class.forName().
Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
KlassHandle klass_handle(THREAD, klass);
// Check if we should initialize the class
! if (init && klass_handle->oop_is_instance()) {
! if (init && klass_handle->is_instance_klass()) {
klass_handle->initialize(CHECK_NULL);
}
return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror());
}
*** 3622,3632 ****
--- 3616,3626 ----
// Special handling for primitive objects
if (java_lang_Class::is_primitive(mirror())) {
return NULL;
}
Klass* k = java_lang_Class::as_Klass(mirror());
! if (!k->oop_is_instance()) {
! if (!k->is_instance_klass()) {
return NULL;
}
instanceKlassHandle ik_h(THREAD, k);
int encl_method_class_idx = ik_h->enclosing_method_class_index();
if (encl_method_class_idx == 0) {
src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File