hotspot/src/share/vm/prims/jvm.cpp
changeset 1420 d116726a4ca4
parent 1388 3677f5f3d66b
child 1550 be2fc37a817f
equal deleted inserted replaced
1419:561c0debbf22 1420:d116726a4ca4
   626 JVM_ENTRY(void, JVM_ResolveClass(JNIEnv* env, jclass cls))
   626 JVM_ENTRY(void, JVM_ResolveClass(JNIEnv* env, jclass cls))
   627   JVMWrapper("JVM_ResolveClass");
   627   JVMWrapper("JVM_ResolveClass");
   628   if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
   628   if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
   629 JVM_END
   629 JVM_END
   630 
   630 
       
   631 // Common implementation for JVM_FindClassFromBootLoader and
       
   632 // JVM_FindClassFromLoader
       
   633 static jclass jvm_find_class_from_class_loader(JNIEnv* env, const char* name,
       
   634                                   jboolean init, jobject loader,
       
   635                                   jboolean throwError, TRAPS) {
       
   636   // Java libraries should ensure that name is never null...
       
   637   if (name == NULL || (int)strlen(name) > symbolOopDesc::max_length()) {
       
   638     // It's impossible to create this class;  the name cannot fit
       
   639     // into the constant pool.
       
   640     if (throwError) {
       
   641       THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name);
       
   642     } else {
       
   643       THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name);
       
   644     }
       
   645   }
       
   646   symbolHandle h_name = oopFactory::new_symbol_handle(name, CHECK_NULL);
       
   647   Handle h_loader(THREAD, JNIHandles::resolve(loader));
       
   648   jclass result = find_class_from_class_loader(env, h_name, init, h_loader,
       
   649                                                Handle(), throwError, THREAD);
       
   650 
       
   651   if (TraceClassResolution && result != NULL) {
       
   652     trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result)));
       
   653   }
       
   654   return result;
       
   655 }
       
   656 
   631 // Rationale behind JVM_FindClassFromBootLoader
   657 // Rationale behind JVM_FindClassFromBootLoader
   632 // a> JVM_FindClassFromClassLoader was never exported in the export tables.
   658 // a> JVM_FindClassFromClassLoader was never exported in the export tables.
   633 // b> because of (a) java.dll has a direct dependecy on the  unexported
   659 // b> because of (a) java.dll has a direct dependecy on the  unexported
   634 //    private symbol "_JVM_FindClassFromClassLoader@20".
   660 //    private symbol "_JVM_FindClassFromClassLoader@20".
   635 // c> the launcher cannot use the private symbol as it dynamically opens
   661 // c> the launcher cannot use the private symbol as it dynamically opens
   647 JVM_ENTRY(jclass, JVM_FindClassFromBootLoader(JNIEnv* env,
   673 JVM_ENTRY(jclass, JVM_FindClassFromBootLoader(JNIEnv* env,
   648                                               const char* name,
   674                                               const char* name,
   649                                               jboolean throwError))
   675                                               jboolean throwError))
   650   JVMWrapper3("JVM_FindClassFromBootLoader %s throw %s", name,
   676   JVMWrapper3("JVM_FindClassFromBootLoader %s throw %s", name,
   651               throwError ? "error" : "exception");
   677               throwError ? "error" : "exception");
   652   return JVM_FindClassFromClassLoader(env, name, JNI_FALSE,
   678   return jvm_find_class_from_class_loader(env, name, JNI_FALSE,
   653                                       (jobject)NULL, throwError);
   679                                           (jobject)NULL, throwError, THREAD);
   654 JVM_END
   680 JVM_END
   655 
   681 
   656 JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
   682 JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
   657                                                jboolean init, jobject loader,
   683                                                jboolean init, jobject loader,
   658                                                jboolean throwError))
   684                                                jboolean throwError))
   659   JVMWrapper3("JVM_FindClassFromClassLoader %s throw %s", name,
   685   JVMWrapper3("JVM_FindClassFromClassLoader %s throw %s", name,
   660                throwError ? "error" : "exception");
   686                throwError ? "error" : "exception");
   661   // Java libraries should ensure that name is never null...
   687   return jvm_find_class_from_class_loader(env, name, init, loader,
   662   if (name == NULL || (int)strlen(name) > symbolOopDesc::max_length()) {
   688                                           throwError, THREAD);
   663     // It's impossible to create this class;  the name cannot fit
       
   664     // into the constant pool.
       
   665     if (throwError) {
       
   666       THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), name);
       
   667     } else {
       
   668       THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name);
       
   669     }
       
   670   }
       
   671   symbolHandle h_name = oopFactory::new_symbol_handle(name, CHECK_NULL);
       
   672   Handle h_loader(THREAD, JNIHandles::resolve(loader));
       
   673   jclass result = find_class_from_class_loader(env, h_name, init, h_loader,
       
   674                                                Handle(), throwError, thread);
       
   675 
       
   676   if (TraceClassResolution && result != NULL) {
       
   677     trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result)));
       
   678   }
       
   679 
       
   680   return result;
       
   681 JVM_END
   689 JVM_END
   682 
   690 
   683 
   691 
   684 JVM_ENTRY(jclass, JVM_FindClassFromClass(JNIEnv *env, const char *name,
   692 JVM_ENTRY(jclass, JVM_FindClassFromClass(JNIEnv *env, const char *name,
   685                                          jboolean init, jclass from))
   693                                          jboolean init, jclass from))