PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Microsoft.Build/Microsoft.Build/Microsoft/Build/BackEnd/Logging/ProjectLoggingContext.cs

#
C# | 139 lines | 121 code | 18 blank | 0 comment | 17 complexity | d3ec0add2db96bfb3c3ea02c6db0368f MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0
  1. namespace Microsoft.Build.BackEnd.Logging
  2. {
  3. using Microsoft.Build.BackEnd;
  4. using Microsoft.Build.Collections;
  5. using Microsoft.Build.Execution;
  6. using Microsoft.Build.Framework;
  7. using Microsoft.Build.Shared;
  8. using System;
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. using System.Diagnostics;
  12. using System.Runtime;
  13. using System.Runtime.CompilerServices;
  14. internal class ProjectLoggingContext : BaseLoggingContext
  15. {
  16. private Microsoft.Build.BackEnd.Logging.NodeLoggingContext nodeLoggingContext;
  17. private string projectFullPath;
  18. internal ProjectLoggingContext(Microsoft.Build.BackEnd.Logging.NodeLoggingContext nodeLoggingContext, BuildRequestEntry requestEntry, BuildEventContext parentBuildEventContext) : this(nodeLoggingContext, requestEntry.Request.SubmissionId, requestEntry.Request.ConfigurationId, requestEntry.RequestConfiguration.ProjectFullPath, requestEntry.Request.Targets, requestEntry.RequestConfiguration.ToolsVersion, requestEntry.RequestConfiguration.Project.PropertiesToBuildWith, requestEntry.RequestConfiguration.Project.ItemsToBuildWith, parentBuildEventContext)
  19. {
  20. }
  21. internal ProjectLoggingContext(Microsoft.Build.BackEnd.Logging.NodeLoggingContext nodeLoggingContext, BuildRequest request, string projectFullPath, string toolsVersion, BuildEventContext parentBuildEventContext) : this(nodeLoggingContext, request.SubmissionId, request.ConfigurationId, projectFullPath, request.Targets, toolsVersion, null, null, parentBuildEventContext)
  22. {
  23. }
  24. private ProjectLoggingContext(Microsoft.Build.BackEnd.Logging.NodeLoggingContext nodeLoggingContext, int submissionId, int configurationId, string projectFullPath, List<string> targets, string toolsVersion, PropertyDictionary<ProjectPropertyInstance> projectProperties, ItemDictionary<ProjectItemInstance> projectItems, BuildEventContext parentBuildEventContext) : base(nodeLoggingContext)
  25. {
  26. this.nodeLoggingContext = nodeLoggingContext;
  27. this.projectFullPath = projectFullPath;
  28. ProjectPropertyInstanceEnumeratorProxy properties = null;
  29. ProjectItemInstanceEnumeratorProxy items = null;
  30. IEnumerable<ProjectPropertyInstance> backingProperties = (projectProperties == null) ? EmptyEnumerable<ProjectPropertyInstance>.Instance : null;
  31. IEnumerable<ProjectItemInstance> backingItems = (projectItems == null) ? EmptyEnumerable<ProjectItemInstance>.Instance : null;
  32. string[] propertiesToSerialize = base.LoggingService.PropertiesToSerialize;
  33. if (!base.LoggingService.OnlyLogCriticalEvents && (!base.LoggingService.RunningOnRemoteNode || base.LoggingService.SerializeAllProperties))
  34. {
  35. if (projectProperties != null)
  36. {
  37. backingProperties = projectProperties.GetCopyOnReadEnumerable();
  38. }
  39. if (projectItems != null)
  40. {
  41. backingItems = projectItems.GetCopyOnReadEnumerable();
  42. }
  43. properties = new ProjectPropertyInstanceEnumeratorProxy(backingProperties);
  44. items = new ProjectItemInstanceEnumeratorProxy(backingItems);
  45. }
  46. if (((projectProperties != null) && (propertiesToSerialize != null)) && ((propertiesToSerialize.Length > 0) && !base.LoggingService.SerializeAllProperties))
  47. {
  48. PropertyDictionary<ProjectPropertyInstance> dictionary = new PropertyDictionary<ProjectPropertyInstance>();
  49. foreach (string str in propertiesToSerialize)
  50. {
  51. ProjectPropertyInstance projectProperty = projectProperties[str];
  52. if (projectProperty != null)
  53. {
  54. dictionary.Set(projectProperty);
  55. }
  56. }
  57. properties = new ProjectPropertyInstanceEnumeratorProxy(dictionary);
  58. }
  59. base.BuildEventContext = base.LoggingService.LogProjectStarted(nodeLoggingContext.BuildEventContext, submissionId, configurationId, parentBuildEventContext, projectFullPath, string.Join(";", targets.ToArray()), properties, items);
  60. base.LoggingService.LogComment(base.BuildEventContext, MessageImportance.Low, "ToolsVersionInEffectForBuild", new object[] { toolsVersion });
  61. base.IsValid = true;
  62. }
  63. internal void LogProjectFinished(bool success)
  64. {
  65. ErrorUtilities.VerifyThrow(base.IsValid, "invalid");
  66. base.LoggingService.LogProjectFinished(base.BuildEventContext, this.projectFullPath, success);
  67. base.IsValid = false;
  68. }
  69. internal TargetLoggingContext LogTargetBatchStarted(string projectFullPath, ProjectTargetInstance target, string parentTargetName)
  70. {
  71. ErrorUtilities.VerifyThrow(base.IsValid, "invalid");
  72. return new TargetLoggingContext(this, projectFullPath, target, parentTargetName);
  73. }
  74. internal Microsoft.Build.BackEnd.Logging.NodeLoggingContext NodeLoggingContext
  75. {
  76. [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
  77. get
  78. {
  79. return this.nodeLoggingContext;
  80. }
  81. }
  82. private class ProjectItemInstanceEnumeratorProxy : IEnumerable<DictionaryEntry>, IEnumerable
  83. {
  84. private IEnumerable<ProjectItemInstance> backingItems;
  85. internal ProjectItemInstanceEnumeratorProxy(IEnumerable<ProjectItemInstance> backingItems)
  86. {
  87. this.backingItems = backingItems;
  88. }
  89. public IEnumerator<DictionaryEntry> GetEnumerator()
  90. {
  91. foreach (ProjectItemInstance iteratorVariable0 in this.backingItems)
  92. {
  93. yield return new DictionaryEntry(iteratorVariable0.ItemType, new ProjectItemInstance.TaskItem(iteratorVariable0));
  94. }
  95. }
  96. IEnumerator IEnumerable.GetEnumerator()
  97. {
  98. return this.GetEnumerator();
  99. }
  100. }
  101. private class ProjectPropertyInstanceEnumeratorProxy : IEnumerable<DictionaryEntry>, IEnumerable
  102. {
  103. private IEnumerable<ProjectPropertyInstance> backingProperties;
  104. internal ProjectPropertyInstanceEnumeratorProxy(IEnumerable<ProjectPropertyInstance> backingProperties)
  105. {
  106. this.backingProperties = backingProperties;
  107. }
  108. public IEnumerator<DictionaryEntry> GetEnumerator()
  109. {
  110. foreach (ProjectPropertyInstance iteratorVariable0 in this.backingProperties)
  111. {
  112. yield return new DictionaryEntry(iteratorVariable0.Name, iteratorVariable0.EvaluatedValue);
  113. }
  114. }
  115. IEnumerator IEnumerable.GetEnumerator()
  116. {
  117. return this.GetEnumerator();
  118. }
  119. }
  120. }
  121. }