public void GenerateCodeFromType(CodeTypeDeclaration e, System.IO.TextWriter w, CodeGeneratorOptions o) { using (InternalCodeGenerator gen = new InternalCodeGenerator(w)) gen.Generate(e); }
public void GenerateCodeFromStatement(CodeStatement e, System.IO.TextWriter w, CodeGeneratorOptions o) { using (InternalCodeGenerator gen = new InternalCodeGenerator(w)) gen.Generate(e); }
public void GenerateCodeFromExpression(CodeExpression e, System.IO.TextWriter w, CodeGeneratorOptions o) { using (InternalCodeGenerator gen = new InternalCodeGenerator(w)) gen.Generate(e); }
public void GenerateCodeFromNamespace(CodeNamespace e, System.IO.TextWriter w, CodeGeneratorOptions o) { using (InternalCodeGenerator gen = new InternalCodeGenerator(w)) gen.Generate(e); }
public void GenerateCodeFromCompileUnit(CodeCompileUnit e, System.IO.TextWriter w, CodeGeneratorOptions o) { string text = (string) e.UserData["text"]; CodeTypeDeclaration FormClass = e.Namespaces[0].Types[0]; Dictionary<string, YYLTYPE> fields = (Dictionary<string, YYLTYPE>)FormClass.UserData["fields"]; Dictionary<string, YYLTYPE> methods = (Dictionary<string, YYLTYPE>)FormClass.UserData["methods"]; List<CodeMemberField> renamed_fields = new List<CodeMemberField>(); List<CodeMemberField> new_fields = new List<CodeMemberField>(); List<CodeMemberMethod> renamed_methods = new List<CodeMemberMethod>(); List<CodeMemberMethod> new_methods = new List<CodeMemberMethod>(); Dictionary<string, YYLTYPE> removed_fields = (Dictionary<string, YYLTYPE>)FormClass.UserData["fields"]; Dictionary<string, YYLTYPE> removed_methods = (Dictionary<string, YYLTYPE>)FormClass.UserData["methods"]; CodeMemberMethod InitializeComponent = null; foreach (CodeTypeMember member in FormClass.Members) { if (member is CodeMemberField) { CodeMemberField field = (CodeMemberField)member; if (field.UserData.Contains("original_name")) { string original_name = (string)field.UserData["original_name"]; removed_fields.Remove(original_name); if (original_name != field.Name) renamed_fields.Add(field); } else new_fields.Add(field); } else if (member is CodeMemberMethod) { CodeMemberMethod method = (CodeMemberMethod)member; if (method.Name == "InitializeComponent") InitializeComponent = method; if (method.UserData.Contains("original_name")) { string original_name = (string)method.UserData["original_name"]; removed_methods.Remove(original_name); if (original_name != method.Name) renamed_methods.Add(method); } else new_methods.Add(method); } else throw new System.NotSupportedException(member.GetType().ToString()); } string[] lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.None); bool[] removed = new bool[lines.Length+1]; for (int i=0; i<removed.Length; i++) removed[i] = false; foreach (YYLTYPE location in removed_fields.Values) for (int i=location.first_line; i <= location.last_line; i++) removed[i] = true; foreach (YYLTYPE location in removed_methods.Values) for (int i=location.first_line; i <= location.last_line; i++) removed[i] = true; CodeTypeMember[] renamed = new CodeTypeMember[lines.Length+1]; for (int i=0; i<renamed.Length; i++) renamed[i] = null; foreach (CodeMemberField field in renamed_fields) { YYLTYPE location = (YYLTYPE)field.UserData["name_location"]; renamed[location.first_line] = field; } foreach (CodeMemberMethod method in renamed_methods) { YYLTYPE location = (YYLTYPE)method.UserData["name_location"]; renamed[location.first_line] = method; } Ruby.Compiler.YYLTYPE InitializeComponentLocation = (YYLTYPE)InitializeComponent.UserData["location"]; // if InitializeComponent didn't previously exist if (InitializeComponentLocation == null) { // create empty range at start of class InitializeComponentLocation = (YYLTYPE)FormClass.UserData["body_location"]; InitializeComponentLocation.last_line = InitializeComponentLocation.first_line - 1; } for (int i = 1; i <= lines.Length; i++) { string line = lines[i-1]; if (i == InitializeComponentLocation.first_line) using (InternalCodeGenerator gen = new InternalCodeGenerator(w)) { gen.Indent++; gen.WriteLine(); // insert new fields foreach (CodeMemberField field in new_fields) gen.GenerateMemberField(field); gen.WriteLine(); // insert new InitializeComponent method gen.GenerateMemberMethod(InitializeComponent); // insert new methods foreach (CodeMemberMethod method in new_methods) { gen.WriteLine(); gen.GenerateMemberMethod(method); } gen.Indent--; } else if (i < InitializeComponentLocation.first_line || i > InitializeComponentLocation.last_line) { if (renamed[i] != null) { YYLTYPE location = (YYLTYPE)renamed[i].UserData["name_location"]; string original = (string)renamed[i].UserData["original_name"]; line = line.Substring(0, location.first_column) + renamed[i].Name + line.Substring(location.first_column+original.Length); } if (!removed[i]) w.WriteLine(line); } } }