src/hotspot/share/prims/jni.cpp
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File
open Cdiff src/hotspot/share/prims/jni.cpp
src/hotspot/share/prims/jni.cpp
Print this page
*** 1316,1333 ****
if (name == NULL || signature == NULL) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
}
// Throw a NoSuchMethodError exception if we have an instance of a
// primitive java.lang.Class
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(clazz))) {
! THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
}
- Klass* klass = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
-
// Make sure class is linked and initialized before handing id's out to
// Method*s.
klass->initialize(CHECK_NULL);
Method* m;
--- 1316,1334 ----
if (name == NULL || signature == NULL) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
}
+ Klass* klass = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
+
// Throw a NoSuchMethodError exception if we have an instance of a
// primitive java.lang.Class
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(clazz))) {
! ResourceMark rm;
! THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), err_msg("%s%s.%s%s", is_static ? "static " : "", klass->signature_name(), name_str, sig));
}
// Make sure class is linked and initialized before handing id's out to
// Method*s.
klass->initialize(CHECK_NULL);
Method* m;
*** 1344,1354 ****
if (m == NULL && klass->is_instance_klass()) {
m = InstanceKlass::cast(klass)->lookup_method_in_ordered_interfaces(name, signature);
}
}
if (m == NULL || (m->is_static() != is_static)) {
! THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
}
return m->jmethod_id();
}
--- 1345,1356 ----
if (m == NULL && klass->is_instance_klass()) {
m = InstanceKlass::cast(klass)->lookup_method_in_ordered_interfaces(name, signature);
}
}
if (m == NULL || (m->is_static() != is_static)) {
! ResourceMark rm;
! THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), err_msg("%s%s.%s%s", is_static ? "static " : "", klass->signature_name(), name_str, sig));
}
return m->jmethod_id();
}
*** 2012,2037 ****
JNIWrapper("GetFieldID");
HOTSPOT_JNI_GETFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig);
jfieldID ret = 0;
DT_RETURN_MARK(GetFieldID, jfieldID, (const jfieldID&)ret);
// The class should have been loaded (we have an instance of the class
// passed in) so the field and signature should already be in the symbol
// table. If they're not there, the field doesn't exist.
TempNewSymbol fieldname = SymbolTable::probe(name, (int)strlen(name));
TempNewSymbol signame = SymbolTable::probe(sig, (int)strlen(sig));
if (fieldname == NULL || signame == NULL) {
! THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
! Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
// Make sure class is initialized before handing id's out to fields
k->initialize(CHECK_NULL);
fieldDescriptor fd;
if (!k->is_instance_klass() ||
!InstanceKlass::cast(k)->find_field(fieldname, signame, false, &fd)) {
! THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
// A jfieldID for a non-static field is simply the offset of the field within the instanceOop
// It may also have hash bits for k, if VerifyJNIFields is turned on.
ret = jfieldIDWorkaround::to_instance_jfieldID(k, fd.offset());
--- 2014,2043 ----
JNIWrapper("GetFieldID");
HOTSPOT_JNI_GETFIELDID_ENTRY(env, clazz, (char *) name, (char *) sig);
jfieldID ret = 0;
DT_RETURN_MARK(GetFieldID, jfieldID, (const jfieldID&)ret);
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
+
// The class should have been loaded (we have an instance of the class
// passed in) so the field and signature should already be in the symbol
// table. If they're not there, the field doesn't exist.
TempNewSymbol fieldname = SymbolTable::probe(name, (int)strlen(name));
TempNewSymbol signame = SymbolTable::probe(sig, (int)strlen(sig));
if (fieldname == NULL || signame == NULL) {
! ResourceMark rm;
! THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), err_msg("%s.%s %s", k->external_name(), name, sig));
}
!
// Make sure class is initialized before handing id's out to fields
k->initialize(CHECK_NULL);
fieldDescriptor fd;
if (!k->is_instance_klass() ||
!InstanceKlass::cast(k)->find_field(fieldname, signame, false, &fd)) {
! ResourceMark rm;
! THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), err_msg("%s.%s %s", k->external_name(), name, sig));
}
// A jfieldID for a non-static field is simply the offset of the field within the instanceOop
// It may also have hash bits for k, if VerifyJNIFields is turned on.
ret = jfieldIDWorkaround::to_instance_jfieldID(k, fd.offset());
src/hotspot/share/prims/jni.cpp
Index
Unified diffs
Context diffs
Sdiffs
Frames
Patch
New
Old
Previous File
Next File