Esempio n. 1
0
        public MoveStaticMembersDialogViewModel(
            StaticMemberSelectionViewModel memberSelectionViewModel,
            string defaultType,
            ImmutableArray <string> existingNames,
            string prependedNamespace,
            ISyntaxFacts syntaxFacts)
        {
            MemberSelectionViewModel = memberSelectionViewModel;
            _syntaxFacts             = syntaxFacts ?? throw new ArgumentNullException(nameof(syntaxFacts));
            _destinationName         = defaultType;
            _existingNames           = existingNames;
            PrependedNamespace       = string.IsNullOrEmpty(prependedNamespace) ? prependedNamespace : prependedNamespace + ".";

            PropertyChanged += MoveMembersToTypeDialogViewModel_PropertyChanged;
            OnDestinationUpdated();
        }
        // internal for testing purposes, get the view model
        internal static MoveStaticMembersDialogViewModel GetViewModel(
            Document document,
            INamedTypeSymbol selectedType,
            ISymbol?selectedNodeSymbol,
            IGlyphService?glyphService,
            IUIThreadOperationExecutor uiThreadOperationExecutor)
        {
            var membersInType = selectedType.GetMembers().
                                WhereAsArray(member => MemberAndDestinationValidator.IsMemberValid(member) && member.IsStatic);

            var memberViewModels = membersInType
                                   .SelectAsArray(member =>
                                                  new SymbolViewModel <ISymbol>(member, glyphService)
            {
                // The member user selected will be checked at the beginning.
                IsChecked = SymbolEquivalenceComparer.Instance.Equals(selectedNodeSymbol, member),
            });

            using var cancellationTokenSource = new CancellationTokenSource();
            var memberToDependentsMap = SymbolDependentsBuilder.FindMemberToDependentsMap(membersInType, document.Project, cancellationTokenSource.Token);

            var existingTypeNames = selectedType.ContainingNamespace.GetAllTypes(cancellationTokenSource.Token).SelectAsArray(t => t.ToDisplayString());
            var candidateName     = selectedType.Name + "Helpers";
            var defaultTypeName   = NameGenerator.GenerateUniqueName(candidateName, name => !existingTypeNames.Contains(name));

            var containingNamespaceDisplay = selectedType.ContainingNamespace.IsGlobalNamespace
                ? string.Empty
                : selectedType.ContainingNamespace.ToDisplayString();

            var selectMembersViewModel = new StaticMemberSelectionViewModel(
                uiThreadOperationExecutor,
                memberViewModels,
                memberToDependentsMap);

            return(new MoveStaticMembersDialogViewModel(selectMembersViewModel,
                                                        defaultTypeName,
                                                        existingTypeNames,
                                                        containingNamespaceDisplay,
                                                        document.GetRequiredLanguageService <ISyntaxFactsService>()));
        }
 internal StaticMemberSelection(StaticMemberSelectionViewModel viewModel)
 {
     ViewModel   = viewModel;
     DataContext = ViewModel;
     InitializeComponent();
 }