Example #1
0
        public virtual void Generate(IEnumerable <IDLInterface> interfaces, TextWriter writer)
        {
            unit = new CodeCompileUnit();                                                  //Does all the code compilation
            CodeDomProvider      provider   = CodeDomProvider.CreateProvider("CSharp");    //DOM provider for CodeCompileUnit
            CodeGeneratorOptions genOptions = CodeBuilderHelper.getCodeGeneratorOptions(); //Has all our styling options

            this.PreProcess();

            foreach (IDLInterface idlIntf in interfaces)
            {
                //Generate all of the namespace info
                this.ProcessNamespaces(idlIntf);
                //Generate all of the codetype info
                this.DeclareCodeType(idlIntf);
                //Methods
                this.GenerateMethods(idlIntf);
                //Properties
                this.GenerateProperties(idlIntf);
                //Signals
                this.GenerateSignals(idlIntf);
                //All members handled method
                this.PostHandleMembers(idlIntf);
            } // Ends loop over interfaces

            this.PostProcess();

            // Finally do the code generation!
            provider.GenerateCodeFromCompileUnit(unit, writer, genOptions);
        }
Example #2
0
        public override CodeTypeMember HandleProperty(IDLInterface idlIntf, IDLProperty idlProperty)
        {
            CodeMemberProperty property = (CodeMemberProperty)base.HandleProperty(idlIntf, idlProperty);

            if (property.HasGet || property.HasSet)
            {
                // Generate the property out of context.
                CodeDomProvider      provider   = CodeDomProvider.CreateProvider("CSharp");
                CodeGeneratorOptions genOptions = CodeBuilderHelper.getCodeGeneratorOptions();
                StringWriter         temp       = new StringWriter();
                provider.GenerateCodeFromMember(property, temp, genOptions);
                string propertyText = temp.ToString();
                propertyText = propertyText.TrimStart();

                //Get ready to store all the output
                StringBuilder result = new StringBuilder();

                // Figure out how much comments exist before doing the real work
                int posSkipStatements = 0;
                while (posSkipStatements + 1 < propertyText.Length && propertyText[posSkipStatements] == '/' && propertyText[posSkipStatements + 1] == '/')
                {
                    posSkipStatements  = propertyText.IndexOf(temp.NewLine, posSkipStatements);
                    posSkipStatements += temp.NewLine.Length;
                }

                //Insert comments into output
                if (posSkipStatements > 0)
                {
                    result.Append(propertyText.Substring(0, posSkipStatements));
                    propertyText = propertyText.Substring(posSkipStatements);
                }

                //Remove abstract modifiers
                const string abstractName = "abstract ";
                if (propertyText.StartsWith(abstractName))
                {
                    propertyText = propertyText.Substring(abstractName.Length);
                }

                // Hacky rewrite of the getter/setter for CSharp.
                if (property.HasGet)
                {
                    propertyText = AddOperationContractToProperty(propertyText, "get;", temp.NewLine);
                }
                if (property.HasSet)
                {
                    propertyText = AddOperationContractToProperty(propertyText, "set;", temp.NewLine);
                }

                // Add the altered text.
                result.Append(propertyText);

                // Mess around with padding.
                string resultText = result.ToString();
                resultText = resultText.Replace(temp.NewLine, temp.NewLine + "        ");
                resultText = "        " + resultText;

                // Add the snippet.
                CodeSnippetTypeMember snipProperty = new CodeSnippetTypeMember(resultText);
                snipProperty.Name = property.Name;
                return(snipProperty);
            }
            else
            {
                return(property);
            }
        }