public IEnumerable <OpenedFile> GetSourceFiles(out OpenedFile designerCodeFile)
        {
            // get new initialize components
            ParseInformation info = ParserService.ParseFile(this.viewContent.PrimaryFileName, this.viewContent.PrimaryFileContent);
            ICompilationUnit cu   = info.CompilationUnit;

            foreach (IClass c in cu.Classes)
            {
                if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c))
                {
                    this.currentClassPart     = c;
                    this.initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(c);
                    if (this.initializeComponents != null)
                    {
                        string designerFileName = this.initializeComponents.DeclaringType.CompilationUnit.FileName;
                        if (designerFileName != null)
                        {
                            designerCodeFile = FileService.GetOrCreateOpenedFile(designerFileName);

                            CompoundClass compound = c.GetCompoundClass() as CompoundClass;
                            if (compound == null)
                            {
                                return(new [] { designerCodeFile });
                            }
                            else
                            {
                                return(compound.Parts
                                       .Select(cl => FileService.GetOrCreateOpenedFile(cl.CompilationUnit.FileName))
                                       .Distinct());
                            }
                        }
                    }
                }
            }

            throw new FormsDesignerLoadException("Could not find InitializeComponent method in any part of the open class.");
        }
        public static IList <IClass> FindFormClassParts(ParseInformation parseInfo, out IClass formClass, out bool isFirstClassInFile)
        {
                        #if DEBUG
            if ((Control.ModifierKeys & (Keys.Alt | Keys.Control)) == (Keys.Alt | Keys.Control))
            {
                System.Diagnostics.Debugger.Break();
            }
                        #endif

            formClass          = null;
            isFirstClassInFile = true;
            foreach (IClass c in parseInfo.CompilationUnit.Classes)
            {
                if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c))
                {
                    formClass = c;
                    break;
                }
                isFirstClassInFile = false;
            }
            if (formClass == null)
            {
                throw new FormsDesignerLoadException("No class derived from Form or UserControl was found.");
            }

            // Initialize designer for formClass
            formClass = formClass.GetCompoundClass();
            if (formClass is CompoundClass)
            {
                return((formClass as CompoundClass).Parts);
            }
            else
            {
                return(new IClass[] { formClass });
            }
        }
        protected void Reparse()
        {
            Dictionary <OpenedFile, ParseInformation> parsings = new Dictionary <OpenedFile, ParseInformation>();
            ParseInformation info;
            ICompilationUnit cu;

            // Reparse all source files for the designed form
            foreach (KeyValuePair <OpenedFile, IDocument> entry in this.ViewContent.SourceFiles)
            {
                parsings.Add(entry.Key, ParserService.ParseFile(entry.Key.FileName, entry.Value));
            }

            // Update currentClassPart from PrimaryFile
            this.currentClassPart = null;
            if (this.ViewContent.PrimaryFile != null && parsings.TryGetValue(this.ViewContent.PrimaryFile, out info))
            {
                cu = info.CompilationUnit;
                foreach (IClass c in cu.Classes)
                {
                    if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c))
                    {
                        if (FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(c) != null)
                        {
                            this.currentClassPart = c;
                            break;
                        }
                    }
                }
                if (this.currentClassPart == null)
                {
                    LoggingService.Warn("AbstractDesignerGenerator.Reparse: Could not find designed class in primary file '" + this.ViewContent.PrimaryFile.FileName + "'");
                }
            }
            else
            {
                LoggingService.Debug("AbstractDesignerGenerator.Reparse: Primary file is unavailable");
            }

            // Update initializeComponents, completeClass and formClass
            // from designer code file
            this.completeClass        = null;
            this.formClass            = null;
            this.initializeComponents = null;
            if (this.ViewContent.DesignerCodeFile == null ||
                !parsings.TryGetValue(this.ViewContent.DesignerCodeFile, out info))
            {
                LoggingService.Warn("AbstractDesignerGenerator.Reparse: Designer source code file is unavailable");
                if (this.currentClassPart != null)
                {
                    this.completeClass = this.currentClassPart.GetCompoundClass();
                }
                return;
            }

            cu = info.CompilationUnit;
            foreach (IClass c in cu.Classes)
            {
                if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c))
                {
                    this.initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(c);
                    if (this.initializeComponents != null)
                    {
                        using (StringReader r = new StringReader(this.ViewContent.DesignerCodeFileContent)) {
                            int count = this.initializeComponents.Region.BeginLine;
                            for (int i = 1; i < count; i++)
                            {
                                r.ReadLine();
                            }
                            string line = r.ReadLine();
                            tabs = GetIndentation(line);
                        }
                        this.completeClass = c.GetCompoundClass();
                        this.formClass     = this.initializeComponents.DeclaringType;
                        break;
                    }
                }
            }

            if (this.completeClass == null || this.formClass == null)
            {
                LoggingService.Warn("AbstractDesignerGenerator.Reparse: Could not find InitializeComponents in designer source code file '" + this.ViewContent.DesignerCodeFile.FileName + "'");
            }
        }