public new MetadataClassDescriptor BindMetadataClassDescriptor(SimplTypesScope metadataTScope) { if (metadataClassDescriptor != null) { return(metadataClassDescriptor); } // create a temporary local metadata translation scope SimplTypesScope localMetadataTScope = SimplTypesScope.Get("mmd_local_tscope:" + Name, metadataTScope); // record the initial number of classes in the local translation scope int initialLocalTScopeSize = localMetadataTScope.EntriesByClassName.Count; // do actual stuff ... base.BindMetadataClassDescriptor(localMetadataTScope); // if tag overlaps, or there are fields using classes not in metadataTScope, use localTScope MetadataClassDescriptor thisCd = this.MetadataClassDescriptor; if (thisCd != null) { MetadataClassDescriptor thatCd = (MetadataClassDescriptor)metadataTScope.GetClassDescriptorByTag(thisCd.TagName); if (thisCd != thatCd) { localMetadataTScope.AddTranslation(thisCd); this.localMetadataTranslationScope = localMetadataTScope; } else if (localMetadataTScope.EntriesByClassName.Count > initialLocalTScopeSize) { this.localMetadataTranslationScope = localMetadataTScope; } else { this.localMetadataTranslationScope = metadataTScope; } } // return the bound metadata class descriptor return(thisCd); }