Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, 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 analyzer.src.summary.summary_sdk; | |
| 6 | |
| 7 import 'package:analyzer/dart/element/element.dart'; | |
| 8 import 'package:analyzer/dart/element/type.dart'; | |
| 9 import 'package:analyzer/src/dart/element/type.dart'; | |
| 10 import 'package:analyzer/src/generated/constant.dart'; | |
| 11 import 'package:analyzer/src/generated/resolver.dart'; | |
| 12 | |
| 13 /** | |
| 14 * Implementation of [TypeProvider] which can be initialized separately with | |
| 15 * `dart:core` and `dart:async` libraries. | |
| 16 */ | |
| 17 class SummaryTypeProvider implements TypeProvider { | |
| 18 bool _initCore = false; | |
|
Paul Berry
2015/12/24 03:31:09
The meaning of these booleans isn't clear from the
scheglov
2015/12/24 03:36:06
Done.
| |
| 19 bool _initAsync = false; | |
| 20 | |
| 21 InterfaceType _boolType; | |
| 22 InterfaceType _deprecatedType; | |
| 23 InterfaceType _doubleType; | |
| 24 InterfaceType _functionType; | |
| 25 InterfaceType _futureDynamicType; | |
| 26 InterfaceType _futureNullType; | |
| 27 InterfaceType _futureType; | |
| 28 InterfaceType _intType; | |
| 29 InterfaceType _iterableDynamicType; | |
| 30 InterfaceType _iterableType; | |
| 31 InterfaceType _listType; | |
| 32 InterfaceType _mapType; | |
| 33 DartObjectImpl _nullObject; | |
| 34 InterfaceType _nullType; | |
| 35 InterfaceType _numType; | |
| 36 InterfaceType _objectType; | |
| 37 InterfaceType _stackTraceType; | |
| 38 InterfaceType _streamDynamicType; | |
| 39 InterfaceType _streamType; | |
| 40 InterfaceType _stringType; | |
| 41 InterfaceType _symbolType; | |
| 42 InterfaceType _typeType; | |
| 43 | |
| 44 @override | |
| 45 InterfaceType get boolType { | |
| 46 assert(_initCore); | |
| 47 return _boolType; | |
| 48 } | |
| 49 | |
| 50 @override | |
| 51 DartType get bottomType => BottomTypeImpl.instance; | |
| 52 | |
| 53 @override | |
| 54 InterfaceType get deprecatedType { | |
| 55 assert(_initCore); | |
| 56 return _deprecatedType; | |
| 57 } | |
| 58 | |
| 59 @override | |
| 60 InterfaceType get doubleType { | |
| 61 assert(_initCore); | |
| 62 return _doubleType; | |
| 63 } | |
| 64 | |
| 65 @override | |
| 66 DartType get dynamicType => DynamicTypeImpl.instance; | |
| 67 | |
| 68 @override | |
| 69 InterfaceType get functionType { | |
| 70 assert(_initCore); | |
| 71 return _functionType; | |
| 72 } | |
| 73 | |
| 74 @override | |
| 75 InterfaceType get futureDynamicType { | |
| 76 assert(_initAsync); | |
| 77 return _futureDynamicType; | |
| 78 } | |
| 79 | |
| 80 @override | |
| 81 InterfaceType get futureNullType { | |
| 82 assert(_initAsync); | |
| 83 return _futureNullType; | |
| 84 } | |
| 85 | |
| 86 @override | |
| 87 InterfaceType get futureType { | |
| 88 assert(_initAsync); | |
| 89 return _futureType; | |
| 90 } | |
| 91 | |
| 92 @override | |
| 93 InterfaceType get intType { | |
| 94 assert(_initCore); | |
| 95 return _intType; | |
| 96 } | |
| 97 | |
| 98 @override | |
| 99 InterfaceType get iterableDynamicType { | |
| 100 assert(_initCore); | |
| 101 return _iterableDynamicType; | |
| 102 } | |
| 103 | |
| 104 @override | |
| 105 InterfaceType get iterableType { | |
| 106 assert(_initCore); | |
| 107 return _iterableType; | |
| 108 } | |
| 109 | |
| 110 @override | |
| 111 InterfaceType get listType { | |
| 112 assert(_initCore); | |
| 113 return _listType; | |
| 114 } | |
| 115 | |
| 116 @override | |
| 117 InterfaceType get mapType { | |
| 118 assert(_initCore); | |
| 119 return _mapType; | |
| 120 } | |
| 121 | |
| 122 @override | |
| 123 List<InterfaceType> get nonSubtypableTypes => <InterfaceType>[ | |
| 124 nullType, | |
| 125 numType, | |
| 126 intType, | |
| 127 doubleType, | |
| 128 boolType, | |
| 129 stringType | |
| 130 ]; | |
| 131 | |
| 132 @override | |
| 133 DartObjectImpl get nullObject { | |
| 134 if (_nullObject == null) { | |
| 135 _nullObject = new DartObjectImpl(nullType, NullState.NULL_STATE); | |
| 136 } | |
| 137 return _nullObject; | |
| 138 } | |
| 139 | |
| 140 @override | |
| 141 InterfaceType get nullType { | |
| 142 assert(_initCore); | |
| 143 return _nullType; | |
| 144 } | |
| 145 | |
| 146 @override | |
| 147 InterfaceType get numType { | |
| 148 assert(_initCore); | |
| 149 return _numType; | |
| 150 } | |
| 151 | |
| 152 @override | |
| 153 InterfaceType get objectType { | |
| 154 assert(_initCore); | |
| 155 return _objectType; | |
| 156 } | |
| 157 | |
| 158 @override | |
| 159 InterfaceType get stackTraceType { | |
| 160 assert(_initCore); | |
| 161 return _stackTraceType; | |
| 162 } | |
| 163 | |
| 164 @override | |
| 165 InterfaceType get streamDynamicType { | |
| 166 assert(_initAsync); | |
| 167 return _streamDynamicType; | |
| 168 } | |
| 169 | |
| 170 @override | |
| 171 InterfaceType get streamType { | |
| 172 assert(_initAsync); | |
| 173 return _streamType; | |
| 174 } | |
| 175 | |
| 176 @override | |
| 177 InterfaceType get stringType { | |
| 178 assert(_initCore); | |
| 179 return _stringType; | |
| 180 } | |
| 181 | |
| 182 @override | |
| 183 InterfaceType get symbolType { | |
| 184 assert(_initCore); | |
| 185 return _symbolType; | |
| 186 } | |
| 187 | |
| 188 @override | |
| 189 InterfaceType get typeType { | |
| 190 assert(_initCore); | |
| 191 return _typeType; | |
| 192 } | |
| 193 | |
| 194 @override | |
| 195 DartType get undefinedType => UndefinedTypeImpl.instance; | |
| 196 | |
| 197 /** | |
| 198 * Initialize the `dart:async` types provided by this type provider. | |
| 199 */ | |
| 200 void initializeAsync(LibraryElement library) { | |
| 201 assert(_initCore); | |
| 202 assert(!_initAsync); | |
| 203 _initAsync = true; | |
| 204 _futureType = _getType(library, "Future"); | |
| 205 _streamType = _getType(library, "Stream"); | |
| 206 _futureDynamicType = _futureType.substitute4(<DartType>[dynamicType]); | |
| 207 _futureNullType = _futureType.substitute4(<DartType>[_nullType]); | |
| 208 _streamDynamicType = _streamType.substitute4(<DartType>[dynamicType]); | |
| 209 } | |
| 210 | |
| 211 /** | |
| 212 * Initialize the `dart:core` types provided by this type provider. | |
| 213 */ | |
| 214 void initializeCore(LibraryElement library) { | |
| 215 assert(!_initCore); | |
| 216 assert(!_initAsync); | |
| 217 _initCore = true; | |
| 218 _boolType = _getType(library, "bool"); | |
| 219 _deprecatedType = _getType(library, "Deprecated"); | |
| 220 _doubleType = _getType(library, "double"); | |
| 221 _functionType = _getType(library, "Function"); | |
| 222 _intType = _getType(library, "int"); | |
| 223 _iterableType = _getType(library, "Iterable"); | |
| 224 _listType = _getType(library, "List"); | |
| 225 _mapType = _getType(library, "Map"); | |
| 226 _nullType = _getType(library, "Null"); | |
| 227 _numType = _getType(library, "num"); | |
| 228 _objectType = _getType(library, "Object"); | |
| 229 _stackTraceType = _getType(library, "StackTrace"); | |
| 230 _stringType = _getType(library, "String"); | |
| 231 _symbolType = _getType(library, "Symbol"); | |
| 232 _typeType = _getType(library, "Type"); | |
| 233 _iterableDynamicType = _iterableType.substitute4(<DartType>[dynamicType]); | |
| 234 } | |
| 235 | |
| 236 /** | |
| 237 * Return the type with the given [name] from the given [library], or | |
| 238 * throw a [StateError] if there is no class with the given name. | |
| 239 */ | |
| 240 InterfaceType _getType(LibraryElement library, String name) { | |
| 241 Element element = library.getType(name); | |
| 242 if (element == null) { | |
| 243 throw new StateError("No definition of type $name"); | |
| 244 } | |
| 245 return (element as ClassElement).type; | |
| 246 } | |
| 247 } | |
| OLD | NEW |