src/share/vm/prims/jvm.cpp

changeset 3095
19241ae0d839
parent 2658
c7f3d0b4570f
child 3137
e6b1331a51d2
     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())

mercurial