private async Task <string> GetComponentNamesMessageAsync(ITargetScopeService target) { IEnumerable <Envoy> targetEnvoys = target.GetDefaultBuildSpecScope().Envoy.Envoys; IList <string> componentNames = new List <string>(); foreach (Envoy targetEnvoy in targetEnvoys) { if (await IsComponentForDisplayAsync(targetEnvoy)) { componentNames.Add('\t' + targetEnvoy.Name.Last); } } return(string.Join(Environment.NewLine, componentNames)); }
private async Task <Envoy> ResolveComponentOnTargetAsync(string componentName, ITargetScopeService targetScope) { ITargetScopeService targetbuildBuildSpecScope = targetScope.GetDefaultBuildSpecScope(); IEnumerable <Envoy> matchingComponents = await targetbuildBuildSpecScope.TargetScope.ResolveAsync(new QualifiedName(componentName)); if (matchingComponents.HasMoreThan(1)) { throw new CommandLineOperationException("Multiple components matching the provided name were found. This likely indicates a corrupt project file."); } Envoy componentEnvoy = matchingComponents.SingleOrDefault(); if (componentEnvoy == null) { CommandLineInterfaceApplication.WriteError(await CreateResolveComponentErrorMessageAsync(componentName, targetScope.GetScopeDisplayName(), targetScope)); } return(componentEnvoy); }
private async Task <string> GetTargetNamesForProvidedComponentNameAsync(Project project) { IEnumerable <ITargetScopeService> targets = project.GetTargets(GetTargetsOptions.ExcludeNonUserManaged); var targetNames = new List <string>(); foreach (var target in targets) { ITargetScopeService targetbuildBuildSpecScope = target.GetDefaultBuildSpecScope(); IEnumerable <Envoy> matchingComponents = await targetbuildBuildSpecScope.TargetScope.ResolveAsync(new QualifiedName(ComponentName)); if (matchingComponents.HasExactly(1)) { targetNames.Add('\t' + target.GetScopeDisplayName()); } else if (matchingComponents.HasMoreThan(1)) { throw new CommandLineOperationException("Multiple components matching the provided name were found. This likely indicates a corrupt project file."); } } return(string.Join(Environment.NewLine, targetNames)); }
private async Task AppendAvailableComponentsForProvidedTargetNameErrorMessageAsync(StringBuilder errorMessageBuilder, ITargetScopeService targetScopeService) { string validComponentNamesHeader = string.Format(CultureInfo.CurrentCulture, LocalizedStrings.BuildComponentTool_ValidComponentNamesHeader, ComponentType.GetComponentDisplayName()); string validComponentNamesMessage = await GetComponentNamesMessageAsync(targetScopeService); if (!string.IsNullOrEmpty(validComponentNamesMessage)) { errorMessageBuilder.AppendLine() .AppendLine(validComponentNamesHeader) .AppendLine(validComponentNamesMessage); } }
private async Task <string> CreateResolveComponentErrorMessageAsync(string componentName, string targetName, ITargetScopeService targetScopeService) { var errorMessageBuilder = new StringBuilder( string.Format( CultureInfo.CurrentCulture, LocalizedStrings.BuildComponentTool_InvalidComponentName, componentName, targetName)); if (!await AppendAvailableTargetsForProvidedComponentNameErrorMessageAsync(targetScopeService.TargetScope.GetProject(), errorMessageBuilder)) { await AppendAvailableComponentsForProvidedTargetNameErrorMessageAsync(errorMessageBuilder, targetScopeService); } return(errorMessageBuilder.ToString()); }