private XmlSchema GetChameleonSchema(string targetNamespace, XmlSchema schema) { ChameleonKey key = new ChameleonKey(targetNamespace, schema); XmlSchema schema2 = (XmlSchema) this.chameleonSchemas[key]; if (schema2 == null) { schema2 = schema.DeepClone(); schema2.IsChameleon = true; schema2.TargetNamespace = targetNamespace; this.chameleonSchemas.Add(key, schema2); schema2.SourceUri = schema.SourceUri; schema.IsProcessing = false; } return schema2; }
private XmlSchema GetChameleonSchema(string targetNamespace, XmlSchema schema) { ChameleonKey cKey = new ChameleonKey(targetNamespace, schema); XmlSchema chameleonSchema = (XmlSchema)chameleonSchemas[cKey]; //Need not clone if a schema for that namespace already exists if (chameleonSchema == null) { chameleonSchema = schema.DeepClone(); //It is ok that we dont lock the clone since no one else has access to it yet chameleonSchema.IsChameleon = true; chameleonSchema.TargetNamespace = targetNamespace; chameleonSchemas.Add(cKey, chameleonSchema); chameleonSchema.SourceUri = schema.SourceUri; //Handle the original schema that was added to lockList before cloning occurred schema.IsProcessing = false; //Since we cloned it for the chameleon } return chameleonSchema; }