diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs index b54085a249..875c19baae 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/ResXFileCodeGenerator.cs @@ -45,41 +45,43 @@ using MonoDevelop.Core.Assemblies; using System.Resources; using System.Collections.Generic; using System.Collections; +using System.Threading.Tasks; namespace MonoDevelop.Ide.CustomTools { public class ResXFileCodeGenerator : ISingleFileCustomTool { - public IAsyncOperation Generate (IProgressMonitor monitor, ProjectFile file, SingleFileCustomToolResult result) + public Task Generate (ProgressMonitor monitor, ProjectFile file, SingleFileCustomToolResult result) { - return new ThreadAsyncOperation (GenerateFile (file, result, true), result); + return GenerateFile (file, result, true); } - public static Action GenerateFile (ProjectFile file, SingleFileCustomToolResult result, bool internalClass) + public async static Task GenerateFile (ProjectFile file, SingleFileCustomToolResult result, bool internalClass) { - return delegate { - var dnp = file.Project as DotNetProject; - if (dnp == null) { - var err = "ResXFileCodeGenerator can only be used with .NET projects"; - result.Errors.Add (new CompilerError (null, 0, 0, null, err)); - return; - } + var dnp = file.Project as DotNetProject; + if (dnp == null) { + var err = "ResXFileCodeGenerator can only be used with .NET projects"; + result.Errors.Add (new CompilerError (null, 0, 0, null, err)); + return; + } - var provider = dnp.LanguageBinding.GetCodeDomProvider (); - if (provider == null) { - var err = "ResXFileCodeGenerator can only be used with languages that support CodeDOM"; - result.Errors.Add (new CompilerError (null, 0, 0, null, err)); - return; - } + var provider = dnp.LanguageBinding.GetCodeDomProvider (); + if (provider == null) { + var err = "ResXFileCodeGenerator can only be used with languages that support CodeDOM"; + result.Errors.Add (new CompilerError (null, 0, 0, null, err)); + return; + } - var outputfile = file.FilePath.ChangeExtension (".Designer." + provider.FileExtension); - var ns = CustomToolService.GetFileNamespace (file, outputfile); - var cn = provider.CreateValidIdentifier (file.FilePath.FileNameWithoutExtension); - var rd = new Dictionary<object, object> (); + var outputfile = file.FilePath.ChangeExtension (".Designer." + provider.FileExtension); + var ns = CustomToolService.GetFileNamespace (file, outputfile); + var cn = provider.CreateValidIdentifier (file.FilePath.FileNameWithoutExtension); + var rd = new Dictionary<object, object> (); + var filePath = file.FilePath; + var targetsPcl2Framework = TargetsPcl2Framework (dnp); - using (var r = new ResXResourceReader (file.FilePath)) { - r.UseResXDataNodes = true; - r.BasePath = file.FilePath.ParentDirectory; + await Task.Factory.StartNew (() => { + using (var r = new ResXResourceReader (filePath)) { + r.BasePath = filePath.ParentDirectory; foreach (DictionaryEntry e in r) { rd.Add (e.Key, e.Value); @@ -88,21 +90,21 @@ namespace MonoDevelop.Ide.CustomTools string[] unmatchable; var ccu = StronglyTypedResourceBuilder.Create (rd, cn, ns, provider, internalClass, out unmatchable); - - if (TargetsPcl2Framework (dnp)) { + + if (targetsPcl2Framework) { FixupPclTypeInfo (ccu); } foreach (var p in unmatchable) { var msg = string.Format ("Could not generate property for resource ID '{0}'", p); - result.Errors.Add (new CompilerError (file.FilePath, 0, 0, null, msg)); + result.Errors.Add (new CompilerError (filePath, 0, 0, null, msg)); } using (var w = new StreamWriter (outputfile, false, Encoding.UTF8)) provider.GenerateCodeFromCompileUnit (ccu, w, new CodeGeneratorOptions ()); result.GeneratedFilePath = outputfile; - }; + }); } static bool TargetsPcl2Framework (DotNetProject dnp) |