File: Instance\ProjectTaskOutputItemInstance.cs
Web Access
Project: ..\..\..\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 Microsoft.Build.BackEnd;
using Microsoft.Build.Construction;
using Microsoft.Build.Shared;
 
#nullable disable
 
namespace Microsoft.Build.Execution
{
    /// <summary>
    /// Wraps an output item element under a task element
    /// </summary>
    /// <remarks>
    /// Immutable.
    /// </remarks>
    public sealed class ProjectTaskOutputItemInstance : ProjectTaskInstanceChild, ITranslatable
    {
        /// <summary>
        /// Name of the property to put the output in
        /// </summary>
        private string _itemType;
 
        /// <summary>
        /// Property on the task class to retrieve the output from
        /// </summary>
        private string _taskParameter;
 
        /// <summary>
        /// Condition on the output element
        /// </summary>
        private string _condition;
 
        /// <summary>
        /// Location of the original element
        /// </summary>
        private ElementLocation _location;
 
        /// <summary>
        /// Location of the original item type attribute
        /// </summary>
        private ElementLocation _itemTypeLocation;
 
        /// <summary>
        /// Location of the original task parameter attribute
        /// </summary>
        private ElementLocation _taskParameterLocation;
 
        /// <summary>
        /// Location of the original condition attribute
        /// </summary>
        private ElementLocation _conditionLocation;
 
        /// <summary>
        /// Constructor called by evaluator
        /// </summary>
        internal ProjectTaskOutputItemInstance(string itemType, string taskParameter, string condition, ElementLocation location, ElementLocation itemTypeLocation, ElementLocation taskParameterLocation, ElementLocation conditionLocation)
        {
            ErrorUtilities.VerifyThrowInternalLength(itemType, nameof(itemType));
            ErrorUtilities.VerifyThrowInternalLength(taskParameter, nameof(taskParameter));
            ErrorUtilities.VerifyThrowInternalNull(location);
            ErrorUtilities.VerifyThrowInternalNull(itemTypeLocation);
            ErrorUtilities.VerifyThrowInternalNull(taskParameterLocation);
 
            _itemType = itemType;
            _taskParameter = taskParameter;
            _condition = condition;
            _location = location;
            _itemTypeLocation = itemTypeLocation;
            _taskParameterLocation = taskParameterLocation;
            _conditionLocation = conditionLocation;
        }
 
        private ProjectTaskOutputItemInstance()
        {
        }
 
        /// <summary>
        /// Name of the item type that the outputs go into
        /// </summary>
        public string ItemType
        {
            get { return _itemType; }
        }
 
        /// <summary>
        /// Property on the task class to retrieve the outputs from
        /// </summary>
        public string TaskParameter
        {
            get { return _taskParameter; }
        }
 
        /// <summary>
        /// Condition on the element.
        /// If there is no condition, returns empty string.
        /// </summary>
        public override string Condition
        {
            get { return _condition; }
        }
 
        /// <summary>
        /// Location of the original element
        /// </summary>
        public override ElementLocation Location
        {
            get { return _location; }
        }
 
        /// <summary>
        /// Location of the condition, if any
        /// </summary>
        public override ElementLocation ConditionLocation
        {
            get { return _conditionLocation; }
        }
 
        /// <summary>
        /// Location of the TaskParameter attribute
        /// </summary>
        public override ElementLocation TaskParameterLocation
        {
            get { return _taskParameterLocation; }
        }
 
        /// <summary>
        /// Location of the ItemType attribute
        /// </summary>
        public ElementLocation ItemTypeLocation
        {
            get { return _itemTypeLocation; }
        }
 
        void ITranslatable.Translate(ITranslator translator)
        {
            if (translator.Mode == TranslationDirection.WriteToStream)
            {
                var typeName = this.GetType().FullName;
                translator.Translate(ref typeName);
            }
 
            translator.Translate(ref _itemType);
            translator.Translate(ref _taskParameter);
            translator.Translate(ref _condition);
            translator.Translate(ref _location, ElementLocation.FactoryForDeserialization);
            translator.Translate(ref _conditionLocation, ElementLocation.FactoryForDeserialization);
            translator.Translate(ref _itemTypeLocation, ElementLocation.FactoryForDeserialization);
            translator.Translate(ref _taskParameterLocation, ElementLocation.FactoryForDeserialization);
        }
    }
}