118 119 // return true if class_name contains no '.' (internal format is '/') 120 bool SystemDictionary::is_internal_format(Symbol* class_name) { 121 if (class_name != NULL) { 122 ResourceMark rm; 123 char* name = class_name->as_C_string(); 124 return strchr(name, '.') == NULL; 125 } else { 126 return true; 127 } 128 } 129 130 #endif 131 132 // ---------------------------------------------------------------------------- 133 // Parallel class loading check 134 135 bool SystemDictionary::is_parallelCapable(Handle class_loader) { 136 if (UnsyncloadClass || class_loader.is_null()) return true; 137 if (AlwaysLockClassLoader) return false; 138 return java_lang_ClassLoader::parallelCapable(class_loader()); 139 } 140 // ---------------------------------------------------------------------------- 141 // ParallelDefineClass flag does not apply to bootclass loader 142 bool SystemDictionary::is_parallelDefine(Handle class_loader) { 143 if (class_loader.is_null()) return false; 144 if (AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) { 145 return true; 146 } 147 return false; 148 } 149 // ---------------------------------------------------------------------------- 150 // Resolving of classes 151 152 // Forwards to resolve_or_null 153 154 Klass* SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) { 155 Klass* klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD); 156 if (HAS_PENDING_EXCEPTION || klass == NULL) { 157 KlassHandle k_h(THREAD, klass); 158 // can return a null klass 159 klass = handle_resolution_exception(class_name, class_loader, protection_domain, throw_error, k_h, THREAD); 160 } 161 return klass; 162 } 163 164 Klass* SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) { | 118 119 // return true if class_name contains no '.' (internal format is '/') 120 bool SystemDictionary::is_internal_format(Symbol* class_name) { 121 if (class_name != NULL) { 122 ResourceMark rm; 123 char* name = class_name->as_C_string(); 124 return strchr(name, '.') == NULL; 125 } else { 126 return true; 127 } 128 } 129 130 #endif 131 132 // ---------------------------------------------------------------------------- 133 // Parallel class loading check 134 135 bool SystemDictionary::is_parallelCapable(Handle class_loader) { 136 if (UnsyncloadClass || class_loader.is_null()) return true; 137 if (AlwaysLockClassLoader) return false; 138 // fullyConcurrent subsumes the parallelCapable test but 139 // maybe this should be inside java_lang_ClassLoader::parallelCapable? 140 return java_lang_ClassLoader::fullyConcurrent(class_loader()) || 141 java_lang_ClassLoader::parallelCapable(class_loader()); 142 } 143 // ---------------------------------------------------------------------------- 144 // ParallelDefineClass flag does not apply to bootclass loader 145 bool SystemDictionary::is_parallelDefine(Handle class_loader) { 146 if (class_loader.is_null()) return false; 147 if (java_lang_ClassLoader::fullyConcurrent(class_loader()) || 148 AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) { 149 if (TraceClassLoading) 150 tty->print_cr("Parallel define permitted for loader: %p", class_loader()); 151 return true; 152 } 153 return false; 154 } 155 // ---------------------------------------------------------------------------- 156 // Resolving of classes 157 158 // Forwards to resolve_or_null 159 160 Klass* SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) { 161 Klass* klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD); 162 if (HAS_PENDING_EXCEPTION || klass == NULL) { 163 KlassHandle k_h(THREAD, klass); 164 // can return a null klass 165 klass = handle_resolution_exception(class_name, class_loader, protection_domain, throw_error, k_h, THREAD); 166 } 167 return klass; 168 } 169 170 Klass* SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) { |