public static ProjectFileModel FromDtoToModel(ProjectFileDto dto)
 {
     var model = new ProjectFileModel();
     CopyIProjectItemModelMembers(model, dto);
     model.Content = dto.Content;
     return model;
 }
 public static ProjectFileDto FromModelToDto(ProjectFileModel model)
 {
     var dto = new ProjectFileDto();
     CopyIProjectItemModelMembers(dto, model);
     dto.Content = model.Content;
     return dto;
 }
        public static ProjectFileModel FromDtoToModel(ProjectFileDto dto)
        {
            var model = new ProjectFileModel();

            CopyIProjectItemModelMembers(model, dto);
            model.Content = dto.Content;
            return(model);
        }
        public static ProjectFileDto FromModelToDto(ProjectFileModel model)
        {
            var dto = new ProjectFileDto();

            CopyIProjectItemModelMembers(dto, model);
            dto.Content = model.Content;
            return(dto);
        }
        public static FileParseResult[] ParseFile(ProjectFileModel fileModel)
        {
            var parser = new CSharpParser();
            SyntaxTree syntaxTree = parser.Parse(fileModel.Content, fileModel.Name);

            var results = parser.ErrorsAndWarnings
                .Select(x => new FileParseResult()
                {
                    FileId = fileModel.Id,
                    FileName = fileModel.Name,
                    Line = x.Region.BeginLine,
                    Column = x.Region.BeginColumn,
                    Type = x.ErrorType,
                    Message = x.Message
                }).ToArray();

            return results;
        }
        public static void IntegrateFileModel(ProjectModel projectModel, ProjectFileModel fileModel)
        {
            // Parse C# code file => SyntaxTree
            // NOTE:  The NRefactory Test project uses a somewhat "cleaner"/more "sanitized" version of the 
            // file content for creating the AST.  Why?  I can't be certain, but I suspect that this is to 
            // simplify testing by eliminating stuff that contribute to errors... but maybe there's something 
            // more to it.  Doing some more routine tests on our end should prove whether omitting this step 
            // actually makes any difference.
            fileModel.Parser = new CSharpParser();
            fileModel.SyntaxTree = fileModel.Parser.Parse(fileModel.Content, fileModel.Name);
            fileModel.SyntaxTree.Freeze();
            
            // Convert syntax tree into parsed file that can be stored in the type system.
            fileModel.UnresolvedFile = fileModel.SyntaxTree.ToTypeSystem();

            // Add specified file to the project content.  
            // If a file with the same name already exists, this will update the existing file.
            projectModel.ProjectContent = projectModel.ProjectContent.AddOrUpdateFiles(fileModel.UnresolvedFile);
        }