Exemplo n.º 1
0
        /// <summary>
        /// Command function for evaluate operation. Constructs a query string and makes a call to the API
        /// If successful, it will get a <see cref="EvaluateResponse"/> in response, which will be parsed
        /// and displayed in the UI
        /// </summary>
        /// <param name="obj"></param>
        private async void Evaluate(object obj)
        {
            string queryString = $"expr={QueryExpression}&attributes=Id,Ti,Y,D,CC,AA.AuN";

            //queryString += "&model=latest";
            //queryString += "&count=10";
            //queryString += "&offset=0";5
            //queryString += "&orderby=name:asc";

            EvaluateResponse response = await _webRequest.MakeRequest <object, EvaluateResponse>(HttpMethod.Get, $"evaluate?{queryString}");

            if (response == null || response.entities.Length == 0)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("Expression {0} returned {1} entities\n\n", response.expr, response.entities.Length);

            foreach (Entity entity in response.entities)
            {
                sb.AppendFormat("Paper title: {0}\n\tDate: {1}\n", entity.Ti, entity.D);

                sb.Append("Authors:\n");
                foreach (AA author in entity.AA)
                {
                    sb.AppendFormat("\t{0}\n", author.AuN);
                }

                sb.Append("\n");
            }

            Results = sb.ToString();
        }
        public EvaluateResponse GetEvaluation(DebugVariableLinkCollection collection, IDebugVariable debugVariable)
        {
            // Return null if there is no value.
            if (debugVariable.Value == null)
            {
                return(EvaluateResponse.Empty);
            }

            // Create the evaluation response.
            EvaluateResponse response = new EvaluateResponse(collection, debugVariable);

            // Array
            if (debugVariable.Value is CsvArray array)
            {
                response.indexedVariables   = array.Values.Length;
                response.variablesReference = IDebugVariable.ApplyReference(collection, debugVariable);
            }
            // Vector
            else if (debugVariable.Value is CsvVector)
            {
                response.namedVariables     = 3;
                response.variablesReference = IDebugVariable.ApplyReference(collection, debugVariable);
            }

            return(response);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Called when client wishes to eval some C# code
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public EvaluateResponse Post(EvaluateRequest request)
        {
            //validate request
            new EvaluateRequestValidation()
            .ValidateAndThrow(request);

            EvaluateResponse response = null;

            //carry out the strategy to evaluate code
            new EvaluateRequestStrategy(
                request,
                evaluateResponse =>
            {
                response = evaluateResponse;
            }).Execute();

            //if the response isn't called,
            //something is wrong.
            if (response == null)
            {
                throw new InvalidOperationException(
                          "Response is null"
                          );
            }

            return(response);
        }
Exemplo n.º 4
0
        public VSCodeEvaluationSource(VSCodeDebuggerSession session, string expression, EvaluateResponse response, int frameId)  : base(session, 0, frameId)
        {
            this.expression = expression;
            this.response   = response;

            // FIXME: can we use PresentationHint.Attributes == VariablePresentationHint.AttributesValue.FailedEvaluation instead?
            if (response.Type == null)
            {
                if (IsCSError(118, "is a namespace but is used like a variable", response.Result, out string ns))
                {
                    Flags   = ObjectValueFlags.Namespace;
                    display = name = value = ns;
                    type    = "<namespace>";
                    return;
                }

                if (IsCSError(119, "is a type, which is not valid in the given context", response.Result, out string vtype))
                {
                    if (expression.StartsWith("global::", StringComparison.Ordinal))
                    {
                        vtype = expression.Substring("global::".Length);
                    }

                    display = name = value = ObjectValueAdaptor.GetCSharpTypeName(vtype);
                    Flags   = ObjectValueFlags.Type;
                    type    = "<type>";
                    return;
                }
            }

            var actualType = GetActualTypeName(response.Type);

            Flags = GetFlags(response.PresentationHint);
            type  = actualType.Replace(", ", ",");
            name  = expression;

            if (actualType != "void")
            {
                value = GetFixedValue(response.Result, type, actualType);
            }
            else
            {
                value = "No return value.";
            }
            display = response.Result;

            if (name[0] == '[')
            {
                Flags |= ObjectValueFlags.ArrayElement;
            }

            if (type == null || value == $"'{name}' threw an exception of type '{type}'")
            {
                Flags = ObjectValueFlags.Error;
            }
        }
Exemplo n.º 5
0
        public void GetResultAsString(string caller_trace, Int64 frameId, string expr, out string strRes)
        {
            EvaluateRequest evaluateRequest = new EvaluateRequest();

            evaluateRequest.arguments.expression = expr;
            evaluateRequest.arguments.frameId    = frameId;
            var ret = VSCodeDebugger.Request(evaluateRequest);

            Assert.True(ret.Success, @"__FILE__:__LINE__" + "\n" + caller_trace);
            EvaluateResponse evaluateResponse = JsonConvert.DeserializeObject <EvaluateResponse>(ret.ResponseStr);

            strRes = evaluateResponse.body.result;
        }
Exemplo n.º 6
0
        public static string CalcExpression(Int64?frameId, string Expression)
        {
            EvaluateRequest evaluateRequest = new EvaluateRequest();

            evaluateRequest.arguments.expression = Expression;
            evaluateRequest.arguments.frameId    = frameId;
            var ret = VSCodeDebugger.Request(evaluateRequest);

            Assert.True(ret.Success);

            EvaluateResponse evaluateResponse =
                JsonConvert.DeserializeObject <EvaluateResponse>(ret.ResponseStr);

            return(evaluateResponse.body.result);
        }
Exemplo n.º 7
0
        public void CheckErrorAtRequest(string caller_trace, Int64 frameId, string Expression, string errMsgStart)
        {
            EvaluateRequest evaluateRequest = new EvaluateRequest();

            evaluateRequest.arguments.expression = Expression;
            evaluateRequest.arguments.frameId    = frameId;
            var ret = VSCodeDebugger.Request(evaluateRequest);

            Assert.False(ret.Success, @"__FILE__:__LINE__" + "\n" + caller_trace);

            EvaluateResponse evaluateResponse =
                JsonConvert.DeserializeObject <EvaluateResponse>(ret.ResponseStr);

            Assert.True(evaluateResponse.message.StartsWith(errMsgStart), @"__FILE__:__LINE__" + "\n" + caller_trace);
        }
Exemplo n.º 8
0
        public void CalcAndCheckExpression(string caller_trace, Int64?frameId, string ExpectedResult, string Expression)
        {
            EvaluateRequest evaluateRequest = new EvaluateRequest();

            evaluateRequest.arguments.expression = Expression;
            evaluateRequest.arguments.frameId    = frameId;
            var ret = VSCodeDebugger.Request(evaluateRequest);

            Assert.True(ret.Success, @"__FILE__:__LINE__" + "\n" + caller_trace);

            EvaluateResponse evaluateResponse =
                JsonConvert.DeserializeObject <EvaluateResponse>(ret.ResponseStr);

            Assert.Equal(ExpectedResult, evaluateResponse.body.result, @"__FILE__:__LINE__" + "\n" + caller_trace);
        }
        public EvaluateResponse GetEvaluation(DebugVariableLinkCollection collection, IDebugVariable debugVariable)
        {
            // Return null if there is no value.
            if (debugVariable.Value == null)
            {
                return(EvaluateResponse.Empty);
            }

            // Create the evaluation response.
            IDebugVariable.ApplyReference(collection, debugVariable);
            EvaluateResponse response = new EvaluateResponse(collection, debugVariable);

            response.namedVariables = Class.ObjectVariables.Count;

            return(response);
        }
Exemplo n.º 10
0
        protected override void HandleEvaluateRequestAsync(IRequestResponder <EvaluateArguments, EvaluateResponse> responder)
        {
            EvaluateResponse evalResponse = null;

            if (responder.Arguments.Expression.StartsWith(VARIABLE_EVAL_TYPE, StringComparison.Ordinal))
            {
                var id = int.Parse(responder.Arguments.Expression.Substring(VARIABLE_EVAL_TYPE.Length), CultureInfo.InvariantCulture);
                if (_variableEvaluationValues.TryGetValue(id, out var evalResult))
                {
                    evalResponse = new EvaluateResponse {
                        Result = evalResult
                    };
                }
            }

            responder.SetResponse(evalResponse ?? new EvaluateResponse());
        }
        internal SetExpressionResponse HandleSetExpressionRequest(SetExpressionArguments arguments)
        {
            EvaluateResponse response = this.Evaluate(arguments.Expression, arguments.Value, arguments.Format);

            return(new SetExpressionResponse(value: response.Result));
        }