Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public StructureParameterAttribute(StructureParameterKind kind)
 {
     this.kind = kind;
 }
Ejemplo n.º 4
0
	public StructureParameterAttribute (StructureParameterKind kind) 
	{
	    this.kind = kind;
	}