Index: pkg/analyzer_plugin/lib/protocol/protocol.dart |
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol.dart b/pkg/analyzer_plugin/lib/protocol/protocol.dart |
index 4799f654b889c354f0f960c7724e2f7a1fe86304..708b4f20308aa8ad2b5a15dedc1e9d2f9b422363 100644 |
--- a/pkg/analyzer_plugin/lib/protocol/protocol.dart |
+++ b/pkg/analyzer_plugin/lib/protocol/protocol.dart |
@@ -340,12 +340,6 @@ class RequestFailure implements Exception { |
*/ |
class Response { |
/** |
- * The [Response] instance that is returned when a real [Response] cannot |
- * be provided at the moment. |
- */ |
- static final Response DELAYED_RESPONSE = new Response('DELAYED_RESPONSE'); |
- |
- /** |
* The name of the JSON attribute containing the id of the request for which |
* this is a response. |
*/ |
@@ -357,6 +351,12 @@ class Response { |
static const String ERROR = 'error'; |
/** |
+ * The name of the JSON attribute containing the time at which the request was |
+ * handled by the plugin. |
+ */ |
+ static const String REQUEST_TIME = 'requestTime'; |
+ |
+ /** |
* The name of the JSON attribute containing the result values. |
*/ |
static const String RESULT = 'result'; |
@@ -374,6 +374,11 @@ class Response { |
final RequestError error; |
/** |
+ * The time at which the request was handled by the plugin. |
+ */ |
+ final int requestTime; |
+ |
+ /** |
* A table mapping the names of result fields to their values. Should be |
* `null` if there is no result to send. |
*/ |
@@ -385,56 +390,35 @@ class Response { |
* result; otherwise an empty result will be used. If an [error] is provided |
* then the response will represent an error condition. |
*/ |
- Response(this.id, {Map<String, Object> result, this.error}) : result = result; |
- |
-// /** |
-// * Initialize a newly created instance to represent the FILE_NOT_ANALYZED |
-// * error condition. |
-// */ |
-// Response.fileNotAnalyzed(Request request, String file) |
-// : this(request.id, |
-// error: new RequestError(RequestErrorCode.FILE_NOT_ANALYZED, |
-// 'File is not analyzed: $file.')); |
-// |
-// /** |
-// * Initialize a newly created instance to represent the FORMAT_INVALID_FILE |
-// * error condition. |
-// */ |
-// Response.formatInvalidFile(Request request) |
-// : this(request.id, |
-// error: new RequestError(RequestErrorCode.FORMAT_INVALID_FILE, |
-// 'Error during `edit.format`: invalid file.')); |
-// |
-// /** |
-// * Initialize a newly created instance to represent the FORMAT_WITH_ERROR |
-// * error condition. |
-// */ |
-// Response.formatWithErrors(Request request) |
-// : this(request.id, |
-// error: new RequestError(RequestErrorCode.FORMAT_WITH_ERRORS, |
-// 'Error during `edit.format`: source contains syntax errors.')); |
+ Response(this.id, this.requestTime, {this.error, Map<String, Object> result}) |
+ : result = result; |
/** |
* Initialize a newly created instance based on the given JSON data. |
*/ |
factory Response.fromJson(Map json) { |
try { |
- Object id = json[Response.ID]; |
+ Object id = json[ID]; |
if (id is! String) { |
return null; |
} |
- Object error = json[Response.ERROR]; |
+ Object error = json[ERROR]; |
RequestError decodedError; |
if (error is Map) { |
decodedError = new RequestError.fromJson( |
new ResponseDecoder(null), '.error', error); |
} |
- Object result = json[Response.RESULT]; |
+ Object requestTime = json[REQUEST_TIME]; |
+ if (requestTime is! int) { |
+ return null; |
+ } |
+ Object result = json[RESULT]; |
Map<String, Object> decodedResult; |
if (result is Map) { |
decodedResult = result as Map<String, Object>; |
} |
- return new Response(id, error: decodedError, result: decodedResult); |
+ return new Response(id, requestTime, |
+ error: decodedError, result: decodedResult); |
} catch (exception) { |
return null; |
} |
@@ -450,6 +434,7 @@ class Response { |
if (error != null) { |
jsonObject[ERROR] = error.toJson(); |
} |
+ jsonObject[REQUEST_TIME] = requestTime; |
if (result != null) { |
jsonObject[RESULT] = result; |
} |