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); }
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); }
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; }
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; }