internal void Update(Project project) { foreach (var file in project.Files) { TypeSystemService.ParseFile(project, file.FilePath); } }
public static void AddNewMember(ITypeDefinition type, IUnresolvedTypeDefinition part, IUnresolvedMember newMember, bool implementExplicit = false) { bool isOpen; var data = TextFileProvider.Instance.GetTextEditorData(part.Region.FileName, out isOpen); var parsedDocument = TypeSystemService.ParseFile(data.FileName, data.MimeType, data.Text); var insertionPoints = GetInsertionPoints(data, parsedDocument, part); var suitableInsertionPoint = GetSuitableInsertionPoint(insertionPoints, part, newMember); var generator = CreateCodeGenerator(data, type.Compilation); generator.IndentLevel = CalculateBodyIndentLevel(parsedDocument.GetInnermostTypeDefinition(type.Region.Begin)); var generatedCode = generator.CreateMemberImplementation(type, part, newMember, implementExplicit); suitableInsertionPoint.Insert(data, generatedCode.Code); if (!isOpen) { try { File.WriteAllText(type.Region.FileName, data.Text); } catch (Exception e) { LoggingService.LogError(GettextCatalog.GetString("Failed to write file '{0}'.", type.Region.FileName), e); MessageService.ShowError(GettextCatalog.GetString("Failed to write file '{0}'.", type.Region.FileName)); } } }
public void Update(Project project) { System.Threading.Tasks.Task.Factory.StartNew(delegate { foreach (var file in project.Files) { TypeSystemService.ParseFile(project, file.FilePath); } }); }
internal void Update(Project project) { foreach (var file in project.Files) { if (file.BuildAction == BuildAction.None) { continue; } TypeSystemService.ParseFile(project, file.FilePath); } }
public static IUnresolvedMember AddCodeDomMember(Project project, IUnresolvedTypeDefinition type, CodeTypeMember newMember) { bool isOpen; var data = TextFileProvider.Instance.GetTextEditorData(type.Region.FileName, out isOpen); var parsedDocument = TypeSystemService.ParseFile(data.Document.FileName, data.Document.MimeType, data.Text); var insertionPoints = GetInsertionPoints(data, parsedDocument, type); var suitableInsertionPoint = GetSuitableInsertionPoint(insertionPoints, type, newMember); var dotNetProject = project as DotNetProject; if (dotNetProject == null) { LoggingService.LogError("Only .NET projects are supported."); return(null); } var generator = dotNetProject.LanguageBinding.GetCodeDomProvider(); StringWriter sw = new StringWriter(); var options = new CodeGeneratorOptions(); options.IndentString = data.GetLineIndent(type.Region.BeginLine) + "\t"; if (newMember is CodeMemberMethod) { options.BracingStyle = "C"; } generator.GenerateCodeFromMember(newMember, sw, options); var code = sw.ToString(); if (!string.IsNullOrEmpty(code)) { suitableInsertionPoint.Insert(data, code); } if (!isOpen) { try { File.WriteAllText(type.Region.FileName, data.Text); } catch (Exception e) { LoggingService.LogError(string.Format("Failed to write file '{0}'.", type.Region.FileName), e); MessageService.ShowError(GettextCatalog.GetString("Failed to write file '{0}'.", type.Region.FileName)); } } var newDocument = TypeSystemService.ParseFile(data.FileName, data.MimeType, data.Text); return(newDocument.ParsedFile.GetMember(suitableInsertionPoint.Location.Line, int.MaxValue)); }
public static void AddNewMembers(Project project, ITypeDefinition type, IUnresolvedTypeDefinition part, IEnumerable <IUnresolvedMember> newMembers, string regionName = null, Func <IUnresolvedMember, bool> implementExplicit = null) { IUnresolvedMember firstNewMember = newMembers.FirstOrDefault(); if (firstNewMember == null) { return; } bool isOpen; var data = TextFileProvider.Instance.GetTextEditorData(part.Region.FileName, out isOpen); var parsedDocument = TypeSystemService.ParseFile(project, data); var insertionPoints = GetInsertionPoints(data, parsedDocument, part); var suitableInsertionPoint = GetSuitableInsertionPoint(insertionPoints, part, firstNewMember); var generator = CreateCodeGenerator(data, type.Compilation); generator.IndentLevel = CalculateBodyIndentLevel(parsedDocument.GetInnermostTypeDefinition(part.Region.Begin)); StringBuilder sb = new StringBuilder(); foreach (var newMember in newMembers) { if (sb.Length > 0) { sb.AppendLine(); sb.AppendLine(); } sb.Append(generator.CreateMemberImplementation(type, part, newMember, implementExplicit != null ? implementExplicit(newMember) : false).Code); } suitableInsertionPoint.Insert(data, string.IsNullOrEmpty(regionName) ? sb.ToString() : generator.WrapInRegions(regionName, sb.ToString())); if (!isOpen) { try { File.WriteAllText(type.Region.FileName, data.Text); } catch (Exception e) { LoggingService.LogError(GettextCatalog.GetString("Failed to write file '{0}'.", type.Region.FileName), e); MessageService.ShowError(GettextCatalog.GetString("Failed to write file '{0}'.", type.Region.FileName)); } } }
public static IUnresolvedTypeDefinition AddType(DotNetProject project, string folder, string namspace, CodeTypeDeclaration type) { var unit = new CodeCompileUnit(); var ns = new CodeNamespace(namspace); ns.Types.Add(type); unit.Namespaces.Add(ns); string fileName = project.LanguageBinding.GetFileName(Path.Combine(folder, type.Name)); using (var sw = new StreamWriter(fileName)) { var provider = project.LanguageBinding.GetCodeDomProvider(); var options = new CodeGeneratorOptions(); options.IndentString = "\t"; options.BracingStyle = "C"; provider.GenerateCodeFromCompileUnit(unit, sw, options); } return(TypeSystemService.ParseFile(project, fileName).TopLevelTypeDefinitions.FirstOrDefault()); }