void AddTypeAttributes (CodeTypeDeclaration td, XmlSchemaType type, params XmlSchemaElement [] collectionArgs)
{
var name = type.QualifiedName;
// [GeneratedCode (assembly_name, assembly_version)]
td.CustomAttributes.Add (new CodeAttributeDeclaration (
new CodeTypeReference (typeof (GeneratedCodeAttribute)),
new CodeAttributeArgument (new CodePrimitiveExpression (ass_name)),
new CodeAttributeArgument (new CodePrimitiveExpression (ass_version))));
var ct = type as XmlSchemaComplexType;
// [DataContract(Name="foobar",Namespace="urn:foobar")] (optionally IsReference=true),
// or [CollectionDataContract(ditto, ItemType/KeyType/ValueType)]
var dca = new CodeAttributeDeclaration (
collectionArgs != null && collectionArgs.Length > 0 ? typeref_coll_contract : typeref_data_contract,
new CodeAttributeArgument ("Name", new CodePrimitiveExpression (name.Name)),
new CodeAttributeArgument ("Namespace", new CodePrimitiveExpression (name.Namespace)));
if (collectionArgs != null) {
if (collectionArgs.Length > 0)
dca.Arguments.Add (new CodeAttributeArgument ("ItemName", new CodePrimitiveExpression (CodeIdentifier.MakeValid (collectionArgs [0].QualifiedName.Name))));
if (collectionArgs.Length > 2) {
dca.Arguments.Add (new CodeAttributeArgument ("KeyName", new CodePrimitiveExpression (CodeIdentifier.MakeValid (collectionArgs [1].QualifiedName.Name))));
dca.Arguments.Add (new CodeAttributeArgument ("ValueName", new CodePrimitiveExpression (CodeIdentifier.MakeValid (collectionArgs [2].QualifiedName.Name))));
}
}
if (ct != null && ct.AttributeUses [new XmlQualifiedName ("Ref", KnownTypeCollection.MSSimpleNamespace)] != null)
dca.Arguments.Add (new CodeAttributeArgument ("IsReference", new CodePrimitiveExpression (true)));
td.CustomAttributes.Add (dca);
// optional [Serializable]
if (Options != null && Options.GenerateSerializable)
td.CustomAttributes.Add (new CodeAttributeDeclaration ("System.SerializableAttribute"));
}