OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library protocol; | 5 library protocol; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 | 9 |
10 part 'generated_protocol.dart'; | 10 part 'generated_protocol.dart'; |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 /** | 506 /** |
507 * Initialize a newly created [Request] to have the given [id] and [method] | 507 * Initialize a newly created [Request] to have the given [id] and [method] |
508 * name. If [params] is supplied, it is used as the "params" map for the | 508 * name. If [params] is supplied, it is used as the "params" map for the |
509 * request. Otherwise an empty "params" map is allocated. | 509 * request. Otherwise an empty "params" map is allocated. |
510 */ | 510 */ |
511 Request(this.id, this.method, | 511 Request(this.id, this.method, |
512 [Map<String, Object> params, this.clientRequestTime]) | 512 [Map<String, Object> params, this.clientRequestTime]) |
513 : _params = params != null ? params : new HashMap<String, Object>(); | 513 : _params = params != null ? params : new HashMap<String, Object>(); |
514 | 514 |
515 /** | 515 /** |
516 * Return a request parsed from the given [data], or `null` if the [data] is | 516 * Return a request parsed from the given json, or `null` if the [data] is |
517 * not a valid json representation of a request. The [data] is expected to | 517 * not a valid json representation of a request. The [data] is expected to |
518 * have the following format: | 518 * have the following format: |
519 * | 519 * |
520 * { | 520 * { |
521 * 'clientRequestTime': millisecondsSinceEpoch | 521 * 'clientRequestTime': millisecondsSinceEpoch |
522 * 'id': String, | 522 * 'id': String, |
523 * 'method': methodName, | 523 * 'method': methodName, |
524 * 'params': { | 524 * 'params': { |
525 * paramter_name: value | 525 * paramter_name: value |
526 * } | 526 * } |
527 * } | 527 * } |
528 * | 528 * |
529 * where both the parameters and clientRequestTime are optional. | 529 * where both the parameters and clientRequestTime are optional. |
530 * The parameters can contain any number of name/value pairs. | 530 * The parameters can contain any number of name/value pairs. |
531 * The clientRequestTime must be an int representing the time at which | 531 * The clientRequestTime must be an int representing the time at which |
532 * the client issued the request (milliseconds since epoch). | 532 * the client issued the request (milliseconds since epoch). |
533 */ | 533 */ |
534 factory Request.fromString(String data) { | 534 factory Request.fromJson(Map<String, dynamic> result) { |
535 try { | 535 var id = result[Request.ID]; |
536 var result = JSON.decode(data); | 536 var method = result[Request.METHOD]; |
537 if (result is Map) { | 537 if (id is! String || method is! String) { |
538 return new Request.fromJson(result); | |
539 } | |
540 return null; | 538 return null; |
541 } catch (exception) { | 539 } |
| 540 var time = result[Request.CLIENT_REQUEST_TIME]; |
| 541 if (time != null && time is! int) { |
| 542 return null; |
| 543 } |
| 544 var params = result[Request.PARAMS]; |
| 545 if (params is Map || params == null) { |
| 546 return new Request(id, method, params, time); |
| 547 } else { |
542 return null; | 548 return null; |
543 } | 549 } |
544 } | 550 } |
545 | 551 |
546 /** | 552 /** |
547 * Return a request parsed from the given json, or `null` if the [data] is | 553 * Return a request parsed from the given [data], or `null` if the [data] is |
548 * not a valid json representation of a request. The [data] is expected to | 554 * not a valid json representation of a request. The [data] is expected to |
549 * have the following format: | 555 * have the following format: |
550 * | 556 * |
551 * { | 557 * { |
552 * 'clientRequestTime': millisecondsSinceEpoch | 558 * 'clientRequestTime': millisecondsSinceEpoch |
553 * 'id': String, | 559 * 'id': String, |
554 * 'method': methodName, | 560 * 'method': methodName, |
555 * 'params': { | 561 * 'params': { |
556 * paramter_name: value | 562 * paramter_name: value |
557 * } | 563 * } |
558 * } | 564 * } |
559 * | 565 * |
560 * where both the parameters and clientRequestTime are optional. | 566 * where both the parameters and clientRequestTime are optional. |
561 * The parameters can contain any number of name/value pairs. | 567 * The parameters can contain any number of name/value pairs. |
562 * The clientRequestTime must be an int representing the time at which | 568 * The clientRequestTime must be an int representing the time at which |
563 * the client issued the request (milliseconds since epoch). | 569 * the client issued the request (milliseconds since epoch). |
564 */ | 570 */ |
565 factory Request.fromJson(Map<String, dynamic> result) { | 571 factory Request.fromString(String data) { |
566 var id = result[Request.ID]; | 572 try { |
567 var method = result[Request.METHOD]; | 573 var result = JSON.decode(data); |
568 if (id is! String || method is! String) { | 574 if (result is Map) { |
| 575 return new Request.fromJson(result); |
| 576 } |
569 return null; | 577 return null; |
570 } | 578 } catch (exception) { |
571 var time = result[Request.CLIENT_REQUEST_TIME]; | |
572 if (time != null && time is! int) { | |
573 return null; | |
574 } | |
575 var params = result[Request.PARAMS]; | |
576 if (params is Map || params == null) { | |
577 return new Request(id, method, params, time); | |
578 } else { | |
579 return null; | 579 return null; |
580 } | 580 } |
581 } | 581 } |
582 | 582 |
583 /** | 583 /** |
584 * Return a table representing the structure of the Json object that will be | 584 * Return a table representing the structure of the Json object that will be |
585 * sent to the client to represent this response. | 585 * sent to the client to represent this response. |
586 */ | 586 */ |
587 Map<String, Object> toJson() { | 587 Map<String, Object> toJson() { |
588 Map<String, Object> jsonObject = new HashMap<String, Object>(); | 588 Map<String, Object> jsonObject = new HashMap<String, Object>(); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 | 756 |
757 /** | 757 /** |
758 * Initialize a newly created instance to represent the | 758 * Initialize a newly created instance to represent the |
759 * GET_ERRORS_INVALID_FILE error condition. | 759 * GET_ERRORS_INVALID_FILE error condition. |
760 */ | 760 */ |
761 Response.getErrorsInvalidFile(Request request) : this(request.id, | 761 Response.getErrorsInvalidFile(Request request) : this(request.id, |
762 error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_FILE, | 762 error: new RequestError(RequestErrorCode.GET_ERRORS_INVALID_FILE, |
763 'Error during `analysis.getErrors`: invalid file.')); | 763 'Error during `analysis.getErrors`: invalid file.')); |
764 | 764 |
765 /** | 765 /** |
| 766 * Initialize a newly created instance to represent the |
| 767 * GET_NAVIGATION_INVALID_FILE error condition. |
| 768 */ |
| 769 Response.getNavigationInvalidFile(Request request) : this(request.id, |
| 770 error: new RequestError(RequestErrorCode.GET_NAVIGATION_INVALID_FILE, |
| 771 'Error during `analysis.getNavigation`: invalid file.')); |
| 772 |
| 773 /** |
766 * Initialize a newly created instance to represent an error condition caused | 774 * Initialize a newly created instance to represent an error condition caused |
767 * by an analysis.reanalyze [request] that specifies an analysis root that is | 775 * by an analysis.reanalyze [request] that specifies an analysis root that is |
768 * not in the current list of analysis roots. | 776 * not in the current list of analysis roots. |
769 */ | 777 */ |
770 Response.invalidAnalysisRoot(Request request, String rootPath) : this( | 778 Response.invalidAnalysisRoot(Request request, String rootPath) : this( |
771 request.id, | 779 request.id, |
772 error: new RequestError(RequestErrorCode.INVALID_ANALYSIS_ROOT, | 780 error: new RequestError(RequestErrorCode.INVALID_ANALYSIS_ROOT, |
773 "Invalid analysis root: $rootPath")); | 781 "Invalid analysis root: $rootPath")); |
774 | 782 |
775 /** | 783 /** |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); | 942 hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); |
935 hash = hash ^ (hash >> 11); | 943 hash = hash ^ (hash >> 11); |
936 return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); | 944 return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); |
937 } | 945 } |
938 | 946 |
939 static int hash2(a, b) => finish(combine(combine(0, a), b)); | 947 static int hash2(a, b) => finish(combine(combine(0, a), b)); |
940 | 948 |
941 static int hash4(a, b, c, d) => | 949 static int hash4(a, b, c, d) => |
942 finish(combine(combine(combine(combine(0, a), b), c), d)); | 950 finish(combine(combine(combine(combine(0, a), b), c), d)); |
943 } | 951 } |
OLD | NEW |