1.1 --- a/src/share/vm/prims/jvm.cpp Mon Aug 29 05:07:35 2011 -0700 1.2 +++ b/src/share/vm/prims/jvm.cpp Tue Aug 30 00:54:09 2011 -0700 1.3 @@ -4020,249 +4020,6 @@ 1.4 #endif 1.5 1.6 1.7 -//--------------------------------------------------------------------------- 1.8 -// 1.9 -// Support for old native code-based reflection (pre-JDK 1.4) 1.10 -// Disabled by default in the product build. 1.11 -// 1.12 -// See reflection.hpp for information on SUPPORT_OLD_REFLECTION 1.13 -// 1.14 -//--------------------------------------------------------------------------- 1.15 - 1.16 -#ifdef SUPPORT_OLD_REFLECTION 1.17 - 1.18 -JVM_ENTRY(jobjectArray, JVM_GetClassFields(JNIEnv *env, jclass cls, jint which)) 1.19 - JVMWrapper("JVM_GetClassFields"); 1.20 - JvmtiVMObjectAllocEventCollector oam; 1.21 - oop mirror = JNIHandles::resolve_non_null(cls); 1.22 - objArrayOop result = Reflection::reflect_fields(mirror, which, CHECK_NULL); 1.23 - return (jobjectArray) JNIHandles::make_local(env, result); 1.24 -JVM_END 1.25 - 1.26 - 1.27 -JVM_ENTRY(jobjectArray, JVM_GetClassMethods(JNIEnv *env, jclass cls, jint which)) 1.28 - JVMWrapper("JVM_GetClassMethods"); 1.29 - JvmtiVMObjectAllocEventCollector oam; 1.30 - oop mirror = JNIHandles::resolve_non_null(cls); 1.31 - objArrayOop result = Reflection::reflect_methods(mirror, which, CHECK_NULL); 1.32 - //%note jvm_r4 1.33 - return (jobjectArray) JNIHandles::make_local(env, result); 1.34 -JVM_END 1.35 - 1.36 - 1.37 -JVM_ENTRY(jobjectArray, JVM_GetClassConstructors(JNIEnv *env, jclass cls, jint which)) 1.38 - JVMWrapper("JVM_GetClassConstructors"); 1.39 - JvmtiVMObjectAllocEventCollector oam; 1.40 - oop mirror = JNIHandles::resolve_non_null(cls); 1.41 - objArrayOop result = Reflection::reflect_constructors(mirror, which, CHECK_NULL); 1.42 - //%note jvm_r4 1.43 - return (jobjectArray) JNIHandles::make_local(env, result); 1.44 -JVM_END 1.45 - 1.46 - 1.47 -JVM_ENTRY(jobject, JVM_GetClassField(JNIEnv *env, jclass cls, jstring name, jint which)) 1.48 - JVMWrapper("JVM_GetClassField"); 1.49 - JvmtiVMObjectAllocEventCollector oam; 1.50 - if (name == NULL) return NULL; 1.51 - Handle str (THREAD, JNIHandles::resolve_non_null(name)); 1.52 - 1.53 - const char* cstr = java_lang_String::as_utf8_string(str()); 1.54 - TempNewSymbol field_name = SymbolTable::probe(cstr, (int)strlen(cstr)); 1.55 - if (field_name == NULL) { 1.56 - THROW_0(vmSymbols::java_lang_NoSuchFieldException()); 1.57 - } 1.58 - 1.59 - oop mirror = JNIHandles::resolve_non_null(cls); 1.60 - oop result = Reflection::reflect_field(mirror, field_name, which, CHECK_NULL); 1.61 - if (result == NULL) { 1.62 - THROW_0(vmSymbols::java_lang_NoSuchFieldException()); 1.63 - } 1.64 - return JNIHandles::make_local(env, result); 1.65 -JVM_END 1.66 - 1.67 - 1.68 -JVM_ENTRY(jobject, JVM_GetClassMethod(JNIEnv *env, jclass cls, jstring name, jobjectArray types, jint which)) 1.69 - JVMWrapper("JVM_GetClassMethod"); 1.70 - JvmtiVMObjectAllocEventCollector oam; 1.71 - if (name == NULL) { 1.72 - THROW_0(vmSymbols::java_lang_NullPointerException()); 1.73 - } 1.74 - Handle str (THREAD, JNIHandles::resolve_non_null(name)); 1.75 - 1.76 - const char* cstr = java_lang_String::as_utf8_string(str()); 1.77 - TempNewSymbol method_name = SymbolTable::probe(cstr, (int)strlen(cstr)); 1.78 - if (method_name == NULL) { 1.79 - THROW_0(vmSymbols::java_lang_NoSuchMethodException()); 1.80 - } 1.81 - 1.82 - oop mirror = JNIHandles::resolve_non_null(cls); 1.83 - objArrayHandle tarray (THREAD, objArrayOop(JNIHandles::resolve(types))); 1.84 - oop result = Reflection::reflect_method(mirror, method_name, tarray, 1.85 - which, CHECK_NULL); 1.86 - if (result == NULL) { 1.87 - THROW_0(vmSymbols::java_lang_NoSuchMethodException()); 1.88 - } 1.89 - return JNIHandles::make_local(env, result); 1.90 -JVM_END 1.91 - 1.92 - 1.93 -JVM_ENTRY(jobject, JVM_GetClassConstructor(JNIEnv *env, jclass cls, jobjectArray types, jint which)) 1.94 - JVMWrapper("JVM_GetClassConstructor"); 1.95 - JvmtiVMObjectAllocEventCollector oam; 1.96 - oop mirror = JNIHandles::resolve_non_null(cls); 1.97 - objArrayHandle tarray (THREAD, objArrayOop(JNIHandles::resolve(types))); 1.98 - oop result = Reflection::reflect_constructor(mirror, tarray, which, CHECK_NULL); 1.99 - if (result == NULL) { 1.100 - THROW_0(vmSymbols::java_lang_NoSuchMethodException()); 1.101 - } 1.102 - return (jobject) JNIHandles::make_local(env, result); 1.103 -JVM_END 1.104 - 1.105 - 1.106 -// Instantiation /////////////////////////////////////////////////////////////////////////////// 1.107 - 1.108 -JVM_ENTRY(jobject, JVM_NewInstance(JNIEnv *env, jclass cls)) 1.109 - JVMWrapper("JVM_NewInstance"); 1.110 - Handle mirror(THREAD, JNIHandles::resolve_non_null(cls)); 1.111 - 1.112 - methodOop resolved_constructor = java_lang_Class::resolved_constructor(mirror()); 1.113 - if (resolved_constructor == NULL) { 1.114 - klassOop k = java_lang_Class::as_klassOop(mirror()); 1.115 - // The java.lang.Class object caches a resolved constructor if all the checks 1.116 - // below were done successfully and a constructor was found. 1.117 - 1.118 - // Do class based checks 1.119 - if (java_lang_Class::is_primitive(mirror())) { 1.120 - const char* msg = ""; 1.121 - if (mirror == Universe::bool_mirror()) msg = "java/lang/Boolean"; 1.122 - else if (mirror == Universe::char_mirror()) msg = "java/lang/Character"; 1.123 - else if (mirror == Universe::float_mirror()) msg = "java/lang/Float"; 1.124 - else if (mirror == Universe::double_mirror()) msg = "java/lang/Double"; 1.125 - else if (mirror == Universe::byte_mirror()) msg = "java/lang/Byte"; 1.126 - else if (mirror == Universe::short_mirror()) msg = "java/lang/Short"; 1.127 - else if (mirror == Universe::int_mirror()) msg = "java/lang/Integer"; 1.128 - else if (mirror == Universe::long_mirror()) msg = "java/lang/Long"; 1.129 - THROW_MSG_0(vmSymbols::java_lang_NullPointerException(), msg); 1.130 - } 1.131 - 1.132 - // Check whether we are allowed to instantiate this class 1.133 - Klass::cast(k)->check_valid_for_instantiation(false, CHECK_NULL); // Array classes get caught here 1.134 - instanceKlassHandle klass(THREAD, k); 1.135 - // Make sure class is initialized (also so all methods are rewritten) 1.136 - klass->initialize(CHECK_NULL); 1.137 - 1.138 - // Lookup default constructor 1.139 - resolved_constructor = klass->find_method(vmSymbols::object_initializer_name(), vmSymbols::void_method_signature()); 1.140 - if (resolved_constructor == NULL) { 1.141 - ResourceMark rm(THREAD); 1.142 - THROW_MSG_0(vmSymbols::java_lang_InstantiationException(), klass->external_name()); 1.143 - } 1.144 - 1.145 - // Cache result in java.lang.Class object. Does not have to be MT safe. 1.146 - java_lang_Class::set_resolved_constructor(mirror(), resolved_constructor); 1.147 - } 1.148 - 1.149 - assert(resolved_constructor != NULL, "sanity check"); 1.150 - methodHandle constructor = methodHandle(THREAD, resolved_constructor); 1.151 - 1.152 - // We have an initialized instanceKlass with a default constructor 1.153 - instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls))); 1.154 - assert(klass->is_initialized() || klass->is_being_initialized(), "sanity check"); 1.155 - 1.156 - // Do security check 1.157 - klassOop caller_klass = NULL; 1.158 - if (UsePrivilegedStack) { 1.159 - caller_klass = thread->security_get_caller_class(2); 1.160 - 1.161 - if (!Reflection::verify_class_access(caller_klass, klass(), false) || 1.162 - !Reflection::verify_field_access(caller_klass, 1.163 - klass(), 1.164 - klass(), 1.165 - constructor->access_flags(), 1.166 - false, 1.167 - true)) { 1.168 - ResourceMark rm(THREAD); 1.169 - THROW_MSG_0(vmSymbols::java_lang_IllegalAccessException(), klass->external_name()); 1.170 - } 1.171 - } 1.172 - 1.173 - // Allocate object and call constructor 1.174 - Handle receiver = klass->allocate_instance_handle(CHECK_NULL); 1.175 - JavaCalls::call_default_constructor(thread, constructor, receiver, CHECK_NULL); 1.176 - 1.177 - jobject res = JNIHandles::make_local(env, receiver()); 1.178 - if (JvmtiExport::should_post_vm_object_alloc()) { 1.179 - JvmtiExport::post_vm_object_alloc(JavaThread::current(), receiver()); 1.180 - } 1.181 - return res; 1.182 -JVM_END 1.183 - 1.184 - 1.185 -// Field //////////////////////////////////////////////////////////////////////////////////////////// 1.186 - 1.187 -JVM_ENTRY(jobject, JVM_GetField(JNIEnv *env, jobject field, jobject obj)) 1.188 - JVMWrapper("JVM_GetField"); 1.189 - JvmtiVMObjectAllocEventCollector oam; 1.190 - Handle field_mirror(thread, JNIHandles::resolve(field)); 1.191 - Handle receiver (thread, JNIHandles::resolve(obj)); 1.192 - fieldDescriptor fd; 1.193 - Reflection::resolve_field(field_mirror, receiver, &fd, false, CHECK_NULL); 1.194 - jvalue value; 1.195 - BasicType type = Reflection::field_get(&value, &fd, receiver); 1.196 - oop box = Reflection::box(&value, type, CHECK_NULL); 1.197 - return JNIHandles::make_local(env, box); 1.198 -JVM_END 1.199 - 1.200 - 1.201 -JVM_ENTRY(jvalue, JVM_GetPrimitiveField(JNIEnv *env, jobject field, jobject obj, unsigned char wCode)) 1.202 - JVMWrapper("JVM_GetPrimitiveField"); 1.203 - Handle field_mirror(thread, JNIHandles::resolve(field)); 1.204 - Handle receiver (thread, JNIHandles::resolve(obj)); 1.205 - fieldDescriptor fd; 1.206 - jvalue value; 1.207 - value.j = 0; 1.208 - Reflection::resolve_field(field_mirror, receiver, &fd, false, CHECK_(value)); 1.209 - BasicType type = Reflection::field_get(&value, &fd, receiver); 1.210 - BasicType wide_type = (BasicType) wCode; 1.211 - if (type != wide_type) { 1.212 - Reflection::widen(&value, type, wide_type, CHECK_(value)); 1.213 - } 1.214 - return value; 1.215 -JVM_END // should really be JVM_END, but that doesn't work for union types! 1.216 - 1.217 - 1.218 -JVM_ENTRY(void, JVM_SetField(JNIEnv *env, jobject field, jobject obj, jobject val)) 1.219 - JVMWrapper("JVM_SetField"); 1.220 - Handle field_mirror(thread, JNIHandles::resolve(field)); 1.221 - Handle receiver (thread, JNIHandles::resolve(obj)); 1.222 - oop box = JNIHandles::resolve(val); 1.223 - fieldDescriptor fd; 1.224 - Reflection::resolve_field(field_mirror, receiver, &fd, true, CHECK); 1.225 - BasicType field_type = fd.field_type(); 1.226 - jvalue value; 1.227 - BasicType value_type; 1.228 - if (field_type == T_OBJECT || field_type == T_ARRAY) { 1.229 - // Make sure we do no unbox e.g. java/lang/Integer instances when storing into an object array 1.230 - value_type = Reflection::unbox_for_regular_object(box, &value); 1.231 - Reflection::field_set(&value, &fd, receiver, field_type, CHECK); 1.232 - } else { 1.233 - value_type = Reflection::unbox_for_primitive(box, &value, CHECK); 1.234 - Reflection::field_set(&value, &fd, receiver, value_type, CHECK); 1.235 - } 1.236 -JVM_END 1.237 - 1.238 - 1.239 -JVM_ENTRY(void, JVM_SetPrimitiveField(JNIEnv *env, jobject field, jobject obj, jvalue v, unsigned char vCode)) 1.240 - JVMWrapper("JVM_SetPrimitiveField"); 1.241 - Handle field_mirror(thread, JNIHandles::resolve(field)); 1.242 - Handle receiver (thread, JNIHandles::resolve(obj)); 1.243 - fieldDescriptor fd; 1.244 - Reflection::resolve_field(field_mirror, receiver, &fd, true, CHECK); 1.245 - BasicType value_type = (BasicType) vCode; 1.246 - Reflection::field_set(&v, &fd, receiver, value_type, CHECK); 1.247 -JVM_END 1.248 - 1.249 - 1.250 // Method /////////////////////////////////////////////////////////////////////////////////////////// 1.251 1.252 JVM_ENTRY(jobject, JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jobjectArray args0)) 1.253 @@ -4302,8 +4059,6 @@ 1.254 return res; 1.255 JVM_END 1.256 1.257 -#endif /* SUPPORT_OLD_REFLECTION */ 1.258 - 1.259 // Atomic /////////////////////////////////////////////////////////////////////////////////////////// 1.260 1.261 JVM_LEAF(jboolean, JVM_SupportsCX8())