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