< prev index next >

src/hotspot/share/classfile/classListParser.cpp

Print this page


 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;


< prev index next >