| Index: pkg/analysis_server/lib/src/protocol/protocol_internal.dart
|
| diff --git a/pkg/analysis_server/lib/src/protocol/protocol_internal.dart b/pkg/analysis_server/lib/src/protocol/protocol_internal.dart
|
| index 256523abf7c32a2bb9b529cc54f8c3b7ffd50071..ce774edd9971ab19916738b481201917dc50057b 100644
|
| --- a/pkg/analysis_server/lib/src/protocol/protocol_internal.dart
|
| +++ b/pkg/analysis_server/lib/src/protocol/protocol_internal.dart
|
| @@ -222,7 +222,7 @@ RefactoringOptions refactoringOptionsFromJson(JsonDecoder jsonDecoder,
|
| * string describing the part of the JSON object being decoded, and [value] is
|
| * the part to decode.
|
| */
|
| -typedef Object JsonDecoderCallback(String jsonPath, Object value);
|
| +typedef E JsonDecoderCallback<E>(String jsonPath, Object value);
|
|
|
| /**
|
| * Instances of the class [HasToJson] implement [toJson] method that returns
|
| @@ -303,14 +303,17 @@ abstract class JsonDecoder {
|
| }
|
|
|
| /**
|
| - * Decode a JSON object that is expected to be a List. [decoder] is used to
|
| - * decode the items in the list.
|
| + * Decode a JSON object that is expected to be a List. The [decoder] is used
|
| + * to decode the items in the list.
|
| + *
|
| + * The type parameter [E] is the expected type of the elements in the list.
|
| */
|
| - List decodeList(String jsonPath, Object json, [JsonDecoderCallback decoder]) {
|
| + List/*<E>*/ decodeList/*<E>*/(String jsonPath, Object json,
|
| + [JsonDecoderCallback/*<E>*/ decoder]) {
|
| if (json == null) {
|
| - return [];
|
| + return/*<E>*/ [];
|
| } else if (json is List) {
|
| - List result = [];
|
| + List/*<E>*/ result = /*<E>*/ [];
|
| for (int i = 0; i < json.length; i++) {
|
| result.add(decoder('$jsonPath[$i]', json[i]));
|
| }
|
| @@ -324,23 +327,24 @@ abstract class JsonDecoder {
|
| * Decode a JSON object that is expected to be a Map. [keyDecoder] is used
|
| * to decode the keys, and [valueDecoder] is used to decode the values.
|
| */
|
| - Map decodeMap(String jsonPath, Object json,
|
| - {JsonDecoderCallback keyDecoder, JsonDecoderCallback valueDecoder}) {
|
| + Map/*<K, V>*/ decodeMap/*<K, V>*/(String jsonPath, Object json,
|
| + {JsonDecoderCallback/*<K>*/ keyDecoder,
|
| + JsonDecoderCallback/*<V>*/ valueDecoder}) {
|
| if (json == null) {
|
| return {};
|
| } else if (json is Map) {
|
| - Map result = {};
|
| + Map/*<K, V>*/ result = /*<K, V>*/ {};
|
| json.forEach((String key, value) {
|
| - Object decodedKey;
|
| + Object/*=K*/ decodedKey;
|
| if (keyDecoder != null) {
|
| decodedKey = keyDecoder('$jsonPath.key', key);
|
| } else {
|
| - decodedKey = key;
|
| + decodedKey = key as Object/*=K*/;
|
| }
|
| if (valueDecoder != null) {
|
| value = valueDecoder('$jsonPath[${JSON.encode(key)}]', value);
|
| }
|
| - result[decodedKey] = value;
|
| + result[decodedKey] = value as Object/*=V*/;
|
| });
|
| return result;
|
| } else {
|
|
|