public IncludeOperation(IncludeOperationBuilder builder, LazyItemEvaluator <P, I, M, D> lazyEvaluator) : base(builder, lazyEvaluator) { _elementOrder = builder.ElementOrder; _rootDirectory = builder.RootDirectory; _excludes = builder.Excludes.ToImmutable(); _metadata = builder.Metadata.ToImmutable(); }
private void AddItemReferences(string expression, IncludeOperationBuilder operationBuilder, IElementLocation elementLocation) { if (expression.Length == 0) { return; } else { ExpressionShredder.ItemExpressionCapture match = Expander <P, I> .ExpandSingleItemVectorExpressionIntoExpressionCapture( expression, ExpanderOptions.ExpandItems, elementLocation); if (match == null) { return; } AddReferencedItemLists(operationBuilder, match); } }
IncludeOperation BuildIncludeOperation(string rootDirectory, ProjectItemElement itemElement, bool conditionResult) { IncludeOperationBuilder operationBuilder = new IncludeOperationBuilder(itemElement); operationBuilder.ElementOrder = _nextElementOrder++; operationBuilder.RootDirectory = rootDirectory; operationBuilder.ConditionResult = conditionResult; // Process include ProcessItemSpec(operationBuilder, itemElement.Include, itemElement.IncludeLocation); // Code corresponds to Evaluator.EvaluateItemElement // Process exclude (STEP 4: Evaluate, split, expand and subtract any Exclude) if (itemElement.Exclude.Length > 0) { // Expand properties here, because a property may have a value which is an item reference (ie "@(Bar)"), and // if so we need to add the right item reference string evaluatedExclude = _expander.ExpandIntoStringLeaveEscaped(itemElement.Exclude, ExpanderOptions.ExpandProperties, itemElement.ExcludeLocation); if (evaluatedExclude.Length > 0) { IList <string> excludeSplits = ExpressionShredder.SplitSemiColonSeparatedList(evaluatedExclude); operationBuilder.Excludes.AddRange(excludeSplits); foreach (var excludeSplit in excludeSplits) { AddItemReferences(excludeSplit, operationBuilder, itemElement.ExcludeLocation); } } } // Process Metadata (STEP 5: Evaluate each metadata XML and apply them to each item we have so far) ProcessMetadataElements(itemElement, operationBuilder); return(new IncludeOperation(operationBuilder, this)); }