static private CloneParticle ( XmlSchemaParticle particle ) : XmlSchemaParticle | ||
particle | XmlSchemaParticle | |
return | XmlSchemaParticle |
internal static XmlSchemaParticle CloneParticle(XmlSchemaParticle particle) {
XmlSchemaGroupBase groupBase = particle as XmlSchemaGroupBase;
if (groupBase != null && ! (groupBase is XmlSchemaAll)) { //Choice or sequence
XmlSchemaGroupBase newGroupBase = groupBase;
XmlSchemaObjectCollection newGroupbaseParticles = CloneGroupBaseParticles(groupBase.Items);
newGroupBase = (XmlSchemaGroupBase)groupBase.Clone();
newGroupBase.SetItems(newGroupbaseParticles);
return newGroupBase;
}
else if (particle is XmlSchemaGroupRef) { // group ref
XmlSchemaGroupRef newGroupRef = (XmlSchemaGroupRef)particle.Clone();
newGroupRef.RefName = newGroupRef.RefName.Clone();
return newGroupRef;
}
else {
XmlSchemaElement oldElem = particle as XmlSchemaElement;
if (oldElem != null && (!oldElem.RefName.IsEmpty || !oldElem.SchemaTypeName.IsEmpty)) { //Its element ref or type name is present
XmlSchemaElement newElem = (XmlSchemaElement)oldElem.Clone();
return newElem;
}
}
return particle;
}
internal XmlSchemaObject Clone(XmlSchema parentSchema) { XmlSchemaGroup newGroup = (XmlSchemaGroup)MemberwiseClone(); if (XmlSchemaComplexType.HasParticleRef(_particle, parentSchema)) { newGroup._particle = XmlSchemaComplexType.CloneParticle(_particle, parentSchema) as XmlSchemaGroupBase; } newGroup._canonicalParticle = XmlSchemaParticle.Empty; return(newGroup); }