void EmitParameter(CodeTypeDeclaration ctd, string name) { StructureParameterKind type = sparams[name]; CodeTypeReference fieldtype = null; string field = null; switch (type) { case StructureParameterKind.Basis: fieldtype = CDH.String; field = "Basis"; break; case StructureParameterKind.Target: fieldtype = CDH.String; field = "Target"; break; case StructureParameterKind.Structure: fieldtype = structtypes[name].AsCodeDom; field = "Structure"; break; } CodeExpression val = new CodeFieldReferenceExpression (SPKind, field); CodeAttributeDeclaration attr = new CodeAttributeDeclaration ("Mono.Build.Bundling.StructureParameterAttribute"); attr.Arguments.Add (new CodeAttributeArgument (val)); CodeMemberField f = new CodeMemberField (fieldtype, name); f.Attributes = MemberAttributes.Public; f.CustomAttributes.Add (attr); ctd.Members.Add (f); }
void EmitApplyDefaults(CodeTypeDeclaration ctd) { CodeMemberMethod meth = new CodeMemberMethod (); meth.Name = "ApplyDefaults"; meth.Attributes = MemberAttributes.Public | MemberAttributes.Override; meth.ReturnType = CDH.Bool; meth.Parameters.Add (CDH.Param (BMBase, "bmb")); meth.Parameters.Add (CDH.Param (CDH.ILog, "log")); CodeArgumentReferenceExpression bmb = CDH.ARef ("bmb"); CodeArgumentReferenceExpression log = CDH.ARef ("log"); // Set the parameters foreach (string param in sparams.Keys) { StructureParameterKind kind = sparams[param]; string val = defaults[param]; CodeAssignStatement assg = new CodeAssignStatement (); assg.Left = CDH.ThisDot (param); switch (kind) { case StructureParameterKind.Basis: if (val[val.Length - 1] != '/') // Canonicalize basis names. val += '/'; goto case StructureParameterKind.Target; case StructureParameterKind.Target: assg.Right = new CodePrimitiveExpression (val); break; case StructureParameterKind.Structure: CodeMethodInvokeExpression mie = new CodeMethodInvokeExpression (); mie.Method = new CodeMethodReferenceExpression (bmb, "GetNamespaceTemplate"); mie.Parameters.Add (new CodePrimitiveExpression (val)); mie.Parameters.Add (log); UserType stype = structtypes[param]; assg.Right = new CodeCastExpression (stype.AsCodeDom, mie); break; } meth.Statements.Add (assg); if (kind == StructureParameterKind.Structure) meth.Statements.Add (CDH.IfNullReturnTrue (assg.Left)); } // All done. meth.Statements.Add (new CodeMethodReturnStatement (CDH.False)); ctd.Members.Add (meth); }
public StructureParameterAttribute(StructureParameterKind kind) { this.kind = kind; }
public StructureParameterAttribute (StructureParameterKind kind) { this.kind = kind; }