OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 analyzer.test.generated.analysis_context_factory; | 5 library analyzer.test.generated.analysis_context_factory; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 provider.numType.element, | 134 provider.numType.element, |
135 objectClassElement, | 135 objectClassElement, |
136 overrideClassElement, | 136 overrideClassElement, |
137 proxyClassElement, | 137 proxyClassElement, |
138 provider.stackTraceType.element, | 138 provider.stackTraceType.element, |
139 provider.stringType.element, | 139 provider.stringType.element, |
140 provider.symbolType.element, | 140 provider.symbolType.element, |
141 provider.typeType.element | 141 provider.typeType.element |
142 ]; | 142 ]; |
143 coreUnit.functions = <FunctionElement>[ | 143 coreUnit.functions = <FunctionElement>[ |
144 ElementFactory.functionElement3("identical", provider.boolType.element, | 144 ElementFactory.functionElement3("identical", provider.boolType, |
145 <ClassElement>[objectClassElement, objectClassElement], null), | 145 <ClassElement>[objectClassElement, objectClassElement], null), |
146 ElementFactory.functionElement3("print", VoidTypeImpl.instance.element, | 146 ElementFactory.functionElement3("print", VoidTypeImpl.instance, |
147 <ClassElement>[objectClassElement], null) | 147 <ClassElement>[objectClassElement], null) |
148 ]; | 148 ]; |
149 TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory | 149 TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory |
150 .topLevelVariableElement3("proxy", true, false, proxyClassElement.type); | 150 .topLevelVariableElement3("proxy", true, false, proxyClassElement.type); |
151 ConstTopLevelVariableElementImpl deprecatedTopLevelVariableElt = | 151 ConstTopLevelVariableElementImpl deprecatedTopLevelVariableElt = |
152 ElementFactory.topLevelVariableElement3( | 152 ElementFactory.topLevelVariableElement3( |
153 "deprecated", true, false, provider.deprecatedType); | 153 "deprecated", true, false, provider.deprecatedType); |
154 TopLevelVariableElement overrideTopLevelVariableElt = | 154 TopLevelVariableElement overrideTopLevelVariableElt = |
155 ElementFactory.topLevelVariableElement3( | 155 ElementFactory.topLevelVariableElement3( |
156 "override", true, false, overrideClassElement.type); | 156 "override", true, false, overrideClassElement.type); |
(...skipping 26 matching lines...) Expand all Loading... |
183 // dart:async | 183 // dart:async |
184 // | 184 // |
185 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode( | 185 LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode( |
186 coreContext, AstTestFactory.libraryIdentifier2(["dart", "async"])); | 186 coreContext, AstTestFactory.libraryIdentifier2(["dart", "async"])); |
187 CompilationUnitElementImpl asyncUnit = | 187 CompilationUnitElementImpl asyncUnit = |
188 new CompilationUnitElementImpl("async.dart"); | 188 new CompilationUnitElementImpl("async.dart"); |
189 Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); | 189 Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); |
190 coreContext.setContents(asyncSource, ""); | 190 coreContext.setContents(asyncSource, ""); |
191 asyncUnit.librarySource = asyncUnit.source = asyncSource; | 191 asyncUnit.librarySource = asyncUnit.source = asyncSource; |
192 asyncLibrary.definingCompilationUnit = asyncUnit; | 192 asyncLibrary.definingCompilationUnit = asyncUnit; |
193 // Future | 193 // Future<T> |
194 ClassElementImpl futureElement = | 194 ClassElementImpl futureElement = |
195 ElementFactory.classElement2("Future", ["T"]); | 195 ElementFactory.classElement2("Future", ["T"]); |
| 196 // FutureOr<T> |
| 197 ClassElementImpl futureOrElement = |
| 198 ElementFactory.classElement2("FutureOr", ["T"]); |
196 futureElement.enclosingElement = asyncUnit; | 199 futureElement.enclosingElement = asyncUnit; |
197 // factory Future.value([value]) | 200 // factory Future.value([value]) |
198 ConstructorElementImpl futureConstructor = | 201 ConstructorElementImpl futureConstructor = |
199 ElementFactory.constructorElement2(futureElement, "value"); | 202 ElementFactory.constructorElement2(futureElement, "value"); |
200 futureConstructor.parameters = <ParameterElement>[ | 203 futureConstructor.parameters = <ParameterElement>[ |
201 ElementFactory.positionalParameter2("value", provider.dynamicType) | 204 ElementFactory.positionalParameter2("value", provider.dynamicType) |
202 ]; | 205 ]; |
203 futureConstructor.factory = true; | 206 futureConstructor.factory = true; |
204 futureElement.constructors = <ConstructorElement>[futureConstructor]; | 207 futureElement.constructors = <ConstructorElement>[futureConstructor]; |
205 // Future then(onValue(T value), { Function onError }); | 208 // Future<R> then<R>(FutureOr<R> onValue(T value), { Function onError }); |
206 TypeDefiningElement futureThenR = DynamicElementImpl.instance; | 209 TypeDefiningElement futureThenR = DynamicElementImpl.instance; |
| 210 DartType onValueReturnType = DynamicTypeImpl.instance; |
207 if (context.analysisOptions.strongMode) { | 211 if (context.analysisOptions.strongMode) { |
208 futureThenR = ElementFactory.typeParameterWithType('R'); | 212 futureThenR = ElementFactory.typeParameterWithType('R'); |
| 213 onValueReturnType = futureOrElement.type.instantiate([futureThenR.type]); |
209 } | 214 } |
210 FunctionElementImpl thenOnValue = ElementFactory.functionElement3('onValue', | 215 FunctionElementImpl thenOnValue = ElementFactory.functionElement3('onValue', |
211 DynamicElementImpl.instance, [futureElement.typeParameters[0]], null); | 216 onValueReturnType, [futureElement.typeParameters[0]], null); |
212 thenOnValue.isSynthetic = true; | 217 thenOnValue.isSynthetic = true; |
213 | 218 |
214 DartType futureRType = futureElement.type.instantiate([futureThenR.type]); | 219 DartType futureRType = futureElement.type.instantiate([futureThenR.type]); |
215 MethodElementImpl thenMethod = ElementFactory | 220 MethodElementImpl thenMethod = ElementFactory |
216 .methodElementWithParameters(futureElement, "then", futureRType, [ | 221 .methodElementWithParameters(futureElement, "then", futureRType, [ |
217 ElementFactory.requiredParameter2("onValue", thenOnValue.type), | 222 ElementFactory.requiredParameter2("onValue", thenOnValue.type), |
218 ElementFactory.namedParameter2("onError", provider.functionType) | 223 ElementFactory.namedParameter2("onError", provider.functionType) |
219 ]); | 224 ]); |
220 if (!futureThenR.type.isDynamic) { | 225 if (!futureThenR.type.isDynamic) { |
221 thenMethod.typeParameters = <TypeParameterElement>[futureThenR]; | 226 thenMethod.typeParameters = <TypeParameterElement>[futureThenR]; |
(...skipping 16 matching lines...) Expand all Loading... |
238 // Stream | 243 // Stream |
239 ClassElementImpl streamElement = | 244 ClassElementImpl streamElement = |
240 ElementFactory.classElement2("Stream", ["T"]); | 245 ElementFactory.classElement2("Stream", ["T"]); |
241 streamElement.constructors = <ConstructorElement>[ | 246 streamElement.constructors = <ConstructorElement>[ |
242 ElementFactory.constructorElement2(streamElement, null) | 247 ElementFactory.constructorElement2(streamElement, null) |
243 ]; | 248 ]; |
244 DartType returnType = streamSubscriptionElement.type | 249 DartType returnType = streamSubscriptionElement.type |
245 .instantiate(streamElement.type.typeArguments); | 250 .instantiate(streamElement.type.typeArguments); |
246 FunctionElementImpl listenOnData = ElementFactory.functionElement3( | 251 FunctionElementImpl listenOnData = ElementFactory.functionElement3( |
247 'onData', | 252 'onData', |
248 VoidTypeImpl.instance.element, | 253 VoidTypeImpl.instance, |
249 <TypeDefiningElement>[streamElement.typeParameters[0]], | 254 <TypeDefiningElement>[streamElement.typeParameters[0]], |
250 null); | 255 null); |
251 listenOnData.isSynthetic = true; | 256 listenOnData.isSynthetic = true; |
252 List<DartType> parameterTypes = <DartType>[ | 257 List<DartType> parameterTypes = <DartType>[ |
253 listenOnData.type, | 258 listenOnData.type, |
254 ]; | 259 ]; |
255 // TODO(brianwilkerson) This is missing the optional parameters. | 260 // TODO(brianwilkerson) This is missing the optional parameters. |
256 MethodElementImpl listenMethod = | 261 MethodElementImpl listenMethod = |
257 ElementFactory.methodElement('listen', returnType, parameterTypes); | 262 ElementFactory.methodElement('listen', returnType, parameterTypes); |
258 streamElement.methods = <MethodElement>[listenMethod]; | 263 streamElement.methods = <MethodElement>[listenMethod]; |
259 listenMethod.type = new FunctionTypeImpl(listenMethod); | 264 listenMethod.type = new FunctionTypeImpl(listenMethod); |
260 | 265 |
261 FunctionElementImpl listenParamFunction = parameterTypes[0].element; | 266 FunctionElementImpl listenParamFunction = parameterTypes[0].element; |
262 listenParamFunction.enclosingElement = listenMethod; | 267 listenParamFunction.enclosingElement = listenMethod; |
263 listenParamFunction.type = new FunctionTypeImpl(listenParamFunction); | 268 listenParamFunction.type = new FunctionTypeImpl(listenParamFunction); |
264 ParameterElementImpl listenParam = listenMethod.parameters[0]; | 269 ParameterElementImpl listenParam = listenMethod.parameters[0]; |
265 listenParam.type = listenParamFunction.type; | 270 listenParam.type = listenParamFunction.type; |
266 | 271 |
267 asyncUnit.types = <ClassElement>[ | 272 asyncUnit.types = <ClassElement>[ |
268 completerElement, | 273 completerElement, |
269 futureElement, | 274 futureElement, |
| 275 futureOrElement, |
270 streamElement, | 276 streamElement, |
271 streamSubscriptionElement | 277 streamSubscriptionElement |
272 ]; | 278 ]; |
273 // | 279 // |
274 // dart:html | 280 // dart:html |
275 // | 281 // |
276 CompilationUnitElementImpl htmlUnit = | 282 CompilationUnitElementImpl htmlUnit = |
277 new CompilationUnitElementImpl("html_dartium.dart"); | 283 new CompilationUnitElementImpl("html_dartium.dart"); |
278 Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); | 284 Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); |
279 coreContext.setContents(htmlSource, ""); | 285 coreContext.setContents(htmlSource, ""); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 contextElement, | 319 contextElement, |
314 context2dElement, | 320 context2dElement, |
315 ElementFactory.classElement("DivElement", elementType), | 321 ElementFactory.classElement("DivElement", elementType), |
316 documentElement, | 322 documentElement, |
317 elementElement, | 323 elementElement, |
318 htmlDocumentElement, | 324 htmlDocumentElement, |
319 ElementFactory.classElement("InputElement", elementType), | 325 ElementFactory.classElement("InputElement", elementType), |
320 ElementFactory.classElement("SelectElement", elementType) | 326 ElementFactory.classElement("SelectElement", elementType) |
321 ]; | 327 ]; |
322 htmlUnit.functions = <FunctionElement>[ | 328 htmlUnit.functions = <FunctionElement>[ |
323 ElementFactory.functionElement3("query", elementElement, | 329 ElementFactory.functionElement3("query", elementElement.type, |
324 <ClassElement>[provider.stringType.element], ClassElement.EMPTY_LIST) | 330 <ClassElement>[provider.stringType.element], ClassElement.EMPTY_LIST) |
325 ]; | 331 ]; |
326 TopLevelVariableElementImpl document = | 332 TopLevelVariableElementImpl document = |
327 ElementFactory.topLevelVariableElement3( | 333 ElementFactory.topLevelVariableElement3( |
328 "document", false, true, htmlDocumentElement.type); | 334 "document", false, true, htmlDocumentElement.type); |
329 htmlUnit.topLevelVariables = <TopLevelVariableElement>[document]; | 335 htmlUnit.topLevelVariables = <TopLevelVariableElement>[document]; |
330 htmlUnit.accessors = <PropertyAccessorElement>[document.getter]; | 336 htmlUnit.accessors = <PropertyAccessorElement>[document.getter]; |
331 LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(coreContext, | 337 LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode(coreContext, |
332 AstTestFactory.libraryIdentifier2(["dart", "dom", "html"])); | 338 AstTestFactory.libraryIdentifier2(["dart", "dom", "html"])); |
333 htmlLibrary.definingCompilationUnit = htmlUnit; | 339 htmlLibrary.definingCompilationUnit = htmlUnit; |
334 // | 340 // |
335 // dart:math | 341 // dart:math |
336 // | 342 // |
337 CompilationUnitElementImpl mathUnit = | 343 CompilationUnitElementImpl mathUnit = |
338 new CompilationUnitElementImpl("math.dart"); | 344 new CompilationUnitElementImpl("math.dart"); |
339 Source mathSource = sourceFactory.forUri(_DART_MATH); | 345 Source mathSource = sourceFactory.forUri(_DART_MATH); |
340 coreContext.setContents(mathSource, ""); | 346 coreContext.setContents(mathSource, ""); |
341 mathUnit.librarySource = mathUnit.source = mathSource; | 347 mathUnit.librarySource = mathUnit.source = mathSource; |
342 FunctionElement cosElement = ElementFactory.functionElement3( | 348 FunctionElement cosElement = ElementFactory.functionElement3( |
343 "cos", | 349 "cos", |
344 provider.doubleType.element, | 350 provider.doubleType, |
345 <ClassElement>[provider.numType.element], | 351 <ClassElement>[provider.numType.element], |
346 ClassElement.EMPTY_LIST); | 352 ClassElement.EMPTY_LIST); |
347 TopLevelVariableElement ln10Element = ElementFactory | 353 TopLevelVariableElement ln10Element = ElementFactory |
348 .topLevelVariableElement3("LN10", true, false, provider.doubleType); | 354 .topLevelVariableElement3("LN10", true, false, provider.doubleType); |
349 TypeParameterElement maxT = | 355 TypeParameterElement maxT = |
350 ElementFactory.typeParameterWithType('T', provider.numType); | 356 ElementFactory.typeParameterWithType('T', provider.numType); |
351 FunctionElementImpl maxElement = ElementFactory.functionElement3( | 357 FunctionElementImpl maxElement = ElementFactory.functionElement3( |
352 "max", maxT, [maxT, maxT], ClassElement.EMPTY_LIST); | 358 "max", maxT.type, [maxT, maxT], ClassElement.EMPTY_LIST); |
353 maxElement.typeParameters = [maxT]; | 359 maxElement.typeParameters = [maxT]; |
354 maxElement.type = new FunctionTypeImpl(maxElement); | 360 maxElement.type = new FunctionTypeImpl(maxElement); |
355 TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3( | 361 TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3( |
356 "PI", true, false, provider.doubleType); | 362 "PI", true, false, provider.doubleType); |
357 ClassElementImpl randomElement = ElementFactory.classElement2("Random"); | 363 ClassElementImpl randomElement = ElementFactory.classElement2("Random"); |
358 randomElement.abstract = true; | 364 randomElement.abstract = true; |
359 ConstructorElementImpl randomConstructor = | 365 ConstructorElementImpl randomConstructor = |
360 ElementFactory.constructorElement2(randomElement, null); | 366 ElementFactory.constructorElement2(randomElement, null); |
361 randomConstructor.factory = true; | 367 randomConstructor.factory = true; |
362 ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); | 368 ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); |
363 seedParam.parameterKind = ParameterKind.POSITIONAL; | 369 seedParam.parameterKind = ParameterKind.POSITIONAL; |
364 seedParam.type = provider.intType; | 370 seedParam.type = provider.intType; |
365 randomConstructor.parameters = <ParameterElement>[seedParam]; | 371 randomConstructor.parameters = <ParameterElement>[seedParam]; |
366 randomElement.constructors = <ConstructorElement>[randomConstructor]; | 372 randomElement.constructors = <ConstructorElement>[randomConstructor]; |
367 FunctionElement sinElement = ElementFactory.functionElement3( | 373 FunctionElement sinElement = ElementFactory.functionElement3( |
368 "sin", | 374 "sin", |
369 provider.doubleType.element, | 375 provider.doubleType, |
370 <ClassElement>[provider.numType.element], | 376 <ClassElement>[provider.numType.element], |
371 ClassElement.EMPTY_LIST); | 377 ClassElement.EMPTY_LIST); |
372 FunctionElement sqrtElement = ElementFactory.functionElement3( | 378 FunctionElement sqrtElement = ElementFactory.functionElement3( |
373 "sqrt", | 379 "sqrt", |
374 provider.doubleType.element, | 380 provider.doubleType, |
375 <ClassElement>[provider.numType.element], | 381 <ClassElement>[provider.numType.element], |
376 ClassElement.EMPTY_LIST); | 382 ClassElement.EMPTY_LIST); |
377 mathUnit.accessors = <PropertyAccessorElement>[ | 383 mathUnit.accessors = <PropertyAccessorElement>[ |
378 ln10Element.getter, | 384 ln10Element.getter, |
379 piElement.getter | 385 piElement.getter |
380 ]; | 386 ]; |
381 mathUnit.functions = <FunctionElement>[ | 387 mathUnit.functions = <FunctionElement>[ |
382 cosElement, | 388 cosElement, |
383 maxElement, | 389 maxElement, |
384 sinElement, | 390 sinElement, |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 | 577 |
572 void _addLibrary(LibraryMap map, String uri, bool isInternal, String path) { | 578 void _addLibrary(LibraryMap map, String uri, bool isInternal, String path) { |
573 SdkLibraryImpl library = new SdkLibraryImpl(uri); | 579 SdkLibraryImpl library = new SdkLibraryImpl(uri); |
574 if (isInternal) { | 580 if (isInternal) { |
575 library.category = "Internal"; | 581 library.category = "Internal"; |
576 } | 582 } |
577 library.path = path; | 583 library.path = path; |
578 map.setLibrary(uri, library); | 584 map.setLibrary(uri, library); |
579 } | 585 } |
580 } | 586 } |
OLD | NEW |