示例#1
0
        /// <summary>
        /// Returns the set of output files or directories that match the filter.
        /// </summary>
        /// <remarks>
        /// NOTE: ALL FILTER OPERATION MUST BE IDEMPOTENT BECAUSE THE RESULTS ARE CACHED.
        /// </remarks>
        public IReadOnlySet <FileOrDirectoryArtifact> FilterOutputs(
            IPipFilterContext context,
            bool negate = false,
            IList <PipId> constrainingPips = null)
        {
            if (negate || constrainingPips != null)
            {
                return(FilterOutputsCore(context, negate, constrainingPips));
            }

            if (context.TryGetCachedOutputs(this, out IReadOnlySet <FileOrDirectoryArtifact> result))
            {
                return(result);
            }

            result = FilterOutputsCore(context);
            context.CacheOutputs(this, result);

            return(result);
        }