From e3f69a17081e89d6ada1726bddad9d96daac0c1b Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 3 Oct 2006 17:41:55 +0000 Subject: [PATCH] Fixed SD2-973: Boo Forms Designer shows error after adding a control and switching between views. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1874 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Designer/BooDesignerLoader.cs | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs index 7ee55085f3..e7ef25dbed 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs @@ -106,7 +106,7 @@ namespace Grunwald.BooBinding.Designer { lastTextContent = TextContent; - ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName); + ParseInformation parseInfo = ParserService.ParseFile(textEditorControl.FileName, textEditorControl.Text, false, true); // ensure that there are no syntax errors in the file: Module mainModule = Parse(textEditorControl.FileName, lastTextContent); @@ -127,6 +127,18 @@ namespace Grunwald.BooBinding.Designer throw new FormsDesignerLoadException("formClass.BaseClass returned null."); cld.BaseTypes.Add(new SimpleTypeReference(formClass.BaseClass.FullyQualifiedName)); + string fileName = initMethod.DeclaringType.CompilationUnit.FileName; + Module parsedModule; + if (FileUtility.IsEqualFileName(fileName, textEditorControl.FileName)) { + parsedModule = mainModule; + } else { + string fileContent = ParserService.GetParseableFileContent(fileName); + parsedModule = Parse(fileName, fileContent); + + // Update list of fields in designer file. Fixes SD2-973. + ParserService.ParseFile(fileName, fileContent, false, true); + } + foreach (IField f in formClass.Fields) { if (f.ReturnType.IsDefaultReturnType) { Field field = new Field(); @@ -136,13 +148,6 @@ namespace Grunwald.BooBinding.Designer } } - string fileName = initMethod.DeclaringType.CompilationUnit.FileName; - Module parsedModule; - if (FileUtility.IsEqualFileName(fileName, textEditorControl.FileName)) - parsedModule = mainModule; - else - parsedModule = Parse(fileName, ParserService.GetParseableFileContent(fileName)); - // Now find InitializeComponent in parsed module and put it into our new module foreach (TypeMember m in parsedModule.Members) { TypeDefinition td = m as TypeDefinition; @@ -156,15 +161,19 @@ namespace Grunwald.BooBinding.Designer { cld.Members.Add(method); + #if DEBUG Console.WriteLine(module.ToCodeString()); + #endif CodeDomVisitor visitor = new CodeDomVisitor(parseInfo.MostRecentCompilationUnit.ProjectContent); module.Accept(visitor); + #if DEBUG // output generated CodeDOM to the console : ICSharpCode.NRefactory.Visitors.CodeDomVerboseOutputGenerator outputGenerator = new ICSharpCode.NRefactory.Visitors.CodeDomVerboseOutputGenerator(); outputGenerator.GenerateCodeFromMember(visitor.OutputCompileUnit.Namespaces[0].Types[0], Console.Out, null); provider.GenerateCodeFromCompileUnit(visitor.OutputCompileUnit, Console.Out, null); + #endif return visitor.OutputCompileUnit; }