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); }
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); } }