示例#1
0
        public Message Process(Message request)
        {
            var newStep = request.RefactorRequest.NewStepValue;

            var newStepValue       = newStep.ParameterizedStepValue;
            var parameterPositions = request.RefactorRequest.ParamPositions.Select(position => new Tuple <int, int>(position.OldPosition, position.NewPosition)).ToList();

            var response = new RefactorResponse();

            try
            {
                var gaugeMethod  = GetGaugeMethod(request.RefactorRequest.OldStepValue);
                var filesChanged = _sandbox.Refactor(gaugeMethod, parameterPositions, newStep.Parameters.ToList(), newStepValue);
                response.Success = true;
                response.FilesChanged.Add(filesChanged.First());
            }
            catch (AggregateException ex)
            {
                response.Success = false;
                response.Error   = ex.InnerExceptions.Select(exception => exception.Message).Distinct().Aggregate((s, s1) => string.Concat(s, "; ", s1));
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Error   = ex.Message;
            }


            return(new Message()
            {
                MessageId = request.MessageId,
                MessageType = Message.Types.MessageType.RefactorResponse,
                RefactorResponse = response,
            });
        }
        public Message Process(Message request)
        {
            var newStep = request.RefactorRequest.NewStepValue;

            var newStepValue       = newStep.ParameterizedStepValue;
            var parameterPositions = request.RefactorRequest.ParamPositions
                                     .Select(position => new Tuple <int, int>(position.OldPosition, position.NewPosition)).ToList();

            var response = new RefactorResponse();

            try
            {
                var gaugeMethod = GetGaugeMethod(request.RefactorRequest.OldStepValue);
                if (gaugeMethod.HasAlias)
                {
                    throw new Exception("Steps with aliases can not be refactored.");
                }

                var fileChanges = RefactorHelper.Refactor(gaugeMethod, parameterPositions, newStep.Parameters.ToList(),
                                                          newStepValue);

                if (request.RefactorRequest.SaveChanges)
                {
                    File.WriteAllText(fileChanges.FileName, fileChanges.FileContent);
                }

                response.Success = true;
                response.FilesChanged.Add(gaugeMethod.FileName);
                response.FileChanges.Add(ConvertToProtoFileChanges(fileChanges));
            }
            catch (AggregateException ex)
            {
                response.Success = false;
                response.Error   = ex.InnerExceptions.Select(exception => exception.Message).Distinct()
                                   .Aggregate((s, s1) => string.Concat(s, "; ", s1));
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Error   = ex.Message;
            }


            return(new Message
            {
                MessageId = request.MessageId,
                MessageType = Message.Types.MessageType.RefactorResponse,
                RefactorResponse = response
            });
        }
示例#3
0
        public Message Process(Message request)
        {
            var oldStepValue = request.RefactorRequest.OldStepValue.StepValue;
            var newStep      = request.RefactorRequest.NewStepValue;

            var newStepValue       = newStep.ParameterizedStepValue;
            var parameterPositions = request.RefactorRequest.ParamPositionsList;

            var methodInfo = _stepRegistry.MethodFor(oldStepValue);

            var refactorResponseBuilder = RefactorResponse.CreateBuilder();

            try
            {
                var filesChanged = RefactorHelper.Refactor(methodInfo, parameterPositions, newStep.ParametersList, newStepValue);
                refactorResponseBuilder.SetSuccess(true).AddFilesChanged(filesChanged.First());
            }
            catch (AggregateException ex)
            {
                refactorResponseBuilder.SetSuccess(false)
                .SetError(ex.InnerExceptions.Select(exception => ex.Message).Aggregate((s, s1) => string.Concat(s, "; ", s1)));
            }
            catch (Exception ex)
            {
                refactorResponseBuilder.SetSuccess(false)
                .SetError(ex.Message);
            }

            var refactorResponse = refactorResponseBuilder.Build();

            return(Message.CreateBuilder()
                   .SetMessageId(request.MessageId)
                   .SetMessageType(Message.Types.MessageType.RefactorResponse)
                   .SetRefactorResponse(refactorResponse)
                   .Build());
        }