Exemplo n.º 1
0
        protected override ParamCodeTypeFactory HandleSignalArgument(IDLInterface idlIntf, IDLSignal idlSignal, IDLSignalArgument idlSignalArg)
        {
            ParamCodeTypeFactory signalArg  = base.HandleSignalArgument(idlIntf, idlSignal, idlSignalArg);
            CodeTypeReference    typerefArg = signalArg.paramtype.CodeType;

            string[] components = CodeBuilderCommon.GetSignalComponents(idlSignalArg.Name);
            string   first      = components[0];

            components    = Array.ConvertAll <string, string>(components, System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase);
            components[0] = first;
            string argFieldName = string.Join("", components);
            CodeFieldReferenceExpression fieldrefArg = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), argFieldName);
            CodeMemberField fieldArg = new CodeMemberField(typerefArg, argFieldName);

            fieldArg.CustomAttributes.Add(CodeBuilderCommon.attribDataMember);
            this.typeSignalArgs.Members.Add(fieldArg);

            CodeMemberProperty propArgField = new CodeMemberProperty();

            propArgField.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            propArgField.Type       = typerefArg;
            propArgField.Name       = argFieldName[0].ToString().ToUpper() + argFieldName.Substring(1);
            propArgField.GetStatements.Add(new CodeMethodReturnStatement(fieldrefArg));
            this.typeSignalArgs.Members.Add(propArgField);

            this.constructorSignalArgs.Parameters.Add(new CodeParameterDeclarationExpression(typerefArg, argFieldName));
            // * this.<signal_arg> = <signal_arg>;
            this.constructorSignalArgs.Statements.Add(new CodeAssignStatement(fieldrefArg, new CodeArgumentReferenceExpression(argFieldName)));
            return(signalArg);
        }