| File: Instance\ProjectPropertyGroupTaskInstance.cs | Web Access |
| Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Diagnostics; using Microsoft.Build.BackEnd; using Microsoft.Build.Collections; using Microsoft.Build.Construction; #nullable disable namespace Microsoft.Build.Execution { /// <summary> /// Wraps an unevaluated propertygroup under a target. /// Immutable. /// </summary> [DebuggerDisplay("Condition={_condition}")] public class ProjectPropertyGroupTaskInstance : ProjectTargetInstanceChild, ITranslatable { /// <summary> /// Condition, if any /// </summary> private string _condition; /// <summary> /// Child properties. /// Not ProjectPropertyInstances, as these are evaluated during the build. /// </summary> private List<ProjectPropertyGroupTaskPropertyInstance> _properties; /// <summary> /// Location of this element /// </summary> private ElementLocation _location; /// <summary> /// Location of the condition, if any /// </summary> private ElementLocation _conditionLocation; /// <summary> /// Constructor called by the Evaluator. /// Assumes ProjectPropertyGroupTaskPropertyInstance is an immutable type. /// </summary> internal ProjectPropertyGroupTaskInstance( string condition, ElementLocation location, ElementLocation conditionLocation, List<ProjectPropertyGroupTaskPropertyInstance> properties) { Assumed.NotNull(condition); Assumed.NotNull(location); Assumed.NotNull(properties); _condition = condition; _location = location; _conditionLocation = conditionLocation; _properties = properties; } private ProjectPropertyGroupTaskInstance() { } /// <summary> /// Cloning constructor /// </summary> private ProjectPropertyGroupTaskInstance(ProjectPropertyGroupTaskInstance that) { // All members are immutable _condition = that._condition; _properties = that._properties; } /// <summary> /// Condition, if any. /// May be empty string. /// </summary> public override string Condition { [DebuggerStepThrough] get { return _condition; } } /// <summary> /// Child properties /// </summary> public ICollection<ProjectPropertyGroupTaskPropertyInstance> Properties { [DebuggerStepThrough] get { return (_properties == null) ? (ICollection<ProjectPropertyGroupTaskPropertyInstance>)ReadOnlyEmptyCollection<ProjectPropertyGroupTaskPropertyInstance>.Instance : new ReadOnlyCollection<ProjectPropertyGroupTaskPropertyInstance>(_properties); } } /// <summary> /// Location of the element itself /// </summary> public override ElementLocation Location { get { return _location; } } /// <summary> /// Location of the condition, if any /// </summary> public override ElementLocation ConditionLocation { get { return _conditionLocation; } } /// <summary> /// Deep clone /// </summary> internal ProjectPropertyGroupTaskInstance DeepClone() { return new ProjectPropertyGroupTaskInstance(this); } void ITranslatable.Translate(ITranslator translator) { if (translator.Mode == TranslationDirection.WriteToStream) { var typeName = this.GetType().FullName; translator.Translate(ref typeName); } translator.Translate(ref _condition); translator.Translate(ref _properties, ProjectPropertyGroupTaskPropertyInstance.FactoryForDeserialization); translator.Translate(ref _location, ElementLocation.FactoryForDeserialization); translator.Translate(ref _conditionLocation, ElementLocation.FactoryForDeserialization); } } }