/** * 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()); }