public override bool Execute() { AppDomain domain = null; bool success; if (!Path.IsPathRooted(ToolPath)) { ToolPath = Path.Combine(Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode), ToolPath); } if (!Path.IsPathRooted(BuildTaskPath)) { BuildTaskPath = Path.Combine(Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode), BuildTaskPath); } try { domain = GetAntlrTaskAppDomain(); AntlrClassGenerationTaskInternal wrapper = CreateBuildTaskWrapper(domain); success = wrapper.Execute(); if (success) { _generatedCodeFiles.AddRange(wrapper.GeneratedCodeFiles.Select(file => (ITaskItem) new TaskItem(file))); } foreach (BuildMessage message in wrapper.BuildMessages) { ProcessBuildMessage(message); } } catch (Exception exception) { if (IsFatalException(exception)) { throw; } ProcessExceptionAsBuildMessage(exception); success = false; } finally { if (domain != null && domain != _sharedAppDomain) { AppDomain.Unload(domain); } } return(success); }
public override bool Execute() { bool success; //System.Threading.Thread.Sleep(20000); if (!Path.IsPathRooted(ToolPath)) { ToolPath = Path.Combine(Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode), ToolPath); } if (!Path.IsPathRooted(BuildTaskPath)) { BuildTaskPath = Path.Combine(Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode), BuildTaskPath); } try { AntlrClassGenerationTaskInternal wrapper = CreateBuildTaskWrapper(); success = wrapper.Execute(); if (success) { _generatedCodeFiles.AddRange(wrapper.GeneratedCodeFiles.Select(file => (ITaskItem) new TaskItem(file))); } foreach (BuildMessage message in wrapper.BuildMessages) { ProcessBuildMessage(message); } } catch (Exception exception) { if (IsFatalException(exception)) { throw; } ProcessExceptionAsBuildMessage(exception); success = false; } return(success); }
private AntlrClassGenerationTaskInternal CreateBuildTaskWrapper() { AntlrClassGenerationTaskInternal wrapper = new AntlrClassGenerationTaskInternal(); IList <string> sourceCodeFiles = null; if (this.SourceCodeFiles != null) { sourceCodeFiles = new List <string>(SourceCodeFiles.Length); foreach (ITaskItem taskItem in SourceCodeFiles) { sourceCodeFiles.Add(taskItem.ItemSpec); } } if (this.TokensFiles != null && this.TokensFiles.Length > 0) { Directory.CreateDirectory(OutputPath); HashSet <string> copied = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (ITaskItem taskItem in TokensFiles) { string fileName = taskItem.ItemSpec; if (!File.Exists(fileName)) { Log.LogError("The tokens file '{0}' does not exist.", fileName); continue; } string vocabName = Path.GetFileNameWithoutExtension(fileName); if (!copied.Add(vocabName)) { Log.LogWarning("The tokens file '{0}' conflicts with another tokens file in the same project.", fileName); continue; } string target = Path.Combine(OutputPath, Path.GetFileName(fileName)); if (!Path.GetExtension(target).Equals(".tokens", StringComparison.OrdinalIgnoreCase)) { Log.LogError("The destination for the tokens file '{0}' did not have the correct extension '.tokens'.", target); continue; } File.Copy(fileName, target, true); File.SetAttributes(target, File.GetAttributes(target) & ~FileAttributes.ReadOnly); } } wrapper.ToolPath = ToolPath; wrapper.SourceCodeFiles = sourceCodeFiles; wrapper.TargetLanguage = TargetLanguage; wrapper.TargetFrameworkVersion = TargetFrameworkVersion; wrapper.OutputPath = OutputPath; wrapper.Encoding = Encoding; wrapper.LanguageSourceExtensions = LanguageSourceExtensions; wrapper.TargetNamespace = TargetNamespace; wrapper.GenerateListener = GenerateListener; wrapper.GenerateVisitor = GenerateVisitor; wrapper.ForceAtn = ForceAtn; wrapper.AbstractGrammar = AbstractGrammar; wrapper.JavaVendor = JavaVendor; wrapper.JavaInstallation = JavaInstallation; wrapper.JavaExecutable = JavaExecutable; wrapper.UseCSharpGenerator = UseCSharpGenerator; return(wrapper); }
private AntlrClassGenerationTaskInternal CreateBuildTaskWrapper() { AntlrClassGenerationTaskInternal wrapper = new AntlrClassGenerationTaskInternal(); IList<string> sourceCodeFiles = null; if (this.SourceCodeFiles != null) { sourceCodeFiles = new List<string>(SourceCodeFiles.Length); foreach (ITaskItem taskItem in SourceCodeFiles) sourceCodeFiles.Add(taskItem.ItemSpec); } if (this.TokensFiles != null && this.TokensFiles.Length > 0) { Directory.CreateDirectory(OutputPath); HashSet<string> copied = new HashSet<string>(StringComparer.OrdinalIgnoreCase); foreach (ITaskItem taskItem in TokensFiles) { string fileName = taskItem.ItemSpec; if (!File.Exists(fileName)) { Log.LogError("The tokens file '{0}' does not exist.", fileName); continue; } string vocabName = Path.GetFileNameWithoutExtension(fileName); if (!copied.Add(vocabName)) { Log.LogWarning("The tokens file '{0}' conflicts with another tokens file in the same project.", fileName); continue; } string target = Path.Combine(OutputPath, Path.GetFileName(fileName)); if (!Path.GetExtension(target).Equals(".tokens", StringComparison.OrdinalIgnoreCase)) { Log.LogError("The destination for the tokens file '{0}' did not have the correct extension '.tokens'.", target); continue; } File.Copy(fileName, target, true); File.SetAttributes(target, File.GetAttributes(target) & ~FileAttributes.ReadOnly); } } wrapper.ToolPath = ToolPath; wrapper.SourceCodeFiles = sourceCodeFiles; wrapper.TargetLanguage = TargetLanguage; wrapper.TargetFrameworkVersion = TargetFrameworkVersion; wrapper.OutputPath = OutputPath; wrapper.Encoding = Encoding; wrapper.LanguageSourceExtensions = LanguageSourceExtensions; wrapper.TargetNamespace = TargetNamespace; wrapper.GenerateListener = GenerateListener; wrapper.GenerateVisitor = GenerateVisitor; wrapper.ForceAtn = ForceAtn; wrapper.AbstractGrammar = AbstractGrammar; wrapper.JavaVendor = JavaVendor; wrapper.JavaInstallation = JavaInstallation; wrapper.JavaExecutable = JavaExecutable; return wrapper; }