private async Task <bool> TryInitializeAsync(
                AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
                Document document,
                TextSpan textSpan,
                INamedTypeSymbol containingType,
                Accessibility?desiredAccessibility,
                ImmutableArray <ISymbol> selectedMembers,
                CancellationToken cancellationToken)
            {
                if (!selectedMembers.All(IsWritableInstanceFieldOrProperty))
                {
                    return(false);
                }

                SelectedMembers = selectedMembers;
                ContainingType  = containingType;
                Accessibility   = desiredAccessibility ?? (ContainingType.IsAbstractClass() ? Accessibility.Protected : Accessibility.Public);
                TextSpan        = textSpan;
                if (ContainingType == null || ContainingType.TypeKind == TypeKind.Interface)
                {
                    return(false);
                }

                IsContainedInUnsafeType = service.ContainingTypesOrSelfHasUnsafeKeyword(containingType);

                var rules = await document.GetNamingRulesAsync(cancellationToken).ConfigureAwait(false);

                Parameters          = DetermineParameters(selectedMembers, rules);
                MatchingConstructor = GetMatchingConstructorBasedOnParameterTypes(ContainingType, Parameters);
                // We are going to create a new contructor and pass part of the parameters into DelegatedConstructor,
                // so parameters should be compared based on types since we don't want get a type mismatch error after the new constructor is genreated.
                DelegatedConstructor = GetDelegatedConstructorBasedOnParameterTypes(ContainingType, Parameters);
                return(true);
            }
Esempio n. 2
0
            private async Task <bool> TryInitializeAsync(
                AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
                Document document,
                TextSpan textSpan,
                INamedTypeSymbol containingType,
                ImmutableArray <ISymbol> selectedMembers,
                CancellationToken cancellationToken)
            {
                if (!selectedMembers.All(IsWritableInstanceFieldOrProperty))
                {
                    return(false);
                }

                SelectedMembers = selectedMembers;
                ContainingType  = containingType;
                TextSpan        = textSpan;
                if (ContainingType == null || ContainingType.TypeKind == TypeKind.Interface)
                {
                    return(false);
                }

                var rules = await document.GetNamingRulesAsync(FallbackNamingRules.RefactoringMatchLookupRules, cancellationToken).ConfigureAwait(false);

                Parameters          = service.DetermineParameters(selectedMembers, rules);
                MatchingConstructor = GetMatchingConstructorBasedOnParameterTypes(ContainingType, Parameters);
                // We are going to create a new contructor and pass part of the parameters into DelegatedConstructor,
                // so parameters should be compared based on types since we don't want get a type mismatch error after the new constructor is genreated.
                DelegatedConstructor = GetDelegatedConstructorBasedOnParameterTypes(ContainingType, Parameters);
                return(true);
            }
            public static async Task <State> TryGenerateAsync(
                AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
                Document document,
                TextSpan textSpan,
                INamedTypeSymbol containingType,
                ImmutableArray <ISymbol> selectedMembers,
                CancellationToken cancellationToken
                )
            {
                var state = new State();

                if (
                    !await state
                    .TryInitializeAsync(
                        service,
                        document,
                        textSpan,
                        containingType,
                        selectedMembers,
                        cancellationToken
                        )
                    .ConfigureAwait(false)
                    )
                {
                    return(null);
                }

                return(state);
            }
Esempio n. 4
0
 public FieldDelegatingCodeAction(
     AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
     Document document,
     State state,
     bool addNullChecks)
 {
     _service       = service;
     _document      = document;
     _state         = state;
     _addNullChecks = addNullChecks;
 }
 public ConstructorDelegatingCodeAction(
     AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
     Document document,
     State state,
     bool addNullChecks,
     CleanCodeGenerationOptionsProvider fallbackOptions)
 {
     _service         = service;
     _document        = document;
     _state           = state;
     _addNullChecks   = addNullChecks;
     _fallbackOptions = fallbackOptions;
 }
 public GenerateConstructorWithDialogCodeAction(
     AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
     Document document, TextSpan textSpan,
     INamedTypeSymbol containingType,
     ImmutableArray <ISymbol> viableMembers,
     ImmutableArray <PickMembersOption> pickMembersOptions)
 {
     _service            = service;
     _document           = document;
     _textSpan           = textSpan;
     _containingType     = containingType;
     _viableMembers      = viableMembers;
     _pickMembersOptions = pickMembersOptions;
 }
Esempio n. 7
0
 public GenerateConstructorWithDialogCodeAction(
     AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
     Document document,
     TextSpan textSpan,
     INamedTypeSymbol containingType,
     Accessibility?desiredAccessibility,
     ImmutableArray <ISymbol> viableMembers,
     ImmutableArray <PickMembersOption> pickMembersOptions,
     CodeAndImportGenerationOptionsProvider fallbackOptions)
 {
     _service              = service;
     _document             = document;
     _textSpan             = textSpan;
     _containingType       = containingType;
     _desiredAccessibility = desiredAccessibility;
     ViableMembers         = viableMembers;
     PickMembersOptions    = pickMembersOptions;
     _fallbackOptions      = fallbackOptions;
 }