public async Task <OperationStatus <SemanticDocument> > ApplyAsync(GeneratedCode generatedCode, CancellationToken cancellationToken)
            {
                var document = generatedCode.SemanticDocument;
                var root     = document.Root;

                var callsiteAnnotation         = generatedCode.CallSiteAnnotation;
                var methodDefinitionAnnotation = generatedCode.MethodDefinitionAnnotation;

                var callsite = root.GetAnnotatedNodesAndTokens(callsiteAnnotation).SingleOrDefault().AsNode();
                var method   = root.GetAnnotatedNodesAndTokens(methodDefinitionAnnotation).SingleOrDefault().AsNode();

                var annotationResolver = GetAnnotationResolver(callsite, method);
                var triviaResolver     = GetTriviaResolver(method);

                if (annotationResolver == null || triviaResolver == null)
                {
                    // bug # 6644
                    // this could happen in malformed code. return as it was.
                    var status = new OperationStatus(OperationStatusFlag.None, FeaturesResources.can_t_not_construct_final_tree);
                    return(status.With(document));
                }

                return(OperationStatus.Succeeded.With(
                           await document.WithSyntaxRootAsync(_result.RestoreTrivia(root, annotationResolver, triviaResolver), cancellationToken).ConfigureAwait(false)));
            }
Exemplo n.º 2
0
        private async Task <Tuple <bool, OperationStatus> > TryCheckVariableTypeAsync(
            SemanticDocument document, SyntaxNode contextNode, IEnumerable <VariableInfo> variables,
            OperationStatus status, CancellationToken cancellationToken)
        {
            if (status.FailedWithNoBestEffortSuggestion())
            {
                return(Tuple.Create(false, status));
            }

            var location = contextNode.GetLocation();

            foreach (var variable in variables)
            {
                var originalType = variable.GetVariableType(document);
                var result       = await CheckTypeAsync(document.Document, contextNode, location, originalType, cancellationToken).ConfigureAwait(false);

                if (result.FailedWithNoBestEffortSuggestion())
                {
                    status = status.With(result);
                    return(Tuple.Create(false, status));
                }
            }

            return(Tuple.Create(true, status));
        }