public override CodeCompileUnit Parse(TextReader codeStream)
        {
            // codeStream  используется для получения DesignerDocDataService...
            string mainFilePath = PathOfMainFile();

            ProjectInfo projectInfo = ProjectInfo.FindProject(mainFilePath);

            if (projectInfo != null)
            {
                var source = projectInfo.GetSource(mainFilePath);
                DesignerDocDataService docDataService = null;

                // IServiceProvider передается только при вызове метода Parse() дизайнером Windows Forms
                if (codeStream is IServiceProvider)
                {
                    var provider = (IServiceProvider)codeStream;
                    docDataService = (DesignerDocDataService)provider.GetService(typeof(DesignerDocDataService));
                }

                var result = projectInfo.Engine.CreateCodeCompileUnit(source);

                var codeCompileUnit = result.CodeCompileUnit;

                // Дизайнер форм должен следить за изменением файлов в которых расположен
                // класс формы. Чтобы он знал за какакими файлами нужно следить, информацию
                // о них нужно запихать в RelatedDocDataCollection и поместить ссылку на ее
                // в codeCompileUnit.UserData[typeof(RelatedDocDataCollection)].
                var relatedDocDatas = new RelatedDocDataCollection();
                var sourcesInf      = new List <TupleStringIntInt>();

                foreach (int index in result.FilesIndices)
                {
                    var filePath = Location.GetFileName(index);

                    if (docDataService != null)
                    {
                        var data = docDataService.GetFileDocData(filePath, FileAccess.Read, null);
                        relatedDocDatas.Add(data);
                    }

                    var textVerIndex = projectInfo.GetSource(index).GetTextCurrentVersionAndFileIndex();
                    sourcesInf.Add(textVerIndex);
                }

                codeCompileUnit.UserData[typeof(RelatedDocDataCollection)] = relatedDocDatas;
                codeCompileUnit.UserData["NemerleSources"] = sourcesInf;

                return(codeCompileUnit);
            }
            else
            {
                return(null);
            }
        }
        public override CodeCompileUnit Parse(TextReader codeStream)
        {
            // codeStream  используется для получения DesignerDocDataService...
            string mainFilePath = PathOfMainFile();

            ProjectInfo projectInfo = ProjectInfo.FindProject(mainFilePath);

            if (projectInfo != null)
            {
                var source          = projectInfo.GetSource(mainFilePath);
                DesignerDocDataService docDataService = null;

                // IServiceProvider передается только при вызове метода Parse() дизайнером Windows Forms
                if (codeStream is IServiceProvider)
                {
                    var provider = (IServiceProvider)codeStream;
                    docDataService = (DesignerDocDataService)provider.GetService(typeof(DesignerDocDataService));
                }

                var result          = projectInfo.Engine.CreateCodeCompileUnit(source);

                var codeCompileUnit = result.CodeCompileUnit;

                // Дизайнер форм должен следить за изменением файлов в которых расположен
                // класс формы. Чтобы он знал за какакими файлами нужно следить, информацию
                // о них нужно запихать в RelatedDocDataCollection и поместить ссылку на ее
                // в codeCompileUnit.UserData[typeof(RelatedDocDataCollection)].
                var relatedDocDatas = new RelatedDocDataCollection();
                var sourcesInf = new List<TupleStringIntInt>();

                foreach (int index in result.FilesIndices)
                {
                    var filePath     = Location.GetFileName(index);

                    if (docDataService != null)
                    {
                        var data = docDataService.GetFileDocData(filePath, FileAccess.Read, null);
                        relatedDocDatas.Add(data);
                    }

                    var textVerIndex = projectInfo.GetSource(index).GetTextCurrentVersionAndFileIndex();
                    sourcesInf.Add(textVerIndex);
                }

                codeCompileUnit.UserData[typeof(RelatedDocDataCollection)] = relatedDocDatas;
                codeCompileUnit.UserData["NemerleSources"] = sourcesInf;

                return codeCompileUnit;
            }
            else
                return null;
        }