372 Klass* k = SystemDictionary::resolve_or_null(class_name_symbol, CHECK_NULL); 373 if (k != NULL) { 374 klass = k; 375 } else { 376 if (!HAS_PENDING_EXCEPTION) { 377 THROW_NULL(vmSymbols::java_lang_ClassNotFoundException()); 378 } 379 } 380 } 381 } 382 } else { 383 // If "source:" tag is specified, all super class and super interfaces must be specified in the 384 // class list file. 385 klass = load_class_from_source(class_name_symbol, CHECK_NULL); 386 } 387 388 if (klass != NULL && klass->is_instance_klass() && is_id_specified()) { 389 InstanceKlass* ik = InstanceKlass::cast(klass); 390 int id = this->id(); 391 SystemDictionaryShared::update_shared_entry(ik, id); 392 InstanceKlass* old = table()->lookup(id); 393 if (old != NULL && old != ik) { 394 error("Duplicated ID %d for class %s", id, _class_name); 395 } 396 table()->add(id, ik); 397 } 398 399 return klass; 400 } 401 402 bool ClassListParser::is_loading_from_source() { 403 return (_source != NULL); 404 } 405 406 InstanceKlass* ClassListParser::lookup_class_by_id(int id) { 407 InstanceKlass* klass = table()->lookup(id); 408 if (klass == NULL) { 409 error("Class ID %d has not been defined", id); 410 } 411 return klass; 412 } 413 414 415 InstanceKlass* ClassListParser::lookup_super_for_current_class(Symbol* super_name) { 416 if (!is_loading_from_source()) { 417 return NULL; 418 } 419 420 InstanceKlass* k = lookup_class_by_id(super()); 421 if (super_name != k->name()) { 422 error("The specified super class %s (id %d) does not match actual super class %s", 423 k->name()->as_klass_external_name(), super(), 424 super_name->as_klass_external_name()); 425 } 426 return k; 427 } 428 429 InstanceKlass* ClassListParser::lookup_interface_for_current_class(Symbol* interface_name) { 430 if (!is_loading_from_source()) { 431 return NULL; | 372 Klass* k = SystemDictionary::resolve_or_null(class_name_symbol, CHECK_NULL); 373 if (k != NULL) { 374 klass = k; 375 } else { 376 if (!HAS_PENDING_EXCEPTION) { 377 THROW_NULL(vmSymbols::java_lang_ClassNotFoundException()); 378 } 379 } 380 } 381 } 382 } else { 383 // If "source:" tag is specified, all super class and super interfaces must be specified in the 384 // class list file. 385 klass = load_class_from_source(class_name_symbol, CHECK_NULL); 386 } 387 388 if (klass != NULL && klass->is_instance_klass() && is_id_specified()) { 389 InstanceKlass* ik = InstanceKlass::cast(klass); 390 int id = this->id(); 391 SystemDictionaryShared::update_shared_entry(ik, id); 392 InstanceKlass** old_ptr = table()->lookup(id); 393 if (old_ptr != NULL) { 394 error("Duplicated ID %d for class %s", id, _class_name); 395 } 396 table()->add(id, ik); 397 } 398 399 return klass; 400 } 401 402 bool ClassListParser::is_loading_from_source() { 403 return (_source != NULL); 404 } 405 406 InstanceKlass* ClassListParser::lookup_class_by_id(int id) { 407 InstanceKlass** klass_ptr = table()->lookup(id); 408 if (klass_ptr == NULL) { 409 error("Class ID %d has not been defined", id); 410 } 411 assert(*klass_ptr != NULL, "must be"); 412 return *klass_ptr; 413 } 414 415 416 InstanceKlass* ClassListParser::lookup_super_for_current_class(Symbol* super_name) { 417 if (!is_loading_from_source()) { 418 return NULL; 419 } 420 421 InstanceKlass* k = lookup_class_by_id(super()); 422 if (super_name != k->name()) { 423 error("The specified super class %s (id %d) does not match actual super class %s", 424 k->name()->as_klass_external_name(), super(), 425 super_name->as_klass_external_name()); 426 } 427 return k; 428 } 429 430 InstanceKlass* ClassListParser::lookup_interface_for_current_class(Symbol* interface_name) { 431 if (!is_loading_from_source()) { 432 return NULL; |