private async Task <bool> TryInitializeAsync(
                SyntaxNode node, CancellationToken cancellationToken)
            {
                if (_service.IsConstructorInitializerGeneration(_document, node, cancellationToken))
                {
                    if (!await TryInitializeConstructorInitializerGenerationAsync(node, cancellationToken).ConfigureAwait(false))
                    {
                        return(false);
                    }
                }
                else if (_service.IsSimpleNameGeneration(_document, node, cancellationToken))
                {
                    if (!await TryInitializeSimpleNameGenerationAsync(node, cancellationToken).ConfigureAwait(false))
                    {
                        return(false);
                    }
                }
                else if (_service.IsImplicitObjectCreation(_document, node, cancellationToken))
                {
                    if (!await TryInitializeImplicitObjectCreationAsync(node, cancellationToken).ConfigureAwait(false))
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }

                Contract.ThrowIfNull(TypeToGenerateIn);
                if (!CodeGenerator.CanAdd(_document.Project.Solution, TypeToGenerateIn, cancellationToken))
                {
                    return(false);
                }

                ParameterTypes     = ParameterTypes.IsDefault ? GetParameterTypes(cancellationToken) : ParameterTypes;
                _parameterRefKinds = _arguments.SelectAsArray(a => a.RefKind);

                if (ClashesWithExistingConstructor())
                {
                    return(false);
                }

                if (!TryInitializeDelegatedConstructor(cancellationToken))
                {
                    InitializeNonDelegatedConstructor(cancellationToken);
                }

                IsContainedInUnsafeType = _service.ContainingTypesOrSelfHasUnsafeKeyword(TypeToGenerateIn);

                return(true);
            }