/**
  * refresh the specified type's members from the current set of external class descriptions; if
  * you would like to force the type to be refreshed from a newly-built set of external class
  * descriptions, call #refreshExternalClassDescriptions() first; the type's members will be
  * refreshed with the "default" external class description returned by the external class
  * repository; this method is used to finish the "lazy refresh" of a "core" type
  *
  * @see ExternalClassRepository#getExternalClassDescription(String)
  */
 void refreshTypeMembers(MWClass type, MWClassRefreshPolicy refreshPolicy)
     throws ExternalClassNotFoundException {
   ExternalClassDescription exClassDescription =
       this.externalClassDescriptionNamed(type.getName());
   if (exClassDescription == null) {
     throw new ExternalClassNotFoundException(type.getName());
   }
   type.refreshMembers(exClassDescription.getExternalClass(), refreshPolicy);
 }
 /** core types are partially-populated */
 private void buildCoreType(MWClass coreType) {
   try {
     // for now, assume that *any* version of the external class description is OK; so just take
     // the default one
     ExternalClassDescription externalClassDescription =
         this.externalClassDescriptionNamed(coreType.getName());
     ExternalClass externalClass = externalClassDescription.getExternalClass();
     coreType.refreshDeclaration(externalClass);
   } catch (ExternalClassNotFoundException ex) {
     // if we can't load a "core" type, we are in serious trouble...
     throw new RuntimeException(coreType.getName(), ex);
   }
 }
 /**
  * refresh the types corresponding to the specified external class descriptions; notify the
  * specified listener for each corresponding chunk of metadata we can't load
  */
 public void refreshTypesFor(
     Iterator externalClassDescriptions, ExternalClassLoadFailureListener listener) {
   while (externalClassDescriptions.hasNext()) {
     ExternalClassDescription externalClassDescription =
         (ExternalClassDescription) externalClassDescriptions.next();
     try {
       this.refreshTypeFor(externalClassDescription);
     } catch (ExternalClassNotFoundException ex) {
       listener.externalClassLoadFailure(
           new ExternalClassLoadFailureEvent(this, externalClassDescription.getName(), ex));
     }
   }
 }
 void refresh(ExternalClassDescription externalClassDescription) {
   // set the type first, since allowable dimensions is determined by type
   this.setType(this.typeNamed(externalClassDescription.getElementTypeName()));
   this.setDimensionality(externalClassDescription.getArrayDepth());
 }
 boolean hasSameSignatureAs(ExternalClassDescription externalClassDescription) {
   return (this.dimensionality == externalClassDescription.getArrayDepth())
       && (this.getType() == this.typeNamed(externalClassDescription.getElementTypeName()));
 }
 /**
  * refresh the type corresponding to the specified external class description; throw an exception
  * if we can't load the corresponding metadata
  */
 public void refreshTypeFor(ExternalClassDescription externalClassDescription)
     throws ExternalClassNotFoundException {
   this.typeNamedInternal(externalClassDescription.getName())
       .refresh(externalClassDescription.getExternalClass());
 }