| OLD | NEW | 
 | (Empty) | 
|    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 |  | 
|    3 // BSD-style license that can be found in the LICENSE file. |  | 
|    4  |  | 
|    5 library yaml.yaml_node_wrapper; |  | 
|    6  |  | 
|    7 import 'dart:collection'; |  | 
|    8  |  | 
|    9 import 'package:collection/collection.dart' as pkg_collection; |  | 
|   10 import 'package:source_span/source_span.dart'; |  | 
|   11  |  | 
|   12 import 'null_span.dart'; |  | 
|   13 import 'style.dart'; |  | 
|   14 import 'yaml_node.dart'; |  | 
|   15  |  | 
|   16 /// A wrapper that makes a normal Dart map behave like a [YamlMap]. |  | 
|   17 class YamlMapWrapper extends MapBase |  | 
|   18     with pkg_collection.UnmodifiableMapMixin |  | 
|   19     implements YamlMap { |  | 
|   20   final CollectionStyle style = CollectionStyle.ANY; |  | 
|   21  |  | 
|   22   final Map _dartMap; |  | 
|   23  |  | 
|   24   final SourceSpan span; |  | 
|   25  |  | 
|   26   final Map<dynamic, YamlNode> nodes; |  | 
|   27  |  | 
|   28   Map get value => this; |  | 
|   29  |  | 
|   30   Iterable get keys => _dartMap.keys; |  | 
|   31  |  | 
|   32   YamlMapWrapper(Map dartMap, sourceUrl) |  | 
|   33       : this._(dartMap, new NullSpan(sourceUrl)); |  | 
|   34  |  | 
|   35   YamlMapWrapper._(Map dartMap, SourceSpan span) |  | 
|   36       : _dartMap = dartMap, |  | 
|   37         span = span, |  | 
|   38         nodes = new _YamlMapNodes(dartMap, span); |  | 
|   39  |  | 
|   40   operator [](Object key) { |  | 
|   41     var value = _dartMap[key]; |  | 
|   42     if (value is Map) return new YamlMapWrapper._(value, span); |  | 
|   43     if (value is List) return new YamlListWrapper._(value, span); |  | 
|   44     return value; |  | 
|   45   } |  | 
|   46  |  | 
|   47   int get hashCode => _dartMap.hashCode; |  | 
|   48  |  | 
|   49   operator ==(Object other) => |  | 
|   50       other is YamlMapWrapper && other._dartMap == _dartMap; |  | 
|   51 } |  | 
|   52  |  | 
|   53 /// The implementation of [YamlMapWrapper.nodes] as a wrapper around the Dart |  | 
|   54 /// map. |  | 
|   55 class _YamlMapNodes extends MapBase<dynamic, YamlNode> |  | 
|   56     with pkg_collection.UnmodifiableMapMixin<dynamic, YamlNode> { |  | 
|   57   final Map _dartMap; |  | 
|   58  |  | 
|   59   final SourceSpan _span; |  | 
|   60  |  | 
|   61   Iterable get keys => _dartMap.keys.map((key) => |  | 
|   62       new YamlScalar.internalWithSpan(key, _span)); |  | 
|   63  |  | 
|   64   _YamlMapNodes(this._dartMap, this._span); |  | 
|   65  |  | 
|   66   YamlNode operator [](Object key) { |  | 
|   67     // Use "as" here because key being assigned to invalidates type propagation. |  | 
|   68     if (key is YamlScalar) key = (key as YamlScalar).value; |  | 
|   69     if (!_dartMap.containsKey(key)) return null; |  | 
|   70     return _nodeForValue(_dartMap[key], _span); |  | 
|   71   } |  | 
|   72  |  | 
|   73   int get hashCode => _dartMap.hashCode; |  | 
|   74  |  | 
|   75   operator ==(Object other) => |  | 
|   76       other is _YamlMapNodes && other._dartMap == _dartMap; |  | 
|   77 } |  | 
|   78  |  | 
|   79 // TODO(nweiz): Use UnmodifiableListMixin when issue 18970 is fixed. |  | 
|   80 /// A wrapper that makes a normal Dart list behave like a [YamlList]. |  | 
|   81 class YamlListWrapper extends ListBase implements YamlList { |  | 
|   82   final CollectionStyle style = CollectionStyle.ANY; |  | 
|   83  |  | 
|   84   final List _dartList; |  | 
|   85  |  | 
|   86   final SourceSpan span; |  | 
|   87  |  | 
|   88   final List<YamlNode> nodes; |  | 
|   89  |  | 
|   90   List get value => this; |  | 
|   91  |  | 
|   92   int get length => _dartList.length; |  | 
|   93  |  | 
|   94   set length(int index) { |  | 
|   95     throw new UnsupportedError("Cannot modify an unmodifiable List."); |  | 
|   96   } |  | 
|   97  |  | 
|   98   YamlListWrapper(List dartList, sourceUrl) |  | 
|   99       : this._(dartList, new NullSpan(sourceUrl)); |  | 
|  100  |  | 
|  101   YamlListWrapper._(List dartList, SourceSpan span) |  | 
|  102       : _dartList = dartList, |  | 
|  103         span = span, |  | 
|  104         nodes = new _YamlListNodes(dartList, span); |  | 
|  105  |  | 
|  106   operator [](int index) { |  | 
|  107     var value = _dartList[index]; |  | 
|  108     if (value is Map) return new YamlMapWrapper._(value, span); |  | 
|  109     if (value is List) return new YamlListWrapper._(value, span); |  | 
|  110     return value; |  | 
|  111   } |  | 
|  112  |  | 
|  113   operator []=(int index, value) { |  | 
|  114     throw new UnsupportedError("Cannot modify an unmodifiable List."); |  | 
|  115   } |  | 
|  116  |  | 
|  117   int get hashCode => _dartList.hashCode; |  | 
|  118  |  | 
|  119   operator ==(Object other) => |  | 
|  120       other is YamlListWrapper && other._dartList == _dartList; |  | 
|  121 } |  | 
|  122  |  | 
|  123 // TODO(nweiz): Use UnmodifiableListMixin when issue 18970 is fixed. |  | 
|  124 /// The implementation of [YamlListWrapper.nodes] as a wrapper around the Dart |  | 
|  125 /// list. |  | 
|  126 class _YamlListNodes extends ListBase<YamlNode> { |  | 
|  127   final List _dartList; |  | 
|  128  |  | 
|  129   final SourceSpan _span; |  | 
|  130  |  | 
|  131   int get length => _dartList.length; |  | 
|  132  |  | 
|  133   set length(int index) { |  | 
|  134     throw new UnsupportedError("Cannot modify an unmodifiable List."); |  | 
|  135   } |  | 
|  136  |  | 
|  137   _YamlListNodes(this._dartList, this._span); |  | 
|  138  |  | 
|  139   YamlNode operator [](int index) => _nodeForValue(_dartList[index], _span); |  | 
|  140  |  | 
|  141   operator []=(int index, value) { |  | 
|  142     throw new UnsupportedError("Cannot modify an unmodifiable List."); |  | 
|  143   } |  | 
|  144  |  | 
|  145   int get hashCode => _dartList.hashCode; |  | 
|  146  |  | 
|  147   operator ==(Object other) => |  | 
|  148       other is _YamlListNodes && other._dartList == _dartList; |  | 
|  149 } |  | 
|  150  |  | 
|  151 YamlNode _nodeForValue(value, SourceSpan span) { |  | 
|  152   if (value is Map) return new YamlMapWrapper._(value, span); |  | 
|  153   if (value is List) return new YamlListWrapper._(value, span); |  | 
|  154   return new YamlScalar.internalWithSpan(value, span); |  | 
|  155 } |  | 
| OLD | NEW |