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.static_type_analyzer_test; | 5 library analyzer.test.generated.static_type_analyzer_test; |
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'; |
11 import 'package:analyzer/dart/element/element.dart'; | 11 import 'package:analyzer/dart/element/element.dart'; |
12 import 'package:analyzer/dart/element/type.dart'; | 12 import 'package:analyzer/dart/element/type.dart'; |
13 import 'package:analyzer/file_system/memory_file_system.dart'; | 13 import 'package:analyzer/file_system/memory_file_system.dart'; |
14 import 'package:analyzer/src/dart/element/element.dart'; | 14 import 'package:analyzer/src/dart/element/element.dart'; |
15 import 'package:analyzer/src/dart/element/member.dart'; | 15 import 'package:analyzer/src/dart/element/member.dart'; |
16 import 'package:analyzer/src/dart/element/type.dart'; | 16 import 'package:analyzer/src/dart/element/type.dart'; |
17 import 'package:analyzer/src/generated/engine.dart'; | 17 import 'package:analyzer/src/generated/engine.dart'; |
18 import 'package:analyzer/src/generated/resolver.dart'; | 18 import 'package:analyzer/src/generated/resolver.dart'; |
19 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
20 import 'package:analyzer/src/generated/static_type_analyzer.dart'; | 20 import 'package:analyzer/src/generated/static_type_analyzer.dart'; |
21 import 'package:analyzer/src/generated/testing/ast_factory.dart'; | 21 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; |
22 import 'package:analyzer/src/generated/testing/element_factory.dart'; | 22 import 'package:analyzer/src/generated/testing/element_factory.dart'; |
23 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; | 23 import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
24 import 'package:analyzer/src/generated/testing/token_factory.dart'; | 24 import 'package:analyzer/src/generated/testing/token_factory.dart'; |
25 import 'package:analyzer/src/source/source_resource.dart'; | 25 import 'package:analyzer/src/source/source_resource.dart'; |
26 import 'package:test/test.dart'; | 26 import 'package:test/test.dart'; |
27 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 27 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
28 | 28 |
29 import 'analysis_context_factory.dart'; | 29 import 'analysis_context_factory.dart'; |
30 import 'resolver_test_case.dart'; | 30 import 'resolver_test_case.dart'; |
31 import 'test_support.dart'; | 31 import 'test_support.dart'; |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 futureType.instantiate([intType]) | 347 futureType.instantiate([intType]) |
348 ]; | 348 ]; |
349 // flatten(A) = A and flatten(B) = B, since neither string nor int is more | 349 // flatten(A) = A and flatten(B) = B, since neither string nor int is more |
350 // specific than the other. | 350 // specific than the other. |
351 expect(_flatten(classA.type), classA.type); | 351 expect(_flatten(classA.type), classA.type); |
352 expect(_flatten(classB.type), classB.type); | 352 expect(_flatten(classB.type), classB.type); |
353 } | 353 } |
354 | 354 |
355 void test_visitAdjacentStrings() { | 355 void test_visitAdjacentStrings() { |
356 // "a" "b" | 356 // "a" "b" |
357 Expression node = AstFactory | 357 Expression node = AstTestFactory |
358 .adjacentStrings([_resolvedString("a"), _resolvedString("b")]); | 358 .adjacentStrings([_resolvedString("a"), _resolvedString("b")]); |
359 expect(_analyze(node), same(_typeProvider.stringType)); | 359 expect(_analyze(node), same(_typeProvider.stringType)); |
360 _listener.assertNoErrors(); | 360 _listener.assertNoErrors(); |
361 } | 361 } |
362 | 362 |
363 void test_visitAsExpression() { | 363 void test_visitAsExpression() { |
364 // class A { ... this as B ... } | 364 // class A { ... this as B ... } |
365 // class B extends A {} | 365 // class B extends A {} |
366 ClassElement superclass = ElementFactory.classElement2("A"); | 366 ClassElement superclass = ElementFactory.classElement2("A"); |
367 InterfaceType superclassType = superclass.type; | 367 InterfaceType superclassType = superclass.type; |
368 ClassElement subclass = ElementFactory.classElement("B", superclassType); | 368 ClassElement subclass = ElementFactory.classElement("B", superclassType); |
369 Expression node = AstFactory.asExpression( | 369 Expression node = AstTestFactory.asExpression( |
370 AstFactory.thisExpression(), AstFactory.typeName(subclass)); | 370 AstTestFactory.thisExpression(), AstTestFactory.typeName(subclass)); |
371 expect(_analyze3(node, superclassType), same(subclass.type)); | 371 expect(_analyze3(node, superclassType), same(subclass.type)); |
372 _listener.assertNoErrors(); | 372 _listener.assertNoErrors(); |
373 } | 373 } |
374 | 374 |
375 void test_visitAssignmentExpression_compound_II() { | 375 void test_visitAssignmentExpression_compound_II() { |
376 validate(TokenType operator) { | 376 validate(TokenType operator) { |
377 InterfaceType numType = _typeProvider.numType; | 377 InterfaceType numType = _typeProvider.numType; |
378 InterfaceType intType = _typeProvider.intType; | 378 InterfaceType intType = _typeProvider.intType; |
379 SimpleIdentifier identifier = _resolvedVariable(intType, "i"); | 379 SimpleIdentifier identifier = _resolvedVariable(intType, "i"); |
380 AssignmentExpression node = AstFactory.assignmentExpression( | 380 AssignmentExpression node = AstTestFactory.assignmentExpression( |
381 identifier, operator, _resolvedInteger(1)); | 381 identifier, operator, _resolvedInteger(1)); |
382 MethodElement plusMethod = getMethod(numType, "+"); | 382 MethodElement plusMethod = getMethod(numType, "+"); |
383 node.staticElement = plusMethod; | 383 node.staticElement = plusMethod; |
384 expect(_analyze(node), same(intType)); | 384 expect(_analyze(node), same(intType)); |
385 _listener.assertNoErrors(); | 385 _listener.assertNoErrors(); |
386 } | 386 } |
387 | 387 |
388 validate(TokenType.MINUS_EQ); | 388 validate(TokenType.MINUS_EQ); |
389 validate(TokenType.PERCENT_EQ); | 389 validate(TokenType.PERCENT_EQ); |
390 validate(TokenType.PLUS_EQ); | 390 validate(TokenType.PLUS_EQ); |
391 validate(TokenType.STAR_EQ); | 391 validate(TokenType.STAR_EQ); |
392 validate(TokenType.TILDE_SLASH_EQ); | 392 validate(TokenType.TILDE_SLASH_EQ); |
393 } | 393 } |
394 | 394 |
395 void test_visitAssignmentExpression_compound_lazy() { | 395 void test_visitAssignmentExpression_compound_lazy() { |
396 validate(TokenType operator) { | 396 validate(TokenType operator) { |
397 InterfaceType boolType = _typeProvider.boolType; | 397 InterfaceType boolType = _typeProvider.boolType; |
398 SimpleIdentifier identifier = _resolvedVariable(boolType, "b"); | 398 SimpleIdentifier identifier = _resolvedVariable(boolType, "b"); |
399 AssignmentExpression node = AstFactory.assignmentExpression( | 399 AssignmentExpression node = AstTestFactory.assignmentExpression( |
400 identifier, operator, _resolvedBool(true)); | 400 identifier, operator, _resolvedBool(true)); |
401 expect(_analyze(node), same(boolType)); | 401 expect(_analyze(node), same(boolType)); |
402 _listener.assertNoErrors(); | 402 _listener.assertNoErrors(); |
403 } | 403 } |
404 | 404 |
405 validate(TokenType.AMPERSAND_AMPERSAND_EQ); | 405 validate(TokenType.AMPERSAND_AMPERSAND_EQ); |
406 validate(TokenType.BAR_BAR_EQ); | 406 validate(TokenType.BAR_BAR_EQ); |
407 } | 407 } |
408 | 408 |
409 void test_visitAssignmentExpression_compound_plusID() { | 409 void test_visitAssignmentExpression_compound_plusID() { |
410 validate(TokenType operator) { | 410 validate(TokenType operator) { |
411 InterfaceType numType = _typeProvider.numType; | 411 InterfaceType numType = _typeProvider.numType; |
412 InterfaceType intType = _typeProvider.intType; | 412 InterfaceType intType = _typeProvider.intType; |
413 InterfaceType doubleType = _typeProvider.doubleType; | 413 InterfaceType doubleType = _typeProvider.doubleType; |
414 SimpleIdentifier identifier = _resolvedVariable(intType, "i"); | 414 SimpleIdentifier identifier = _resolvedVariable(intType, "i"); |
415 AssignmentExpression node = AstFactory.assignmentExpression( | 415 AssignmentExpression node = AstTestFactory.assignmentExpression( |
416 identifier, operator, _resolvedDouble(1.0)); | 416 identifier, operator, _resolvedDouble(1.0)); |
417 MethodElement plusMethod = getMethod(numType, "+"); | 417 MethodElement plusMethod = getMethod(numType, "+"); |
418 node.staticElement = plusMethod; | 418 node.staticElement = plusMethod; |
419 expect(_analyze(node), same(doubleType)); | 419 expect(_analyze(node), same(doubleType)); |
420 _listener.assertNoErrors(); | 420 _listener.assertNoErrors(); |
421 } | 421 } |
422 | 422 |
423 validate(TokenType.MINUS_EQ); | 423 validate(TokenType.MINUS_EQ); |
424 validate(TokenType.PERCENT_EQ); | 424 validate(TokenType.PERCENT_EQ); |
425 validate(TokenType.PLUS_EQ); | 425 validate(TokenType.PLUS_EQ); |
426 validate(TokenType.STAR_EQ); | 426 validate(TokenType.STAR_EQ); |
427 } | 427 } |
428 | 428 |
429 void test_visitAssignmentExpression_compoundIfNull_differentTypes() { | 429 void test_visitAssignmentExpression_compoundIfNull_differentTypes() { |
430 // double d; d ??= 0 | 430 // double d; d ??= 0 |
431 Expression node = AstFactory.assignmentExpression( | 431 Expression node = AstTestFactory.assignmentExpression( |
432 _resolvedVariable(_typeProvider.doubleType, 'd'), | 432 _resolvedVariable(_typeProvider.doubleType, 'd'), |
433 TokenType.QUESTION_QUESTION_EQ, | 433 TokenType.QUESTION_QUESTION_EQ, |
434 _resolvedInteger(0)); | 434 _resolvedInteger(0)); |
435 expect(_analyze(node), same(_typeProvider.numType)); | 435 expect(_analyze(node), same(_typeProvider.numType)); |
436 _listener.assertNoErrors(); | 436 _listener.assertNoErrors(); |
437 } | 437 } |
438 | 438 |
439 void test_visitAssignmentExpression_compoundIfNull_sameTypes() { | 439 void test_visitAssignmentExpression_compoundIfNull_sameTypes() { |
440 // int i; i ??= 0 | 440 // int i; i ??= 0 |
441 Expression node = AstFactory.assignmentExpression( | 441 Expression node = AstTestFactory.assignmentExpression( |
442 _resolvedVariable(_typeProvider.intType, 'i'), | 442 _resolvedVariable(_typeProvider.intType, 'i'), |
443 TokenType.QUESTION_QUESTION_EQ, | 443 TokenType.QUESTION_QUESTION_EQ, |
444 _resolvedInteger(0)); | 444 _resolvedInteger(0)); |
445 expect(_analyze(node), same(_typeProvider.intType)); | 445 expect(_analyze(node), same(_typeProvider.intType)); |
446 _listener.assertNoErrors(); | 446 _listener.assertNoErrors(); |
447 } | 447 } |
448 | 448 |
449 void test_visitAssignmentExpression_simple() { | 449 void test_visitAssignmentExpression_simple() { |
450 // i = 0 | 450 // i = 0 |
451 InterfaceType intType = _typeProvider.intType; | 451 InterfaceType intType = _typeProvider.intType; |
452 Expression node = AstFactory.assignmentExpression( | 452 Expression node = AstTestFactory.assignmentExpression( |
453 _resolvedVariable(intType, "i"), TokenType.EQ, _resolvedInteger(0)); | 453 _resolvedVariable(intType, "i"), TokenType.EQ, _resolvedInteger(0)); |
454 expect(_analyze(node), same(intType)); | 454 expect(_analyze(node), same(intType)); |
455 _listener.assertNoErrors(); | 455 _listener.assertNoErrors(); |
456 } | 456 } |
457 | 457 |
458 void test_visitAwaitExpression_flattened() { | 458 void test_visitAwaitExpression_flattened() { |
459 // await e, where e has type Future<Future<int>> | 459 // await e, where e has type Future<Future<int>> |
460 InterfaceType intType = _typeProvider.intType; | 460 InterfaceType intType = _typeProvider.intType; |
461 InterfaceType futureIntType = | 461 InterfaceType futureIntType = |
462 _typeProvider.futureType.instantiate(<DartType>[intType]); | 462 _typeProvider.futureType.instantiate(<DartType>[intType]); |
463 InterfaceType futureFutureIntType = | 463 InterfaceType futureFutureIntType = |
464 _typeProvider.futureType.instantiate(<DartType>[futureIntType]); | 464 _typeProvider.futureType.instantiate(<DartType>[futureIntType]); |
465 Expression node = | 465 Expression node = AstTestFactory |
466 AstFactory.awaitExpression(_resolvedVariable(futureFutureIntType, 'e')); | 466 .awaitExpression(_resolvedVariable(futureFutureIntType, 'e')); |
467 expect(_analyze(node), same(intType)); | 467 expect(_analyze(node), same(intType)); |
468 _listener.assertNoErrors(); | 468 _listener.assertNoErrors(); |
469 } | 469 } |
470 | 470 |
471 void test_visitAwaitExpression_simple() { | 471 void test_visitAwaitExpression_simple() { |
472 // await e, where e has type Future<int> | 472 // await e, where e has type Future<int> |
473 InterfaceType intType = _typeProvider.intType; | 473 InterfaceType intType = _typeProvider.intType; |
474 InterfaceType futureIntType = | 474 InterfaceType futureIntType = |
475 _typeProvider.futureType.instantiate(<DartType>[intType]); | 475 _typeProvider.futureType.instantiate(<DartType>[intType]); |
476 Expression node = | 476 Expression node = |
477 AstFactory.awaitExpression(_resolvedVariable(futureIntType, 'e')); | 477 AstTestFactory.awaitExpression(_resolvedVariable(futureIntType, 'e')); |
478 expect(_analyze(node), same(intType)); | 478 expect(_analyze(node), same(intType)); |
479 _listener.assertNoErrors(); | 479 _listener.assertNoErrors(); |
480 } | 480 } |
481 | 481 |
482 void test_visitBinaryExpression_equals() { | 482 void test_visitBinaryExpression_equals() { |
483 // 2 == 3 | 483 // 2 == 3 |
484 Expression node = AstFactory.binaryExpression( | 484 Expression node = AstTestFactory.binaryExpression( |
485 _resolvedInteger(2), TokenType.EQ_EQ, _resolvedInteger(3)); | 485 _resolvedInteger(2), TokenType.EQ_EQ, _resolvedInteger(3)); |
486 expect(_analyze(node), same(_typeProvider.boolType)); | 486 expect(_analyze(node), same(_typeProvider.boolType)); |
487 _listener.assertNoErrors(); | 487 _listener.assertNoErrors(); |
488 } | 488 } |
489 | 489 |
490 void test_visitBinaryExpression_ifNull() { | 490 void test_visitBinaryExpression_ifNull() { |
491 // 1 ?? 1.5 | 491 // 1 ?? 1.5 |
492 Expression node = AstFactory.binaryExpression( | 492 Expression node = AstTestFactory.binaryExpression( |
493 _resolvedInteger(1), TokenType.QUESTION_QUESTION, _resolvedDouble(1.5)); | 493 _resolvedInteger(1), TokenType.QUESTION_QUESTION, _resolvedDouble(1.5)); |
494 expect(_analyze(node), same(_typeProvider.numType)); | 494 expect(_analyze(node), same(_typeProvider.numType)); |
495 _listener.assertNoErrors(); | 495 _listener.assertNoErrors(); |
496 } | 496 } |
497 | 497 |
498 void test_visitBinaryExpression_logicalAnd() { | 498 void test_visitBinaryExpression_logicalAnd() { |
499 // false && true | 499 // false && true |
500 Expression node = AstFactory.binaryExpression( | 500 Expression node = AstTestFactory.binaryExpression( |
501 AstFactory.booleanLiteral(false), | 501 AstTestFactory.booleanLiteral(false), |
502 TokenType.AMPERSAND_AMPERSAND, | 502 TokenType.AMPERSAND_AMPERSAND, |
503 AstFactory.booleanLiteral(true)); | 503 AstTestFactory.booleanLiteral(true)); |
504 expect(_analyze(node), same(_typeProvider.boolType)); | 504 expect(_analyze(node), same(_typeProvider.boolType)); |
505 _listener.assertNoErrors(); | 505 _listener.assertNoErrors(); |
506 } | 506 } |
507 | 507 |
508 void test_visitBinaryExpression_logicalOr() { | 508 void test_visitBinaryExpression_logicalOr() { |
509 // false || true | 509 // false || true |
510 Expression node = AstFactory.binaryExpression( | 510 Expression node = AstTestFactory.binaryExpression( |
511 AstFactory.booleanLiteral(false), | 511 AstTestFactory.booleanLiteral(false), |
512 TokenType.BAR_BAR, | 512 TokenType.BAR_BAR, |
513 AstFactory.booleanLiteral(true)); | 513 AstTestFactory.booleanLiteral(true)); |
514 expect(_analyze(node), same(_typeProvider.boolType)); | 514 expect(_analyze(node), same(_typeProvider.boolType)); |
515 _listener.assertNoErrors(); | 515 _listener.assertNoErrors(); |
516 } | 516 } |
517 | 517 |
518 void test_visitBinaryExpression_minusID_propagated() { | 518 void test_visitBinaryExpression_minusID_propagated() { |
519 // a - b | 519 // a - b |
520 BinaryExpression node = AstFactory.binaryExpression( | 520 BinaryExpression node = AstTestFactory.binaryExpression( |
521 _propagatedVariable(_typeProvider.intType, 'a'), | 521 _propagatedVariable(_typeProvider.intType, 'a'), |
522 TokenType.MINUS, | 522 TokenType.MINUS, |
523 _propagatedVariable(_typeProvider.doubleType, 'b')); | 523 _propagatedVariable(_typeProvider.doubleType, 'b')); |
524 node.propagatedElement = getMethod(_typeProvider.numType, "+"); | 524 node.propagatedElement = getMethod(_typeProvider.numType, "+"); |
525 _analyze(node); | 525 _analyze(node); |
526 expect(node.propagatedType, same(_typeProvider.doubleType)); | 526 expect(node.propagatedType, same(_typeProvider.doubleType)); |
527 _listener.assertNoErrors(); | 527 _listener.assertNoErrors(); |
528 } | 528 } |
529 | 529 |
530 void test_visitBinaryExpression_notEquals() { | 530 void test_visitBinaryExpression_notEquals() { |
531 // 2 != 3 | 531 // 2 != 3 |
532 Expression node = AstFactory.binaryExpression( | 532 Expression node = AstTestFactory.binaryExpression( |
533 _resolvedInteger(2), TokenType.BANG_EQ, _resolvedInteger(3)); | 533 _resolvedInteger(2), TokenType.BANG_EQ, _resolvedInteger(3)); |
534 expect(_analyze(node), same(_typeProvider.boolType)); | 534 expect(_analyze(node), same(_typeProvider.boolType)); |
535 _listener.assertNoErrors(); | 535 _listener.assertNoErrors(); |
536 } | 536 } |
537 | 537 |
538 void test_visitBinaryExpression_plusID() { | 538 void test_visitBinaryExpression_plusID() { |
539 // 1 + 2.0 | 539 // 1 + 2.0 |
540 BinaryExpression node = AstFactory.binaryExpression( | 540 BinaryExpression node = AstTestFactory.binaryExpression( |
541 _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0)); | 541 _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0)); |
542 node.staticElement = getMethod(_typeProvider.numType, "+"); | 542 node.staticElement = getMethod(_typeProvider.numType, "+"); |
543 expect(_analyze(node), same(_typeProvider.doubleType)); | 543 expect(_analyze(node), same(_typeProvider.doubleType)); |
544 _listener.assertNoErrors(); | 544 _listener.assertNoErrors(); |
545 } | 545 } |
546 | 546 |
547 void test_visitBinaryExpression_plusII() { | 547 void test_visitBinaryExpression_plusII() { |
548 // 1 + 2 | 548 // 1 + 2 |
549 BinaryExpression node = AstFactory.binaryExpression( | 549 BinaryExpression node = AstTestFactory.binaryExpression( |
550 _resolvedInteger(1), TokenType.PLUS, _resolvedInteger(2)); | 550 _resolvedInteger(1), TokenType.PLUS, _resolvedInteger(2)); |
551 node.staticElement = getMethod(_typeProvider.numType, "+"); | 551 node.staticElement = getMethod(_typeProvider.numType, "+"); |
552 expect(_analyze(node), same(_typeProvider.intType)); | 552 expect(_analyze(node), same(_typeProvider.intType)); |
553 _listener.assertNoErrors(); | 553 _listener.assertNoErrors(); |
554 } | 554 } |
555 | 555 |
556 void test_visitBinaryExpression_plusII_propagated() { | 556 void test_visitBinaryExpression_plusII_propagated() { |
557 // a + b | 557 // a + b |
558 BinaryExpression node = AstFactory.binaryExpression( | 558 BinaryExpression node = AstTestFactory.binaryExpression( |
559 _propagatedVariable(_typeProvider.intType, 'a'), | 559 _propagatedVariable(_typeProvider.intType, 'a'), |
560 TokenType.PLUS, | 560 TokenType.PLUS, |
561 _propagatedVariable(_typeProvider.intType, 'b')); | 561 _propagatedVariable(_typeProvider.intType, 'b')); |
562 node.propagatedElement = getMethod(_typeProvider.numType, "+"); | 562 node.propagatedElement = getMethod(_typeProvider.numType, "+"); |
563 _analyze(node); | 563 _analyze(node); |
564 expect(node.propagatedType, same(_typeProvider.intType)); | 564 expect(node.propagatedType, same(_typeProvider.intType)); |
565 _listener.assertNoErrors(); | 565 _listener.assertNoErrors(); |
566 } | 566 } |
567 | 567 |
568 void test_visitBinaryExpression_slash() { | 568 void test_visitBinaryExpression_slash() { |
569 // 2 / 2 | 569 // 2 / 2 |
570 BinaryExpression node = AstFactory.binaryExpression( | 570 BinaryExpression node = AstTestFactory.binaryExpression( |
571 _resolvedInteger(2), TokenType.SLASH, _resolvedInteger(2)); | 571 _resolvedInteger(2), TokenType.SLASH, _resolvedInteger(2)); |
572 node.staticElement = getMethod(_typeProvider.numType, "/"); | 572 node.staticElement = getMethod(_typeProvider.numType, "/"); |
573 expect(_analyze(node), same(_typeProvider.doubleType)); | 573 expect(_analyze(node), same(_typeProvider.doubleType)); |
574 _listener.assertNoErrors(); | 574 _listener.assertNoErrors(); |
575 } | 575 } |
576 | 576 |
577 void test_visitBinaryExpression_star_notSpecial() { | 577 void test_visitBinaryExpression_star_notSpecial() { |
578 // class A { | 578 // class A { |
579 // A operator *(double value); | 579 // A operator *(double value); |
580 // } | 580 // } |
581 // (a as A) * 2.0 | 581 // (a as A) * 2.0 |
582 ClassElementImpl classA = ElementFactory.classElement2("A"); | 582 ClassElementImpl classA = ElementFactory.classElement2("A"); |
583 InterfaceType typeA = classA.type; | 583 InterfaceType typeA = classA.type; |
584 MethodElement operator = | 584 MethodElement operator = |
585 ElementFactory.methodElement("*", typeA, [_typeProvider.doubleType]); | 585 ElementFactory.methodElement("*", typeA, [_typeProvider.doubleType]); |
586 classA.methods = <MethodElement>[operator]; | 586 classA.methods = <MethodElement>[operator]; |
587 BinaryExpression node = AstFactory.binaryExpression( | 587 BinaryExpression node = AstTestFactory.binaryExpression( |
588 AstFactory.asExpression( | 588 AstTestFactory.asExpression( |
589 AstFactory.identifier3("a"), AstFactory.typeName(classA)), | 589 AstTestFactory.identifier3("a"), AstTestFactory.typeName(classA)), |
590 TokenType.PLUS, | 590 TokenType.PLUS, |
591 _resolvedDouble(2.0)); | 591 _resolvedDouble(2.0)); |
592 node.staticElement = operator; | 592 node.staticElement = operator; |
593 expect(_analyze(node), same(typeA)); | 593 expect(_analyze(node), same(typeA)); |
594 _listener.assertNoErrors(); | 594 _listener.assertNoErrors(); |
595 } | 595 } |
596 | 596 |
597 void test_visitBinaryExpression_starID() { | 597 void test_visitBinaryExpression_starID() { |
598 // 1 * 2.0 | 598 // 1 * 2.0 |
599 BinaryExpression node = AstFactory.binaryExpression( | 599 BinaryExpression node = AstTestFactory.binaryExpression( |
600 _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0)); | 600 _resolvedInteger(1), TokenType.PLUS, _resolvedDouble(2.0)); |
601 node.staticElement = getMethod(_typeProvider.numType, "*"); | 601 node.staticElement = getMethod(_typeProvider.numType, "*"); |
602 expect(_analyze(node), same(_typeProvider.doubleType)); | 602 expect(_analyze(node), same(_typeProvider.doubleType)); |
603 _listener.assertNoErrors(); | 603 _listener.assertNoErrors(); |
604 } | 604 } |
605 | 605 |
606 void test_visitBooleanLiteral_false() { | 606 void test_visitBooleanLiteral_false() { |
607 // false | 607 // false |
608 Expression node = AstFactory.booleanLiteral(false); | 608 Expression node = AstTestFactory.booleanLiteral(false); |
609 expect(_analyze(node), same(_typeProvider.boolType)); | 609 expect(_analyze(node), same(_typeProvider.boolType)); |
610 _listener.assertNoErrors(); | 610 _listener.assertNoErrors(); |
611 } | 611 } |
612 | 612 |
613 void test_visitBooleanLiteral_true() { | 613 void test_visitBooleanLiteral_true() { |
614 // true | 614 // true |
615 Expression node = AstFactory.booleanLiteral(true); | 615 Expression node = AstTestFactory.booleanLiteral(true); |
616 expect(_analyze(node), same(_typeProvider.boolType)); | 616 expect(_analyze(node), same(_typeProvider.boolType)); |
617 _listener.assertNoErrors(); | 617 _listener.assertNoErrors(); |
618 } | 618 } |
619 | 619 |
620 void test_visitCascadeExpression() { | 620 void test_visitCascadeExpression() { |
621 // a..length | 621 // a..length |
622 Expression node = AstFactory.cascadeExpression( | 622 Expression node = AstTestFactory.cascadeExpression( |
623 _resolvedString("a"), [AstFactory.propertyAccess2(null, "length")]); | 623 _resolvedString("a"), [AstTestFactory.propertyAccess2(null, "length")]); |
624 expect(_analyze(node), same(_typeProvider.stringType)); | 624 expect(_analyze(node), same(_typeProvider.stringType)); |
625 _listener.assertNoErrors(); | 625 _listener.assertNoErrors(); |
626 } | 626 } |
627 | 627 |
628 void test_visitConditionalExpression_differentTypes() { | 628 void test_visitConditionalExpression_differentTypes() { |
629 // true ? 1.0 : 0 | 629 // true ? 1.0 : 0 |
630 Expression node = AstFactory.conditionalExpression( | 630 Expression node = AstTestFactory.conditionalExpression( |
631 AstFactory.booleanLiteral(true), | 631 AstTestFactory.booleanLiteral(true), |
632 _resolvedDouble(1.0), | 632 _resolvedDouble(1.0), |
633 _resolvedInteger(0)); | 633 _resolvedInteger(0)); |
634 expect(_analyze(node), same(_typeProvider.numType)); | 634 expect(_analyze(node), same(_typeProvider.numType)); |
635 _listener.assertNoErrors(); | 635 _listener.assertNoErrors(); |
636 } | 636 } |
637 | 637 |
638 void test_visitConditionalExpression_sameTypes() { | 638 void test_visitConditionalExpression_sameTypes() { |
639 // true ? 1 : 0 | 639 // true ? 1 : 0 |
640 Expression node = AstFactory.conditionalExpression( | 640 Expression node = AstTestFactory.conditionalExpression( |
641 AstFactory.booleanLiteral(true), | 641 AstTestFactory.booleanLiteral(true), |
642 _resolvedInteger(1), | 642 _resolvedInteger(1), |
643 _resolvedInteger(0)); | 643 _resolvedInteger(0)); |
644 expect(_analyze(node), same(_typeProvider.intType)); | 644 expect(_analyze(node), same(_typeProvider.intType)); |
645 _listener.assertNoErrors(); | 645 _listener.assertNoErrors(); |
646 } | 646 } |
647 | 647 |
648 void test_visitDoubleLiteral() { | 648 void test_visitDoubleLiteral() { |
649 // 4.33 | 649 // 4.33 |
650 Expression node = AstFactory.doubleLiteral(4.33); | 650 Expression node = AstTestFactory.doubleLiteral(4.33); |
651 expect(_analyze(node), same(_typeProvider.doubleType)); | 651 expect(_analyze(node), same(_typeProvider.doubleType)); |
652 _listener.assertNoErrors(); | 652 _listener.assertNoErrors(); |
653 } | 653 } |
654 | 654 |
655 void test_visitFunctionExpression_async_block() { | 655 void test_visitFunctionExpression_async_block() { |
656 // () async {} | 656 // () async {} |
657 BlockFunctionBody body = AstFactory.blockFunctionBody2(); | 657 BlockFunctionBody body = AstTestFactory.blockFunctionBody2(); |
658 body.keyword = TokenFactory.tokenFromString('async'); | 658 body.keyword = TokenFactory.tokenFromString('async'); |
659 FunctionExpression node = | 659 FunctionExpression node = _resolvedFunctionExpression( |
660 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 660 AstTestFactory.formalParameterList([]), body); |
661 DartType resultType = _analyze(node); | 661 DartType resultType = _analyze(node); |
662 _assertFunctionType( | 662 _assertFunctionType( |
663 _typeProvider.futureDynamicType, null, null, null, resultType); | 663 _typeProvider.futureDynamicType, null, null, null, resultType); |
664 _listener.assertNoErrors(); | 664 _listener.assertNoErrors(); |
665 } | 665 } |
666 | 666 |
667 void test_visitFunctionExpression_async_expression() { | 667 void test_visitFunctionExpression_async_expression() { |
668 // () async => e, where e has type int | 668 // () async => e, where e has type int |
669 InterfaceType intType = _typeProvider.intType; | 669 InterfaceType intType = _typeProvider.intType; |
670 InterfaceType futureIntType = | 670 InterfaceType futureIntType = |
671 _typeProvider.futureType.instantiate(<DartType>[intType]); | 671 _typeProvider.futureType.instantiate(<DartType>[intType]); |
672 Expression expression = _resolvedVariable(intType, 'e'); | 672 Expression expression = _resolvedVariable(intType, 'e'); |
673 ExpressionFunctionBody body = AstFactory.expressionFunctionBody(expression); | 673 ExpressionFunctionBody body = |
| 674 AstTestFactory.expressionFunctionBody(expression); |
674 body.keyword = TokenFactory.tokenFromString('async'); | 675 body.keyword = TokenFactory.tokenFromString('async'); |
675 FunctionExpression node = | 676 FunctionExpression node = _resolvedFunctionExpression( |
676 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 677 AstTestFactory.formalParameterList([]), body); |
677 DartType resultType = _analyze(node); | 678 DartType resultType = _analyze(node); |
678 _assertFunctionType(futureIntType, null, null, null, resultType); | 679 _assertFunctionType(futureIntType, null, null, null, resultType); |
679 _listener.assertNoErrors(); | 680 _listener.assertNoErrors(); |
680 } | 681 } |
681 | 682 |
682 void test_visitFunctionExpression_async_expression_flatten() { | 683 void test_visitFunctionExpression_async_expression_flatten() { |
683 // () async => e, where e has type Future<int> | 684 // () async => e, where e has type Future<int> |
684 InterfaceType intType = _typeProvider.intType; | 685 InterfaceType intType = _typeProvider.intType; |
685 InterfaceType futureIntType = | 686 InterfaceType futureIntType = |
686 _typeProvider.futureType.instantiate(<DartType>[intType]); | 687 _typeProvider.futureType.instantiate(<DartType>[intType]); |
687 Expression expression = _resolvedVariable(futureIntType, 'e'); | 688 Expression expression = _resolvedVariable(futureIntType, 'e'); |
688 ExpressionFunctionBody body = AstFactory.expressionFunctionBody(expression); | 689 ExpressionFunctionBody body = |
| 690 AstTestFactory.expressionFunctionBody(expression); |
689 body.keyword = TokenFactory.tokenFromString('async'); | 691 body.keyword = TokenFactory.tokenFromString('async'); |
690 FunctionExpression node = | 692 FunctionExpression node = _resolvedFunctionExpression( |
691 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 693 AstTestFactory.formalParameterList([]), body); |
692 DartType resultType = _analyze(node); | 694 DartType resultType = _analyze(node); |
693 _assertFunctionType(futureIntType, null, null, null, resultType); | 695 _assertFunctionType(futureIntType, null, null, null, resultType); |
694 _listener.assertNoErrors(); | 696 _listener.assertNoErrors(); |
695 } | 697 } |
696 | 698 |
697 void test_visitFunctionExpression_async_expression_flatten_twice() { | 699 void test_visitFunctionExpression_async_expression_flatten_twice() { |
698 // () async => e, where e has type Future<Future<int>> | 700 // () async => e, where e has type Future<Future<int>> |
699 InterfaceType intType = _typeProvider.intType; | 701 InterfaceType intType = _typeProvider.intType; |
700 InterfaceType futureIntType = | 702 InterfaceType futureIntType = |
701 _typeProvider.futureType.instantiate(<DartType>[intType]); | 703 _typeProvider.futureType.instantiate(<DartType>[intType]); |
702 InterfaceType futureFutureIntType = | 704 InterfaceType futureFutureIntType = |
703 _typeProvider.futureType.instantiate(<DartType>[futureIntType]); | 705 _typeProvider.futureType.instantiate(<DartType>[futureIntType]); |
704 Expression expression = _resolvedVariable(futureFutureIntType, 'e'); | 706 Expression expression = _resolvedVariable(futureFutureIntType, 'e'); |
705 ExpressionFunctionBody body = AstFactory.expressionFunctionBody(expression); | 707 ExpressionFunctionBody body = |
| 708 AstTestFactory.expressionFunctionBody(expression); |
706 body.keyword = TokenFactory.tokenFromString('async'); | 709 body.keyword = TokenFactory.tokenFromString('async'); |
707 FunctionExpression node = | 710 FunctionExpression node = _resolvedFunctionExpression( |
708 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 711 AstTestFactory.formalParameterList([]), body); |
709 DartType resultType = _analyze(node); | 712 DartType resultType = _analyze(node); |
710 _assertFunctionType(futureIntType, null, null, null, resultType); | 713 _assertFunctionType(futureIntType, null, null, null, resultType); |
711 _listener.assertNoErrors(); | 714 _listener.assertNoErrors(); |
712 } | 715 } |
713 | 716 |
714 void test_visitFunctionExpression_generator_async() { | 717 void test_visitFunctionExpression_generator_async() { |
715 // () async* {} | 718 // () async* {} |
716 BlockFunctionBody body = AstFactory.blockFunctionBody2(); | 719 BlockFunctionBody body = AstTestFactory.blockFunctionBody2(); |
717 body.keyword = TokenFactory.tokenFromString('async'); | 720 body.keyword = TokenFactory.tokenFromString('async'); |
718 body.star = TokenFactory.tokenFromType(TokenType.STAR); | 721 body.star = TokenFactory.tokenFromType(TokenType.STAR); |
719 FunctionExpression node = | 722 FunctionExpression node = _resolvedFunctionExpression( |
720 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 723 AstTestFactory.formalParameterList([]), body); |
721 DartType resultType = _analyze(node); | 724 DartType resultType = _analyze(node); |
722 _assertFunctionType( | 725 _assertFunctionType( |
723 _typeProvider.streamDynamicType, null, null, null, resultType); | 726 _typeProvider.streamDynamicType, null, null, null, resultType); |
724 _listener.assertNoErrors(); | 727 _listener.assertNoErrors(); |
725 } | 728 } |
726 | 729 |
727 void test_visitFunctionExpression_generator_sync() { | 730 void test_visitFunctionExpression_generator_sync() { |
728 // () sync* {} | 731 // () sync* {} |
729 BlockFunctionBody body = AstFactory.blockFunctionBody2(); | 732 BlockFunctionBody body = AstTestFactory.blockFunctionBody2(); |
730 body.keyword = TokenFactory.tokenFromString('sync'); | 733 body.keyword = TokenFactory.tokenFromString('sync'); |
731 body.star = TokenFactory.tokenFromType(TokenType.STAR); | 734 body.star = TokenFactory.tokenFromType(TokenType.STAR); |
732 FunctionExpression node = | 735 FunctionExpression node = _resolvedFunctionExpression( |
733 _resolvedFunctionExpression(AstFactory.formalParameterList([]), body); | 736 AstTestFactory.formalParameterList([]), body); |
734 DartType resultType = _analyze(node); | 737 DartType resultType = _analyze(node); |
735 _assertFunctionType( | 738 _assertFunctionType( |
736 _typeProvider.iterableDynamicType, null, null, null, resultType); | 739 _typeProvider.iterableDynamicType, null, null, null, resultType); |
737 _listener.assertNoErrors(); | 740 _listener.assertNoErrors(); |
738 } | 741 } |
739 | 742 |
740 void test_visitFunctionExpression_named_block() { | 743 void test_visitFunctionExpression_named_block() { |
741 // ({p1 : 0, p2 : 0}) {} | 744 // ({p1 : 0, p2 : 0}) {} |
742 DartType dynamicType = _typeProvider.dynamicType; | 745 DartType dynamicType = _typeProvider.dynamicType; |
743 FormalParameter p1 = AstFactory.namedFormalParameter( | 746 FormalParameter p1 = AstTestFactory.namedFormalParameter( |
744 AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0)); | 747 AstTestFactory.simpleFormalParameter3("p1"), _resolvedInteger(0)); |
745 _setType(p1, dynamicType); | 748 _setType(p1, dynamicType); |
746 FormalParameter p2 = AstFactory.namedFormalParameter( | 749 FormalParameter p2 = AstTestFactory.namedFormalParameter( |
747 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 750 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
748 _setType(p2, dynamicType); | 751 _setType(p2, dynamicType); |
749 FunctionExpression node = _resolvedFunctionExpression( | 752 FunctionExpression node = _resolvedFunctionExpression( |
750 AstFactory.formalParameterList([p1, p2]), | 753 AstTestFactory.formalParameterList([p1, p2]), |
751 AstFactory.blockFunctionBody2()); | 754 AstTestFactory.blockFunctionBody2()); |
752 _analyze5(p1); | 755 _analyze5(p1); |
753 _analyze5(p2); | 756 _analyze5(p2); |
754 DartType resultType = _analyze(node); | 757 DartType resultType = _analyze(node); |
755 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 758 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
756 expectedNamedTypes["p1"] = dynamicType; | 759 expectedNamedTypes["p1"] = dynamicType; |
757 expectedNamedTypes["p2"] = dynamicType; | 760 expectedNamedTypes["p2"] = dynamicType; |
758 _assertFunctionType( | 761 _assertFunctionType( |
759 dynamicType, null, null, expectedNamedTypes, resultType); | 762 dynamicType, null, null, expectedNamedTypes, resultType); |
760 _listener.assertNoErrors(); | 763 _listener.assertNoErrors(); |
761 } | 764 } |
762 | 765 |
763 void test_visitFunctionExpression_named_expression() { | 766 void test_visitFunctionExpression_named_expression() { |
764 // ({p : 0}) -> 0; | 767 // ({p : 0}) -> 0; |
765 DartType dynamicType = _typeProvider.dynamicType; | 768 DartType dynamicType = _typeProvider.dynamicType; |
766 FormalParameter p = AstFactory.namedFormalParameter( | 769 FormalParameter p = AstTestFactory.namedFormalParameter( |
767 AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0)); | 770 AstTestFactory.simpleFormalParameter3("p"), _resolvedInteger(0)); |
768 _setType(p, dynamicType); | 771 _setType(p, dynamicType); |
769 FunctionExpression node = _resolvedFunctionExpression( | 772 FunctionExpression node = _resolvedFunctionExpression( |
770 AstFactory.formalParameterList([p]), | 773 AstTestFactory.formalParameterList([p]), |
771 AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 774 AstTestFactory.expressionFunctionBody(_resolvedInteger(0))); |
772 _analyze5(p); | 775 _analyze5(p); |
773 DartType resultType = _analyze(node); | 776 DartType resultType = _analyze(node); |
774 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 777 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
775 expectedNamedTypes["p"] = dynamicType; | 778 expectedNamedTypes["p"] = dynamicType; |
776 _assertFunctionType( | 779 _assertFunctionType( |
777 _typeProvider.intType, null, null, expectedNamedTypes, resultType); | 780 _typeProvider.intType, null, null, expectedNamedTypes, resultType); |
778 _listener.assertNoErrors(); | 781 _listener.assertNoErrors(); |
779 } | 782 } |
780 | 783 |
781 void test_visitFunctionExpression_normal_block() { | 784 void test_visitFunctionExpression_normal_block() { |
782 // (p1, p2) {} | 785 // (p1, p2) {} |
783 DartType dynamicType = _typeProvider.dynamicType; | 786 DartType dynamicType = _typeProvider.dynamicType; |
784 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 787 FormalParameter p1 = AstTestFactory.simpleFormalParameter3("p1"); |
785 _setType(p1, dynamicType); | 788 _setType(p1, dynamicType); |
786 FormalParameter p2 = AstFactory.simpleFormalParameter3("p2"); | 789 FormalParameter p2 = AstTestFactory.simpleFormalParameter3("p2"); |
787 _setType(p2, dynamicType); | 790 _setType(p2, dynamicType); |
788 FunctionExpression node = _resolvedFunctionExpression( | 791 FunctionExpression node = _resolvedFunctionExpression( |
789 AstFactory.formalParameterList([p1, p2]), | 792 AstTestFactory.formalParameterList([p1, p2]), |
790 AstFactory.blockFunctionBody2()); | 793 AstTestFactory.blockFunctionBody2()); |
791 _analyze5(p1); | 794 _analyze5(p1); |
792 _analyze5(p2); | 795 _analyze5(p2); |
793 DartType resultType = _analyze(node); | 796 DartType resultType = _analyze(node); |
794 _assertFunctionType(dynamicType, <DartType>[dynamicType, dynamicType], null, | 797 _assertFunctionType(dynamicType, <DartType>[dynamicType, dynamicType], null, |
795 null, resultType); | 798 null, resultType); |
796 _listener.assertNoErrors(); | 799 _listener.assertNoErrors(); |
797 } | 800 } |
798 | 801 |
799 void test_visitFunctionExpression_normal_expression() { | 802 void test_visitFunctionExpression_normal_expression() { |
800 // (p1, p2) -> 0 | 803 // (p1, p2) -> 0 |
801 DartType dynamicType = _typeProvider.dynamicType; | 804 DartType dynamicType = _typeProvider.dynamicType; |
802 FormalParameter p = AstFactory.simpleFormalParameter3("p"); | 805 FormalParameter p = AstTestFactory.simpleFormalParameter3("p"); |
803 _setType(p, dynamicType); | 806 _setType(p, dynamicType); |
804 FunctionExpression node = _resolvedFunctionExpression( | 807 FunctionExpression node = _resolvedFunctionExpression( |
805 AstFactory.formalParameterList([p]), | 808 AstTestFactory.formalParameterList([p]), |
806 AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 809 AstTestFactory.expressionFunctionBody(_resolvedInteger(0))); |
807 _analyze5(p); | 810 _analyze5(p); |
808 DartType resultType = _analyze(node); | 811 DartType resultType = _analyze(node); |
809 _assertFunctionType( | 812 _assertFunctionType( |
810 _typeProvider.intType, <DartType>[dynamicType], null, null, resultType); | 813 _typeProvider.intType, <DartType>[dynamicType], null, null, resultType); |
811 _listener.assertNoErrors(); | 814 _listener.assertNoErrors(); |
812 } | 815 } |
813 | 816 |
814 void test_visitFunctionExpression_normalAndNamed_block() { | 817 void test_visitFunctionExpression_normalAndNamed_block() { |
815 // (p1, {p2 : 0}) {} | 818 // (p1, {p2 : 0}) {} |
816 DartType dynamicType = _typeProvider.dynamicType; | 819 DartType dynamicType = _typeProvider.dynamicType; |
817 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 820 FormalParameter p1 = AstTestFactory.simpleFormalParameter3("p1"); |
818 _setType(p1, dynamicType); | 821 _setType(p1, dynamicType); |
819 FormalParameter p2 = AstFactory.namedFormalParameter( | 822 FormalParameter p2 = AstTestFactory.namedFormalParameter( |
820 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 823 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
821 _setType(p2, dynamicType); | 824 _setType(p2, dynamicType); |
822 FunctionExpression node = _resolvedFunctionExpression( | 825 FunctionExpression node = _resolvedFunctionExpression( |
823 AstFactory.formalParameterList([p1, p2]), | 826 AstTestFactory.formalParameterList([p1, p2]), |
824 AstFactory.blockFunctionBody2()); | 827 AstTestFactory.blockFunctionBody2()); |
825 _analyze5(p2); | 828 _analyze5(p2); |
826 DartType resultType = _analyze(node); | 829 DartType resultType = _analyze(node); |
827 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 830 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
828 expectedNamedTypes["p2"] = dynamicType; | 831 expectedNamedTypes["p2"] = dynamicType; |
829 _assertFunctionType(dynamicType, <DartType>[dynamicType], null, | 832 _assertFunctionType(dynamicType, <DartType>[dynamicType], null, |
830 expectedNamedTypes, resultType); | 833 expectedNamedTypes, resultType); |
831 _listener.assertNoErrors(); | 834 _listener.assertNoErrors(); |
832 } | 835 } |
833 | 836 |
834 void test_visitFunctionExpression_normalAndNamed_expression() { | 837 void test_visitFunctionExpression_normalAndNamed_expression() { |
835 // (p1, {p2 : 0}) -> 0 | 838 // (p1, {p2 : 0}) -> 0 |
836 DartType dynamicType = _typeProvider.dynamicType; | 839 DartType dynamicType = _typeProvider.dynamicType; |
837 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 840 FormalParameter p1 = AstTestFactory.simpleFormalParameter3("p1"); |
838 _setType(p1, dynamicType); | 841 _setType(p1, dynamicType); |
839 FormalParameter p2 = AstFactory.namedFormalParameter( | 842 FormalParameter p2 = AstTestFactory.namedFormalParameter( |
840 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 843 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
841 _setType(p2, dynamicType); | 844 _setType(p2, dynamicType); |
842 FunctionExpression node = _resolvedFunctionExpression( | 845 FunctionExpression node = _resolvedFunctionExpression( |
843 AstFactory.formalParameterList([p1, p2]), | 846 AstTestFactory.formalParameterList([p1, p2]), |
844 AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 847 AstTestFactory.expressionFunctionBody(_resolvedInteger(0))); |
845 _analyze5(p2); | 848 _analyze5(p2); |
846 DartType resultType = _analyze(node); | 849 DartType resultType = _analyze(node); |
847 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); | 850 Map<String, DartType> expectedNamedTypes = new HashMap<String, DartType>(); |
848 expectedNamedTypes["p2"] = dynamicType; | 851 expectedNamedTypes["p2"] = dynamicType; |
849 _assertFunctionType(_typeProvider.intType, <DartType>[dynamicType], null, | 852 _assertFunctionType(_typeProvider.intType, <DartType>[dynamicType], null, |
850 expectedNamedTypes, resultType); | 853 expectedNamedTypes, resultType); |
851 _listener.assertNoErrors(); | 854 _listener.assertNoErrors(); |
852 } | 855 } |
853 | 856 |
854 void test_visitFunctionExpression_normalAndPositional_block() { | 857 void test_visitFunctionExpression_normalAndPositional_block() { |
855 // (p1, [p2 = 0]) {} | 858 // (p1, [p2 = 0]) {} |
856 DartType dynamicType = _typeProvider.dynamicType; | 859 DartType dynamicType = _typeProvider.dynamicType; |
857 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 860 FormalParameter p1 = AstTestFactory.simpleFormalParameter3("p1"); |
858 _setType(p1, dynamicType); | 861 _setType(p1, dynamicType); |
859 FormalParameter p2 = AstFactory.positionalFormalParameter( | 862 FormalParameter p2 = AstTestFactory.positionalFormalParameter( |
860 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 863 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
861 _setType(p2, dynamicType); | 864 _setType(p2, dynamicType); |
862 FunctionExpression node = _resolvedFunctionExpression( | 865 FunctionExpression node = _resolvedFunctionExpression( |
863 AstFactory.formalParameterList([p1, p2]), | 866 AstTestFactory.formalParameterList([p1, p2]), |
864 AstFactory.blockFunctionBody2()); | 867 AstTestFactory.blockFunctionBody2()); |
865 _analyze5(p1); | 868 _analyze5(p1); |
866 _analyze5(p2); | 869 _analyze5(p2); |
867 DartType resultType = _analyze(node); | 870 DartType resultType = _analyze(node); |
868 _assertFunctionType(dynamicType, <DartType>[dynamicType], | 871 _assertFunctionType(dynamicType, <DartType>[dynamicType], |
869 <DartType>[dynamicType], null, resultType); | 872 <DartType>[dynamicType], null, resultType); |
870 _listener.assertNoErrors(); | 873 _listener.assertNoErrors(); |
871 } | 874 } |
872 | 875 |
873 void test_visitFunctionExpression_normalAndPositional_expression() { | 876 void test_visitFunctionExpression_normalAndPositional_expression() { |
874 // (p1, [p2 = 0]) -> 0 | 877 // (p1, [p2 = 0]) -> 0 |
875 DartType dynamicType = _typeProvider.dynamicType; | 878 DartType dynamicType = _typeProvider.dynamicType; |
876 FormalParameter p1 = AstFactory.simpleFormalParameter3("p1"); | 879 FormalParameter p1 = AstTestFactory.simpleFormalParameter3("p1"); |
877 _setType(p1, dynamicType); | 880 _setType(p1, dynamicType); |
878 FormalParameter p2 = AstFactory.positionalFormalParameter( | 881 FormalParameter p2 = AstTestFactory.positionalFormalParameter( |
879 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 882 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
880 _setType(p2, dynamicType); | 883 _setType(p2, dynamicType); |
881 FunctionExpression node = _resolvedFunctionExpression( | 884 FunctionExpression node = _resolvedFunctionExpression( |
882 AstFactory.formalParameterList([p1, p2]), | 885 AstTestFactory.formalParameterList([p1, p2]), |
883 AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 886 AstTestFactory.expressionFunctionBody(_resolvedInteger(0))); |
884 _analyze5(p1); | 887 _analyze5(p1); |
885 _analyze5(p2); | 888 _analyze5(p2); |
886 DartType resultType = _analyze(node); | 889 DartType resultType = _analyze(node); |
887 _assertFunctionType(_typeProvider.intType, <DartType>[dynamicType], | 890 _assertFunctionType(_typeProvider.intType, <DartType>[dynamicType], |
888 <DartType>[dynamicType], null, resultType); | 891 <DartType>[dynamicType], null, resultType); |
889 _listener.assertNoErrors(); | 892 _listener.assertNoErrors(); |
890 } | 893 } |
891 | 894 |
892 void test_visitFunctionExpression_positional_block() { | 895 void test_visitFunctionExpression_positional_block() { |
893 // ([p1 = 0, p2 = 0]) {} | 896 // ([p1 = 0, p2 = 0]) {} |
894 DartType dynamicType = _typeProvider.dynamicType; | 897 DartType dynamicType = _typeProvider.dynamicType; |
895 FormalParameter p1 = AstFactory.positionalFormalParameter( | 898 FormalParameter p1 = AstTestFactory.positionalFormalParameter( |
896 AstFactory.simpleFormalParameter3("p1"), _resolvedInteger(0)); | 899 AstTestFactory.simpleFormalParameter3("p1"), _resolvedInteger(0)); |
897 _setType(p1, dynamicType); | 900 _setType(p1, dynamicType); |
898 FormalParameter p2 = AstFactory.positionalFormalParameter( | 901 FormalParameter p2 = AstTestFactory.positionalFormalParameter( |
899 AstFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); | 902 AstTestFactory.simpleFormalParameter3("p2"), _resolvedInteger(0)); |
900 _setType(p2, dynamicType); | 903 _setType(p2, dynamicType); |
901 FunctionExpression node = _resolvedFunctionExpression( | 904 FunctionExpression node = _resolvedFunctionExpression( |
902 AstFactory.formalParameterList([p1, p2]), | 905 AstTestFactory.formalParameterList([p1, p2]), |
903 AstFactory.blockFunctionBody2()); | 906 AstTestFactory.blockFunctionBody2()); |
904 _analyze5(p1); | 907 _analyze5(p1); |
905 _analyze5(p2); | 908 _analyze5(p2); |
906 DartType resultType = _analyze(node); | 909 DartType resultType = _analyze(node); |
907 _assertFunctionType(dynamicType, null, <DartType>[dynamicType, dynamicType], | 910 _assertFunctionType(dynamicType, null, <DartType>[dynamicType, dynamicType], |
908 null, resultType); | 911 null, resultType); |
909 _listener.assertNoErrors(); | 912 _listener.assertNoErrors(); |
910 } | 913 } |
911 | 914 |
912 void test_visitFunctionExpression_positional_expression() { | 915 void test_visitFunctionExpression_positional_expression() { |
913 // ([p1 = 0, p2 = 0]) -> 0 | 916 // ([p1 = 0, p2 = 0]) -> 0 |
914 DartType dynamicType = _typeProvider.dynamicType; | 917 DartType dynamicType = _typeProvider.dynamicType; |
915 FormalParameter p = AstFactory.positionalFormalParameter( | 918 FormalParameter p = AstTestFactory.positionalFormalParameter( |
916 AstFactory.simpleFormalParameter3("p"), _resolvedInteger(0)); | 919 AstTestFactory.simpleFormalParameter3("p"), _resolvedInteger(0)); |
917 _setType(p, dynamicType); | 920 _setType(p, dynamicType); |
918 FunctionExpression node = _resolvedFunctionExpression( | 921 FunctionExpression node = _resolvedFunctionExpression( |
919 AstFactory.formalParameterList([p]), | 922 AstTestFactory.formalParameterList([p]), |
920 AstFactory.expressionFunctionBody(_resolvedInteger(0))); | 923 AstTestFactory.expressionFunctionBody(_resolvedInteger(0))); |
921 _analyze5(p); | 924 _analyze5(p); |
922 DartType resultType = _analyze(node); | 925 DartType resultType = _analyze(node); |
923 _assertFunctionType( | 926 _assertFunctionType( |
924 _typeProvider.intType, null, <DartType>[dynamicType], null, resultType); | 927 _typeProvider.intType, null, <DartType>[dynamicType], null, resultType); |
925 _listener.assertNoErrors(); | 928 _listener.assertNoErrors(); |
926 } | 929 } |
927 | 930 |
928 void test_visitIndexExpression_getter() { | 931 void test_visitIndexExpression_getter() { |
929 // List a; | 932 // List a; |
930 // a[2] | 933 // a[2] |
931 InterfaceType listType = _typeProvider.listType; | 934 InterfaceType listType = _typeProvider.listType; |
932 SimpleIdentifier identifier = _resolvedVariable(listType, "a"); | 935 SimpleIdentifier identifier = _resolvedVariable(listType, "a"); |
933 IndexExpression node = | 936 IndexExpression node = |
934 AstFactory.indexExpression(identifier, _resolvedInteger(2)); | 937 AstTestFactory.indexExpression(identifier, _resolvedInteger(2)); |
935 MethodElement indexMethod = listType.element.methods[0]; | 938 MethodElement indexMethod = listType.element.methods[0]; |
936 node.staticElement = indexMethod; | 939 node.staticElement = indexMethod; |
937 expect(_analyze(node), same(listType.typeArguments[0])); | 940 expect(_analyze(node), same(listType.typeArguments[0])); |
938 _listener.assertNoErrors(); | 941 _listener.assertNoErrors(); |
939 } | 942 } |
940 | 943 |
941 void test_visitIndexExpression_setter() { | 944 void test_visitIndexExpression_setter() { |
942 // List a; | 945 // List a; |
943 // a[2] = 0 | 946 // a[2] = 0 |
944 InterfaceType listType = _typeProvider.listType; | 947 InterfaceType listType = _typeProvider.listType; |
945 SimpleIdentifier identifier = _resolvedVariable(listType, "a"); | 948 SimpleIdentifier identifier = _resolvedVariable(listType, "a"); |
946 IndexExpression node = | 949 IndexExpression node = |
947 AstFactory.indexExpression(identifier, _resolvedInteger(2)); | 950 AstTestFactory.indexExpression(identifier, _resolvedInteger(2)); |
948 MethodElement indexMethod = listType.element.methods[1]; | 951 MethodElement indexMethod = listType.element.methods[1]; |
949 node.staticElement = indexMethod; | 952 node.staticElement = indexMethod; |
950 AstFactory.assignmentExpression(node, TokenType.EQ, AstFactory.integer(0)); | 953 AstTestFactory.assignmentExpression( |
| 954 node, TokenType.EQ, AstTestFactory.integer(0)); |
951 expect(_analyze(node), same(listType.typeArguments[0])); | 955 expect(_analyze(node), same(listType.typeArguments[0])); |
952 _listener.assertNoErrors(); | 956 _listener.assertNoErrors(); |
953 } | 957 } |
954 | 958 |
955 void test_visitIndexExpression_typeParameters() { | 959 void test_visitIndexExpression_typeParameters() { |
956 // List<int> list = ... | 960 // List<int> list = ... |
957 // list[0] | 961 // list[0] |
958 InterfaceType intType = _typeProvider.intType; | 962 InterfaceType intType = _typeProvider.intType; |
959 InterfaceType listType = _typeProvider.listType; | 963 InterfaceType listType = _typeProvider.listType; |
960 // (int) -> E | 964 // (int) -> E |
961 MethodElement methodElement = getMethod(listType, "[]"); | 965 MethodElement methodElement = getMethod(listType, "[]"); |
962 // "list" has type List<int> | 966 // "list" has type List<int> |
963 SimpleIdentifier identifier = AstFactory.identifier3("list"); | 967 SimpleIdentifier identifier = AstTestFactory.identifier3("list"); |
964 InterfaceType listOfIntType = listType.instantiate(<DartType>[intType]); | 968 InterfaceType listOfIntType = listType.instantiate(<DartType>[intType]); |
965 identifier.staticType = listOfIntType; | 969 identifier.staticType = listOfIntType; |
966 // list[0] has MethodElement element (int) -> E | 970 // list[0] has MethodElement element (int) -> E |
967 IndexExpression indexExpression = | 971 IndexExpression indexExpression = |
968 AstFactory.indexExpression(identifier, AstFactory.integer(0)); | 972 AstTestFactory.indexExpression(identifier, AstTestFactory.integer(0)); |
969 MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType); | 973 MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType); |
970 indexExpression.staticElement = indexMethod; | 974 indexExpression.staticElement = indexMethod; |
971 // analyze and assert result of the index expression | 975 // analyze and assert result of the index expression |
972 expect(_analyze(indexExpression), same(intType)); | 976 expect(_analyze(indexExpression), same(intType)); |
973 _listener.assertNoErrors(); | 977 _listener.assertNoErrors(); |
974 } | 978 } |
975 | 979 |
976 void test_visitIndexExpression_typeParameters_inSetterContext() { | 980 void test_visitIndexExpression_typeParameters_inSetterContext() { |
977 // List<int> list = ... | 981 // List<int> list = ... |
978 // list[0] = 0; | 982 // list[0] = 0; |
979 InterfaceType intType = _typeProvider.intType; | 983 InterfaceType intType = _typeProvider.intType; |
980 InterfaceType listType = _typeProvider.listType; | 984 InterfaceType listType = _typeProvider.listType; |
981 // (int, E) -> void | 985 // (int, E) -> void |
982 MethodElement methodElement = getMethod(listType, "[]="); | 986 MethodElement methodElement = getMethod(listType, "[]="); |
983 // "list" has type List<int> | 987 // "list" has type List<int> |
984 SimpleIdentifier identifier = AstFactory.identifier3("list"); | 988 SimpleIdentifier identifier = AstTestFactory.identifier3("list"); |
985 InterfaceType listOfIntType = listType.instantiate(<DartType>[intType]); | 989 InterfaceType listOfIntType = listType.instantiate(<DartType>[intType]); |
986 identifier.staticType = listOfIntType; | 990 identifier.staticType = listOfIntType; |
987 // list[0] has MethodElement element (int) -> E | 991 // list[0] has MethodElement element (int) -> E |
988 IndexExpression indexExpression = | 992 IndexExpression indexExpression = |
989 AstFactory.indexExpression(identifier, AstFactory.integer(0)); | 993 AstTestFactory.indexExpression(identifier, AstTestFactory.integer(0)); |
990 MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType); | 994 MethodElement indexMethod = MethodMember.from(methodElement, listOfIntType); |
991 indexExpression.staticElement = indexMethod; | 995 indexExpression.staticElement = indexMethod; |
992 // list[0] should be in a setter context | 996 // list[0] should be in a setter context |
993 AstFactory.assignmentExpression( | 997 AstTestFactory.assignmentExpression( |
994 indexExpression, TokenType.EQ, AstFactory.integer(0)); | 998 indexExpression, TokenType.EQ, AstTestFactory.integer(0)); |
995 // analyze and assert result of the index expression | 999 // analyze and assert result of the index expression |
996 expect(_analyze(indexExpression), same(intType)); | 1000 expect(_analyze(indexExpression), same(intType)); |
997 _listener.assertNoErrors(); | 1001 _listener.assertNoErrors(); |
998 } | 1002 } |
999 | 1003 |
1000 void test_visitInstanceCreationExpression_named() { | 1004 void test_visitInstanceCreationExpression_named() { |
1001 // new C.m() | 1005 // new C.m() |
1002 ClassElementImpl classElement = ElementFactory.classElement2("C"); | 1006 ClassElementImpl classElement = ElementFactory.classElement2("C"); |
1003 String constructorName = "m"; | 1007 String constructorName = "m"; |
1004 ConstructorElementImpl constructor = | 1008 ConstructorElementImpl constructor = |
1005 ElementFactory.constructorElement2(classElement, constructorName); | 1009 ElementFactory.constructorElement2(classElement, constructorName); |
1006 classElement.constructors = <ConstructorElement>[constructor]; | 1010 classElement.constructors = <ConstructorElement>[constructor]; |
1007 InstanceCreationExpression node = AstFactory.instanceCreationExpression2( | 1011 InstanceCreationExpression node = AstTestFactory |
1008 null, | 1012 .instanceCreationExpression2( |
1009 AstFactory.typeName(classElement), | 1013 null, |
1010 [AstFactory.identifier3(constructorName)]); | 1014 AstTestFactory.typeName(classElement), |
| 1015 [AstTestFactory.identifier3(constructorName)]); |
1011 node.staticElement = constructor; | 1016 node.staticElement = constructor; |
1012 expect(_analyze(node), same(classElement.type)); | 1017 expect(_analyze(node), same(classElement.type)); |
1013 _listener.assertNoErrors(); | 1018 _listener.assertNoErrors(); |
1014 } | 1019 } |
1015 | 1020 |
1016 void test_visitInstanceCreationExpression_typeParameters() { | 1021 void test_visitInstanceCreationExpression_typeParameters() { |
1017 // new C<I>() | 1022 // new C<I>() |
1018 ClassElementImpl elementC = ElementFactory.classElement2("C", ["E"]); | 1023 ClassElementImpl elementC = ElementFactory.classElement2("C", ["E"]); |
1019 ClassElementImpl elementI = ElementFactory.classElement2("I"); | 1024 ClassElementImpl elementI = ElementFactory.classElement2("I"); |
1020 ConstructorElementImpl constructor = | 1025 ConstructorElementImpl constructor = |
1021 ElementFactory.constructorElement2(elementC, null); | 1026 ElementFactory.constructorElement2(elementC, null); |
1022 elementC.constructors = <ConstructorElement>[constructor]; | 1027 elementC.constructors = <ConstructorElement>[constructor]; |
1023 TypeName typeName = | 1028 TypeName typeName = |
1024 AstFactory.typeName(elementC, [AstFactory.typeName(elementI)]); | 1029 AstTestFactory.typeName(elementC, [AstTestFactory.typeName(elementI)]); |
1025 typeName.type = elementC.type.instantiate(<DartType>[elementI.type]); | 1030 typeName.type = elementC.type.instantiate(<DartType>[elementI.type]); |
1026 InstanceCreationExpression node = | 1031 InstanceCreationExpression node = |
1027 AstFactory.instanceCreationExpression2(null, typeName); | 1032 AstTestFactory.instanceCreationExpression2(null, typeName); |
1028 node.staticElement = constructor; | 1033 node.staticElement = constructor; |
1029 InterfaceType interfaceType = _analyze(node) as InterfaceType; | 1034 InterfaceType interfaceType = _analyze(node) as InterfaceType; |
1030 List<DartType> typeArgs = interfaceType.typeArguments; | 1035 List<DartType> typeArgs = interfaceType.typeArguments; |
1031 expect(typeArgs.length, 1); | 1036 expect(typeArgs.length, 1); |
1032 expect(typeArgs[0], elementI.type); | 1037 expect(typeArgs[0], elementI.type); |
1033 _listener.assertNoErrors(); | 1038 _listener.assertNoErrors(); |
1034 } | 1039 } |
1035 | 1040 |
1036 void test_visitInstanceCreationExpression_unnamed() { | 1041 void test_visitInstanceCreationExpression_unnamed() { |
1037 // new C() | 1042 // new C() |
1038 ClassElementImpl classElement = ElementFactory.classElement2("C"); | 1043 ClassElementImpl classElement = ElementFactory.classElement2("C"); |
1039 ConstructorElementImpl constructor = | 1044 ConstructorElementImpl constructor = |
1040 ElementFactory.constructorElement2(classElement, null); | 1045 ElementFactory.constructorElement2(classElement, null); |
1041 classElement.constructors = <ConstructorElement>[constructor]; | 1046 classElement.constructors = <ConstructorElement>[constructor]; |
1042 InstanceCreationExpression node = AstFactory.instanceCreationExpression2( | 1047 InstanceCreationExpression node = |
1043 null, AstFactory.typeName(classElement)); | 1048 AstTestFactory.instanceCreationExpression2( |
| 1049 null, AstTestFactory.typeName(classElement)); |
1044 node.staticElement = constructor; | 1050 node.staticElement = constructor; |
1045 expect(_analyze(node), same(classElement.type)); | 1051 expect(_analyze(node), same(classElement.type)); |
1046 _listener.assertNoErrors(); | 1052 _listener.assertNoErrors(); |
1047 } | 1053 } |
1048 | 1054 |
1049 void test_visitIntegerLiteral() { | 1055 void test_visitIntegerLiteral() { |
1050 // 42 | 1056 // 42 |
1051 Expression node = _resolvedInteger(42); | 1057 Expression node = _resolvedInteger(42); |
1052 expect(_analyze(node), same(_typeProvider.intType)); | 1058 expect(_analyze(node), same(_typeProvider.intType)); |
1053 _listener.assertNoErrors(); | 1059 _listener.assertNoErrors(); |
1054 } | 1060 } |
1055 | 1061 |
1056 void test_visitIsExpression_negated() { | 1062 void test_visitIsExpression_negated() { |
1057 // a is! String | 1063 // a is! String |
1058 Expression node = AstFactory.isExpression( | 1064 Expression node = AstTestFactory.isExpression( |
1059 _resolvedString("a"), true, AstFactory.typeName4("String")); | 1065 _resolvedString("a"), true, AstTestFactory.typeName4("String")); |
1060 expect(_analyze(node), same(_typeProvider.boolType)); | 1066 expect(_analyze(node), same(_typeProvider.boolType)); |
1061 _listener.assertNoErrors(); | 1067 _listener.assertNoErrors(); |
1062 } | 1068 } |
1063 | 1069 |
1064 void test_visitIsExpression_notNegated() { | 1070 void test_visitIsExpression_notNegated() { |
1065 // a is String | 1071 // a is String |
1066 Expression node = AstFactory.isExpression( | 1072 Expression node = AstTestFactory.isExpression( |
1067 _resolvedString("a"), false, AstFactory.typeName4("String")); | 1073 _resolvedString("a"), false, AstTestFactory.typeName4("String")); |
1068 expect(_analyze(node), same(_typeProvider.boolType)); | 1074 expect(_analyze(node), same(_typeProvider.boolType)); |
1069 _listener.assertNoErrors(); | 1075 _listener.assertNoErrors(); |
1070 } | 1076 } |
1071 | 1077 |
1072 void test_visitListLiteral_empty() { | 1078 void test_visitListLiteral_empty() { |
1073 // [] | 1079 // [] |
1074 Expression node = AstFactory.listLiteral(); | 1080 Expression node = AstTestFactory.listLiteral(); |
1075 DartType resultType = _analyze(node); | 1081 DartType resultType = _analyze(node); |
1076 _assertType2( | 1082 _assertType2( |
1077 _typeProvider.listType | 1083 _typeProvider.listType |
1078 .instantiate(<DartType>[_typeProvider.dynamicType]), | 1084 .instantiate(<DartType>[_typeProvider.dynamicType]), |
1079 resultType); | 1085 resultType); |
1080 _listener.assertNoErrors(); | 1086 _listener.assertNoErrors(); |
1081 } | 1087 } |
1082 | 1088 |
1083 void test_visitListLiteral_nonEmpty() { | 1089 void test_visitListLiteral_nonEmpty() { |
1084 // [0] | 1090 // [0] |
1085 Expression node = AstFactory.listLiteral([_resolvedInteger(0)]); | 1091 Expression node = AstTestFactory.listLiteral([_resolvedInteger(0)]); |
1086 DartType resultType = _analyze(node); | 1092 DartType resultType = _analyze(node); |
1087 _assertType2( | 1093 _assertType2( |
1088 _typeProvider.listType | 1094 _typeProvider.listType |
1089 .instantiate(<DartType>[_typeProvider.dynamicType]), | 1095 .instantiate(<DartType>[_typeProvider.dynamicType]), |
1090 resultType); | 1096 resultType); |
1091 _listener.assertNoErrors(); | 1097 _listener.assertNoErrors(); |
1092 } | 1098 } |
1093 | 1099 |
1094 void test_visitListLiteral_unresolved() { | 1100 void test_visitListLiteral_unresolved() { |
1095 _analyzer = _createAnalyzer(strongMode: true); | 1101 _analyzer = _createAnalyzer(strongMode: true); |
1096 // [a] // where 'a' is not resolved | 1102 // [a] // where 'a' is not resolved |
1097 Identifier identifier = AstFactory.identifier3('a'); | 1103 Identifier identifier = AstTestFactory.identifier3('a'); |
1098 Expression node = AstFactory.listLiteral([identifier]); | 1104 Expression node = AstTestFactory.listLiteral([identifier]); |
1099 DartType resultType = _analyze(node); | 1105 DartType resultType = _analyze(node); |
1100 _assertType2( | 1106 _assertType2( |
1101 _typeProvider.listType | 1107 _typeProvider.listType |
1102 .instantiate(<DartType>[_typeProvider.dynamicType]), | 1108 .instantiate(<DartType>[_typeProvider.dynamicType]), |
1103 resultType); | 1109 resultType); |
1104 _listener.assertNoErrors(); | 1110 _listener.assertNoErrors(); |
1105 } | 1111 } |
1106 | 1112 |
1107 void test_visitListLiteral_unresolved_multiple() { | 1113 void test_visitListLiteral_unresolved_multiple() { |
1108 _analyzer = _createAnalyzer(strongMode: true); | 1114 _analyzer = _createAnalyzer(strongMode: true); |
1109 // [0, a, 1] // where 'a' is not resolved | 1115 // [0, a, 1] // where 'a' is not resolved |
1110 Identifier identifier = AstFactory.identifier3('a'); | 1116 Identifier identifier = AstTestFactory.identifier3('a'); |
1111 Expression node = AstFactory | 1117 Expression node = AstTestFactory |
1112 .listLiteral([_resolvedInteger(0), identifier, _resolvedInteger(1)]); | 1118 .listLiteral([_resolvedInteger(0), identifier, _resolvedInteger(1)]); |
1113 DartType resultType = _analyze(node); | 1119 DartType resultType = _analyze(node); |
1114 _assertType2( | 1120 _assertType2( |
1115 _typeProvider.listType.instantiate(<DartType>[_typeProvider.intType]), | 1121 _typeProvider.listType.instantiate(<DartType>[_typeProvider.intType]), |
1116 resultType); | 1122 resultType); |
1117 _listener.assertNoErrors(); | 1123 _listener.assertNoErrors(); |
1118 } | 1124 } |
1119 | 1125 |
1120 void test_visitMapLiteral_empty() { | 1126 void test_visitMapLiteral_empty() { |
1121 // {} | 1127 // {} |
1122 Expression node = AstFactory.mapLiteral2(); | 1128 Expression node = AstTestFactory.mapLiteral2(); |
1123 DartType resultType = _analyze(node); | 1129 DartType resultType = _analyze(node); |
1124 _assertType2( | 1130 _assertType2( |
1125 _typeProvider.mapType.instantiate( | 1131 _typeProvider.mapType.instantiate( |
1126 <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]), | 1132 <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]), |
1127 resultType); | 1133 resultType); |
1128 _listener.assertNoErrors(); | 1134 _listener.assertNoErrors(); |
1129 } | 1135 } |
1130 | 1136 |
1131 void test_visitMapLiteral_nonEmpty() { | 1137 void test_visitMapLiteral_nonEmpty() { |
1132 // {"k" : 0} | 1138 // {"k" : 0} |
1133 Expression node = AstFactory | 1139 Expression node = AstTestFactory.mapLiteral2( |
1134 .mapLiteral2([AstFactory.mapLiteralEntry("k", _resolvedInteger(0))]); | 1140 [AstTestFactory.mapLiteralEntry("k", _resolvedInteger(0))]); |
1135 DartType resultType = _analyze(node); | 1141 DartType resultType = _analyze(node); |
1136 _assertType2( | 1142 _assertType2( |
1137 _typeProvider.mapType.instantiate( | 1143 _typeProvider.mapType.instantiate( |
1138 <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]), | 1144 <DartType>[_typeProvider.dynamicType, _typeProvider.dynamicType]), |
1139 resultType); | 1145 resultType); |
1140 _listener.assertNoErrors(); | 1146 _listener.assertNoErrors(); |
1141 } | 1147 } |
1142 | 1148 |
1143 void test_visitMethodInvocation_then() { | 1149 void test_visitMethodInvocation_then() { |
1144 // then() | 1150 // then() |
1145 Expression node = AstFactory.methodInvocation(null, "then"); | 1151 Expression node = AstTestFactory.methodInvocation(null, "then"); |
1146 _analyze(node); | 1152 _analyze(node); |
1147 _listener.assertNoErrors(); | 1153 _listener.assertNoErrors(); |
1148 } | 1154 } |
1149 | 1155 |
1150 void test_visitNamedExpression() { | 1156 void test_visitNamedExpression() { |
1151 // n: a | 1157 // n: a |
1152 Expression node = AstFactory.namedExpression2("n", _resolvedString("a")); | 1158 Expression node = |
| 1159 AstTestFactory.namedExpression2("n", _resolvedString("a")); |
1153 expect(_analyze(node), same(_typeProvider.stringType)); | 1160 expect(_analyze(node), same(_typeProvider.stringType)); |
1154 _listener.assertNoErrors(); | 1161 _listener.assertNoErrors(); |
1155 } | 1162 } |
1156 | 1163 |
1157 void test_visitNullLiteral() { | 1164 void test_visitNullLiteral() { |
1158 // null | 1165 // null |
1159 Expression node = AstFactory.nullLiteral(); | 1166 Expression node = AstTestFactory.nullLiteral(); |
1160 expect(_analyze(node), same(_typeProvider.bottomType)); | 1167 expect(_analyze(node), same(_typeProvider.bottomType)); |
1161 _listener.assertNoErrors(); | 1168 _listener.assertNoErrors(); |
1162 } | 1169 } |
1163 | 1170 |
1164 void test_visitParenthesizedExpression() { | 1171 void test_visitParenthesizedExpression() { |
1165 // (0) | 1172 // (0) |
1166 Expression node = AstFactory.parenthesizedExpression(_resolvedInteger(0)); | 1173 Expression node = |
| 1174 AstTestFactory.parenthesizedExpression(_resolvedInteger(0)); |
1167 expect(_analyze(node), same(_typeProvider.intType)); | 1175 expect(_analyze(node), same(_typeProvider.intType)); |
1168 _listener.assertNoErrors(); | 1176 _listener.assertNoErrors(); |
1169 } | 1177 } |
1170 | 1178 |
1171 void test_visitPostfixExpression_minusMinus() { | 1179 void test_visitPostfixExpression_minusMinus() { |
1172 // 0-- | 1180 // 0-- |
1173 PostfixExpression node = AstFactory.postfixExpression( | 1181 PostfixExpression node = AstTestFactory.postfixExpression( |
1174 _resolvedInteger(0), TokenType.MINUS_MINUS); | 1182 _resolvedInteger(0), TokenType.MINUS_MINUS); |
1175 expect(_analyze(node), same(_typeProvider.intType)); | 1183 expect(_analyze(node), same(_typeProvider.intType)); |
1176 _listener.assertNoErrors(); | 1184 _listener.assertNoErrors(); |
1177 } | 1185 } |
1178 | 1186 |
1179 void test_visitPostfixExpression_plusPlus() { | 1187 void test_visitPostfixExpression_plusPlus() { |
1180 // 0++ | 1188 // 0++ |
1181 PostfixExpression node = | 1189 PostfixExpression node = AstTestFactory.postfixExpression( |
1182 AstFactory.postfixExpression(_resolvedInteger(0), TokenType.PLUS_PLUS); | 1190 _resolvedInteger(0), TokenType.PLUS_PLUS); |
1183 expect(_analyze(node), same(_typeProvider.intType)); | 1191 expect(_analyze(node), same(_typeProvider.intType)); |
1184 _listener.assertNoErrors(); | 1192 _listener.assertNoErrors(); |
1185 } | 1193 } |
1186 | 1194 |
1187 void test_visitPrefixedIdentifier_getter() { | 1195 void test_visitPrefixedIdentifier_getter() { |
1188 DartType boolType = _typeProvider.boolType; | 1196 DartType boolType = _typeProvider.boolType; |
1189 PropertyAccessorElementImpl getter = | 1197 PropertyAccessorElementImpl getter = |
1190 ElementFactory.getterElement("b", false, boolType); | 1198 ElementFactory.getterElement("b", false, boolType); |
1191 PrefixedIdentifier node = AstFactory.identifier5("a", "b"); | 1199 PrefixedIdentifier node = AstTestFactory.identifier5("a", "b"); |
1192 node.identifier.staticElement = getter; | 1200 node.identifier.staticElement = getter; |
1193 expect(_analyze(node), same(boolType)); | 1201 expect(_analyze(node), same(boolType)); |
1194 _listener.assertNoErrors(); | 1202 _listener.assertNoErrors(); |
1195 } | 1203 } |
1196 | 1204 |
1197 void test_visitPrefixedIdentifier_setter() { | 1205 void test_visitPrefixedIdentifier_setter() { |
1198 DartType boolType = _typeProvider.boolType; | 1206 DartType boolType = _typeProvider.boolType; |
1199 FieldElementImpl field = | 1207 FieldElementImpl field = |
1200 ElementFactory.fieldElement("b", false, false, false, boolType); | 1208 ElementFactory.fieldElement("b", false, false, false, boolType); |
1201 PropertyAccessorElement setter = field.setter; | 1209 PropertyAccessorElement setter = field.setter; |
1202 PrefixedIdentifier node = AstFactory.identifier5("a", "b"); | 1210 PrefixedIdentifier node = AstTestFactory.identifier5("a", "b"); |
1203 node.identifier.staticElement = setter; | 1211 node.identifier.staticElement = setter; |
1204 expect(_analyze(node), same(boolType)); | 1212 expect(_analyze(node), same(boolType)); |
1205 _listener.assertNoErrors(); | 1213 _listener.assertNoErrors(); |
1206 } | 1214 } |
1207 | 1215 |
1208 void test_visitPrefixedIdentifier_variable() { | 1216 void test_visitPrefixedIdentifier_variable() { |
1209 VariableElementImpl variable = ElementFactory.localVariableElement2("b"); | 1217 VariableElementImpl variable = ElementFactory.localVariableElement2("b"); |
1210 variable.type = _typeProvider.boolType; | 1218 variable.type = _typeProvider.boolType; |
1211 PrefixedIdentifier node = AstFactory.identifier5("a", "b"); | 1219 PrefixedIdentifier node = AstTestFactory.identifier5("a", "b"); |
1212 node.identifier.staticElement = variable; | 1220 node.identifier.staticElement = variable; |
1213 expect(_analyze(node), same(_typeProvider.boolType)); | 1221 expect(_analyze(node), same(_typeProvider.boolType)); |
1214 _listener.assertNoErrors(); | 1222 _listener.assertNoErrors(); |
1215 } | 1223 } |
1216 | 1224 |
1217 void test_visitPrefixExpression_bang() { | 1225 void test_visitPrefixExpression_bang() { |
1218 // !0 | 1226 // !0 |
1219 PrefixExpression node = | 1227 PrefixExpression node = |
1220 AstFactory.prefixExpression(TokenType.BANG, _resolvedInteger(0)); | 1228 AstTestFactory.prefixExpression(TokenType.BANG, _resolvedInteger(0)); |
1221 expect(_analyze(node), same(_typeProvider.boolType)); | 1229 expect(_analyze(node), same(_typeProvider.boolType)); |
1222 _listener.assertNoErrors(); | 1230 _listener.assertNoErrors(); |
1223 } | 1231 } |
1224 | 1232 |
1225 void test_visitPrefixExpression_minus() { | 1233 void test_visitPrefixExpression_minus() { |
1226 // -0 | 1234 // -0 |
1227 PrefixExpression node = | 1235 PrefixExpression node = |
1228 AstFactory.prefixExpression(TokenType.MINUS, _resolvedInteger(0)); | 1236 AstTestFactory.prefixExpression(TokenType.MINUS, _resolvedInteger(0)); |
1229 MethodElement minusMethod = getMethod(_typeProvider.numType, "-"); | 1237 MethodElement minusMethod = getMethod(_typeProvider.numType, "-"); |
1230 node.staticElement = minusMethod; | 1238 node.staticElement = minusMethod; |
1231 expect(_analyze(node), same(_typeProvider.numType)); | 1239 expect(_analyze(node), same(_typeProvider.numType)); |
1232 _listener.assertNoErrors(); | 1240 _listener.assertNoErrors(); |
1233 } | 1241 } |
1234 | 1242 |
1235 void test_visitPrefixExpression_minusMinus() { | 1243 void test_visitPrefixExpression_minusMinus() { |
1236 // --0 | 1244 // --0 |
1237 PrefixExpression node = | 1245 PrefixExpression node = AstTestFactory.prefixExpression( |
1238 AstFactory.prefixExpression(TokenType.MINUS_MINUS, _resolvedInteger(0)); | 1246 TokenType.MINUS_MINUS, _resolvedInteger(0)); |
1239 MethodElement minusMethod = getMethod(_typeProvider.numType, "-"); | 1247 MethodElement minusMethod = getMethod(_typeProvider.numType, "-"); |
1240 node.staticElement = minusMethod; | 1248 node.staticElement = minusMethod; |
1241 expect(_analyze(node), same(_typeProvider.intType)); | 1249 expect(_analyze(node), same(_typeProvider.intType)); |
1242 _listener.assertNoErrors(); | 1250 _listener.assertNoErrors(); |
1243 } | 1251 } |
1244 | 1252 |
1245 void test_visitPrefixExpression_not() { | 1253 void test_visitPrefixExpression_not() { |
1246 // !true | 1254 // !true |
1247 Expression node = AstFactory.prefixExpression( | 1255 Expression node = AstTestFactory.prefixExpression( |
1248 TokenType.BANG, AstFactory.booleanLiteral(true)); | 1256 TokenType.BANG, AstTestFactory.booleanLiteral(true)); |
1249 expect(_analyze(node), same(_typeProvider.boolType)); | 1257 expect(_analyze(node), same(_typeProvider.boolType)); |
1250 _listener.assertNoErrors(); | 1258 _listener.assertNoErrors(); |
1251 } | 1259 } |
1252 | 1260 |
1253 void test_visitPrefixExpression_plusPlus() { | 1261 void test_visitPrefixExpression_plusPlus() { |
1254 // ++0 | 1262 // ++0 |
1255 PrefixExpression node = | 1263 PrefixExpression node = AstTestFactory.prefixExpression( |
1256 AstFactory.prefixExpression(TokenType.PLUS_PLUS, _resolvedInteger(0)); | 1264 TokenType.PLUS_PLUS, _resolvedInteger(0)); |
1257 MethodElement plusMethod = getMethod(_typeProvider.numType, "+"); | 1265 MethodElement plusMethod = getMethod(_typeProvider.numType, "+"); |
1258 node.staticElement = plusMethod; | 1266 node.staticElement = plusMethod; |
1259 expect(_analyze(node), same(_typeProvider.intType)); | 1267 expect(_analyze(node), same(_typeProvider.intType)); |
1260 _listener.assertNoErrors(); | 1268 _listener.assertNoErrors(); |
1261 } | 1269 } |
1262 | 1270 |
1263 void test_visitPrefixExpression_tilde() { | 1271 void test_visitPrefixExpression_tilde() { |
1264 // ~0 | 1272 // ~0 |
1265 PrefixExpression node = | 1273 PrefixExpression node = |
1266 AstFactory.prefixExpression(TokenType.TILDE, _resolvedInteger(0)); | 1274 AstTestFactory.prefixExpression(TokenType.TILDE, _resolvedInteger(0)); |
1267 MethodElement tildeMethod = getMethod(_typeProvider.intType, "~"); | 1275 MethodElement tildeMethod = getMethod(_typeProvider.intType, "~"); |
1268 node.staticElement = tildeMethod; | 1276 node.staticElement = tildeMethod; |
1269 expect(_analyze(node), same(_typeProvider.intType)); | 1277 expect(_analyze(node), same(_typeProvider.intType)); |
1270 _listener.assertNoErrors(); | 1278 _listener.assertNoErrors(); |
1271 } | 1279 } |
1272 | 1280 |
1273 void test_visitPropertyAccess_propagated_getter() { | 1281 void test_visitPropertyAccess_propagated_getter() { |
1274 DartType boolType = _typeProvider.boolType; | 1282 DartType boolType = _typeProvider.boolType; |
1275 PropertyAccessorElementImpl getter = | 1283 PropertyAccessorElementImpl getter = |
1276 ElementFactory.getterElement("b", false, boolType); | 1284 ElementFactory.getterElement("b", false, boolType); |
1277 PropertyAccess node = | 1285 PropertyAccess node = |
1278 AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"); | 1286 AstTestFactory.propertyAccess2(AstTestFactory.identifier3("a"), "b"); |
1279 node.propertyName.propagatedElement = getter; | 1287 node.propertyName.propagatedElement = getter; |
1280 expect(_analyze2(node, false), same(boolType)); | 1288 expect(_analyze2(node, false), same(boolType)); |
1281 _listener.assertNoErrors(); | 1289 _listener.assertNoErrors(); |
1282 } | 1290 } |
1283 | 1291 |
1284 void test_visitPropertyAccess_propagated_setter() { | 1292 void test_visitPropertyAccess_propagated_setter() { |
1285 DartType boolType = _typeProvider.boolType; | 1293 DartType boolType = _typeProvider.boolType; |
1286 FieldElementImpl field = | 1294 FieldElementImpl field = |
1287 ElementFactory.fieldElement("b", false, false, false, boolType); | 1295 ElementFactory.fieldElement("b", false, false, false, boolType); |
1288 PropertyAccessorElement setter = field.setter; | 1296 PropertyAccessorElement setter = field.setter; |
1289 PropertyAccess node = | 1297 PropertyAccess node = |
1290 AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"); | 1298 AstTestFactory.propertyAccess2(AstTestFactory.identifier3("a"), "b"); |
1291 node.propertyName.propagatedElement = setter; | 1299 node.propertyName.propagatedElement = setter; |
1292 expect(_analyze2(node, false), same(boolType)); | 1300 expect(_analyze2(node, false), same(boolType)); |
1293 _listener.assertNoErrors(); | 1301 _listener.assertNoErrors(); |
1294 } | 1302 } |
1295 | 1303 |
1296 void test_visitPropertyAccess_static_getter() { | 1304 void test_visitPropertyAccess_static_getter() { |
1297 DartType boolType = _typeProvider.boolType; | 1305 DartType boolType = _typeProvider.boolType; |
1298 PropertyAccessorElementImpl getter = | 1306 PropertyAccessorElementImpl getter = |
1299 ElementFactory.getterElement("b", false, boolType); | 1307 ElementFactory.getterElement("b", false, boolType); |
1300 PropertyAccess node = | 1308 PropertyAccess node = |
1301 AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"); | 1309 AstTestFactory.propertyAccess2(AstTestFactory.identifier3("a"), "b"); |
1302 node.propertyName.staticElement = getter; | 1310 node.propertyName.staticElement = getter; |
1303 expect(_analyze(node), same(boolType)); | 1311 expect(_analyze(node), same(boolType)); |
1304 _listener.assertNoErrors(); | 1312 _listener.assertNoErrors(); |
1305 } | 1313 } |
1306 | 1314 |
1307 void test_visitPropertyAccess_static_setter() { | 1315 void test_visitPropertyAccess_static_setter() { |
1308 DartType boolType = _typeProvider.boolType; | 1316 DartType boolType = _typeProvider.boolType; |
1309 FieldElementImpl field = | 1317 FieldElementImpl field = |
1310 ElementFactory.fieldElement("b", false, false, false, boolType); | 1318 ElementFactory.fieldElement("b", false, false, false, boolType); |
1311 PropertyAccessorElement setter = field.setter; | 1319 PropertyAccessorElement setter = field.setter; |
1312 PropertyAccess node = | 1320 PropertyAccess node = |
1313 AstFactory.propertyAccess2(AstFactory.identifier3("a"), "b"); | 1321 AstTestFactory.propertyAccess2(AstTestFactory.identifier3("a"), "b"); |
1314 node.propertyName.staticElement = setter; | 1322 node.propertyName.staticElement = setter; |
1315 expect(_analyze(node), same(boolType)); | 1323 expect(_analyze(node), same(boolType)); |
1316 _listener.assertNoErrors(); | 1324 _listener.assertNoErrors(); |
1317 } | 1325 } |
1318 | 1326 |
1319 void test_visitSimpleIdentifier_dynamic() { | 1327 void test_visitSimpleIdentifier_dynamic() { |
1320 // "dynamic" | 1328 // "dynamic" |
1321 SimpleIdentifier identifier = AstFactory.identifier3('dynamic'); | 1329 SimpleIdentifier identifier = AstTestFactory.identifier3('dynamic'); |
1322 DynamicElementImpl element = DynamicElementImpl.instance; | 1330 DynamicElementImpl element = DynamicElementImpl.instance; |
1323 identifier.staticElement = element; | 1331 identifier.staticElement = element; |
1324 identifier.staticType = _typeProvider.typeType; | 1332 identifier.staticType = _typeProvider.typeType; |
1325 expect(_analyze(identifier), same(_typeProvider.typeType)); | 1333 expect(_analyze(identifier), same(_typeProvider.typeType)); |
1326 _listener.assertNoErrors(); | 1334 _listener.assertNoErrors(); |
1327 } | 1335 } |
1328 | 1336 |
1329 void test_visitSimpleStringLiteral() { | 1337 void test_visitSimpleStringLiteral() { |
1330 // "a" | 1338 // "a" |
1331 Expression node = _resolvedString("a"); | 1339 Expression node = _resolvedString("a"); |
1332 expect(_analyze(node), same(_typeProvider.stringType)); | 1340 expect(_analyze(node), same(_typeProvider.stringType)); |
1333 _listener.assertNoErrors(); | 1341 _listener.assertNoErrors(); |
1334 } | 1342 } |
1335 | 1343 |
1336 void test_visitStringInterpolation() { | 1344 void test_visitStringInterpolation() { |
1337 // "a${'b'}c" | 1345 // "a${'b'}c" |
1338 Expression node = AstFactory.string([ | 1346 Expression node = AstTestFactory.string([ |
1339 AstFactory.interpolationString("a", "a"), | 1347 AstTestFactory.interpolationString("a", "a"), |
1340 AstFactory.interpolationExpression(_resolvedString("b")), | 1348 AstTestFactory.interpolationExpression(_resolvedString("b")), |
1341 AstFactory.interpolationString("c", "c") | 1349 AstTestFactory.interpolationString("c", "c") |
1342 ]); | 1350 ]); |
1343 expect(_analyze(node), same(_typeProvider.stringType)); | 1351 expect(_analyze(node), same(_typeProvider.stringType)); |
1344 _listener.assertNoErrors(); | 1352 _listener.assertNoErrors(); |
1345 } | 1353 } |
1346 | 1354 |
1347 void test_visitSuperExpression() { | 1355 void test_visitSuperExpression() { |
1348 // super | 1356 // super |
1349 InterfaceType superType = ElementFactory.classElement2("A").type; | 1357 InterfaceType superType = ElementFactory.classElement2("A").type; |
1350 InterfaceType thisType = ElementFactory.classElement("B", superType).type; | 1358 InterfaceType thisType = ElementFactory.classElement("B", superType).type; |
1351 Expression node = AstFactory.superExpression(); | 1359 Expression node = AstTestFactory.superExpression(); |
1352 expect(_analyze3(node, thisType), same(thisType)); | 1360 expect(_analyze3(node, thisType), same(thisType)); |
1353 _listener.assertNoErrors(); | 1361 _listener.assertNoErrors(); |
1354 } | 1362 } |
1355 | 1363 |
1356 void test_visitSymbolLiteral() { | 1364 void test_visitSymbolLiteral() { |
1357 expect(_analyze(AstFactory.symbolLiteral(["a"])), | 1365 expect(_analyze(AstTestFactory.symbolLiteral(["a"])), |
1358 same(_typeProvider.symbolType)); | 1366 same(_typeProvider.symbolType)); |
1359 } | 1367 } |
1360 | 1368 |
1361 void test_visitThisExpression() { | 1369 void test_visitThisExpression() { |
1362 // this | 1370 // this |
1363 InterfaceType thisType = ElementFactory | 1371 InterfaceType thisType = ElementFactory |
1364 .classElement("B", ElementFactory.classElement2("A").type) | 1372 .classElement("B", ElementFactory.classElement2("A").type) |
1365 .type; | 1373 .type; |
1366 Expression node = AstFactory.thisExpression(); | 1374 Expression node = AstTestFactory.thisExpression(); |
1367 expect(_analyze3(node, thisType), same(thisType)); | 1375 expect(_analyze3(node, thisType), same(thisType)); |
1368 _listener.assertNoErrors(); | 1376 _listener.assertNoErrors(); |
1369 } | 1377 } |
1370 | 1378 |
1371 void test_visitThrowExpression_withoutValue() { | 1379 void test_visitThrowExpression_withoutValue() { |
1372 // throw | 1380 // throw |
1373 Expression node = AstFactory.throwExpression(); | 1381 Expression node = AstTestFactory.throwExpression(); |
1374 expect(_analyze(node), same(_typeProvider.bottomType)); | 1382 expect(_analyze(node), same(_typeProvider.bottomType)); |
1375 _listener.assertNoErrors(); | 1383 _listener.assertNoErrors(); |
1376 } | 1384 } |
1377 | 1385 |
1378 void test_visitThrowExpression_withValue() { | 1386 void test_visitThrowExpression_withValue() { |
1379 // throw 0 | 1387 // throw 0 |
1380 Expression node = AstFactory.throwExpression2(_resolvedInteger(0)); | 1388 Expression node = AstTestFactory.throwExpression2(_resolvedInteger(0)); |
1381 expect(_analyze(node), same(_typeProvider.bottomType)); | 1389 expect(_analyze(node), same(_typeProvider.bottomType)); |
1382 _listener.assertNoErrors(); | 1390 _listener.assertNoErrors(); |
1383 } | 1391 } |
1384 | 1392 |
1385 /** | 1393 /** |
1386 * Return the type associated with the given expression after the static type
analyzer has | 1394 * Return the type associated with the given expression after the static type
analyzer has |
1387 * computed a type for it. | 1395 * computed a type for it. |
1388 * | 1396 * |
1389 * @param node the expression with which the type is associated | 1397 * @param node the expression with which the type is associated |
1390 * @return the type associated with the expression | 1398 * @return the type associated with the expression |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1555 | 1563 |
1556 /** | 1564 /** |
1557 * Return a simple identifier that has been resolved to a variable element wit
h the given type. | 1565 * Return a simple identifier that has been resolved to a variable element wit
h the given type. |
1558 * | 1566 * |
1559 * @param type the type of the variable being represented | 1567 * @param type the type of the variable being represented |
1560 * @param variableName the name of the variable | 1568 * @param variableName the name of the variable |
1561 * @return a simple identifier that has been resolved to a variable element wi
th the given type | 1569 * @return a simple identifier that has been resolved to a variable element wi
th the given type |
1562 */ | 1570 */ |
1563 SimpleIdentifier _propagatedVariable( | 1571 SimpleIdentifier _propagatedVariable( |
1564 InterfaceType type, String variableName) { | 1572 InterfaceType type, String variableName) { |
1565 SimpleIdentifier identifier = AstFactory.identifier3(variableName); | 1573 SimpleIdentifier identifier = AstTestFactory.identifier3(variableName); |
1566 VariableElementImpl element = | 1574 VariableElementImpl element = |
1567 ElementFactory.localVariableElement(identifier); | 1575 ElementFactory.localVariableElement(identifier); |
1568 element.type = type; | 1576 element.type = type; |
1569 identifier.staticType = _typeProvider.dynamicType; | 1577 identifier.staticType = _typeProvider.dynamicType; |
1570 identifier.propagatedElement = element; | 1578 identifier.propagatedElement = element; |
1571 identifier.propagatedType = type; | 1579 identifier.propagatedType = type; |
1572 return identifier; | 1580 return identifier; |
1573 } | 1581 } |
1574 | 1582 |
1575 /** | 1583 /** |
1576 * Return a boolean literal with the given [value] that has been resolved to | 1584 * Return a boolean literal with the given [value] that has been resolved to |
1577 * the correct type. | 1585 * the correct type. |
1578 */ | 1586 */ |
1579 BooleanLiteral _resolvedBool(bool value) { | 1587 BooleanLiteral _resolvedBool(bool value) { |
1580 BooleanLiteral literal = AstFactory.booleanLiteral(value); | 1588 BooleanLiteral literal = AstTestFactory.booleanLiteral(value); |
1581 literal.staticType = _typeProvider.intType; | 1589 literal.staticType = _typeProvider.intType; |
1582 return literal; | 1590 return literal; |
1583 } | 1591 } |
1584 | 1592 |
1585 /** | 1593 /** |
1586 * Return an integer literal that has been resolved to the correct type. | 1594 * Return an integer literal that has been resolved to the correct type. |
1587 * | 1595 * |
1588 * @param value the value of the literal | 1596 * @param value the value of the literal |
1589 * @return an integer literal that has been resolved to the correct type | 1597 * @return an integer literal that has been resolved to the correct type |
1590 */ | 1598 */ |
1591 DoubleLiteral _resolvedDouble(double value) { | 1599 DoubleLiteral _resolvedDouble(double value) { |
1592 DoubleLiteral literal = AstFactory.doubleLiteral(value); | 1600 DoubleLiteral literal = AstTestFactory.doubleLiteral(value); |
1593 literal.staticType = _typeProvider.doubleType; | 1601 literal.staticType = _typeProvider.doubleType; |
1594 return literal; | 1602 return literal; |
1595 } | 1603 } |
1596 | 1604 |
1597 /** | 1605 /** |
1598 * Create a function expression that has an element associated with it, where
the element has an | 1606 * Create a function expression that has an element associated with it, where
the element has an |
1599 * incomplete type associated with it (just like the one | 1607 * incomplete type associated with it (just like the one |
1600 * [ElementBuilder.visitFunctionExpression] would have built if we had | 1608 * [ElementBuilder.visitFunctionExpression] would have built if we had |
1601 * run it). | 1609 * run it). |
1602 * | 1610 * |
1603 * @param parameters the parameters to the function | 1611 * @param parameters the parameters to the function |
1604 * @param body the body of the function | 1612 * @param body the body of the function |
1605 * @return a resolved function expression | 1613 * @return a resolved function expression |
1606 */ | 1614 */ |
1607 FunctionExpression _resolvedFunctionExpression( | 1615 FunctionExpression _resolvedFunctionExpression( |
1608 FormalParameterList parameters, FunctionBody body) { | 1616 FormalParameterList parameters, FunctionBody body) { |
1609 List<ParameterElement> parameterElements = new List<ParameterElement>(); | 1617 List<ParameterElement> parameterElements = new List<ParameterElement>(); |
1610 for (FormalParameter parameter in parameters.parameters) { | 1618 for (FormalParameter parameter in parameters.parameters) { |
1611 ParameterElementImpl element = | 1619 ParameterElementImpl element = |
1612 new ParameterElementImpl.forNode(parameter.identifier); | 1620 new ParameterElementImpl.forNode(parameter.identifier); |
1613 element.parameterKind = parameter.kind; | 1621 element.parameterKind = parameter.kind; |
1614 element.type = _typeProvider.dynamicType; | 1622 element.type = _typeProvider.dynamicType; |
1615 parameter.identifier.staticElement = element; | 1623 parameter.identifier.staticElement = element; |
1616 parameterElements.add(element); | 1624 parameterElements.add(element); |
1617 } | 1625 } |
1618 FunctionExpression node = AstFactory.functionExpression2(parameters, body); | 1626 FunctionExpression node = |
| 1627 AstTestFactory.functionExpression2(parameters, body); |
1619 FunctionElementImpl element = new FunctionElementImpl.forNode(null); | 1628 FunctionElementImpl element = new FunctionElementImpl.forNode(null); |
1620 element.parameters = parameterElements; | 1629 element.parameters = parameterElements; |
1621 element.type = new FunctionTypeImpl(element); | 1630 element.type = new FunctionTypeImpl(element); |
1622 node.element = element; | 1631 node.element = element; |
1623 return node; | 1632 return node; |
1624 } | 1633 } |
1625 | 1634 |
1626 /** | 1635 /** |
1627 * Return an integer literal that has been resolved to the correct type. | 1636 * Return an integer literal that has been resolved to the correct type. |
1628 * | 1637 * |
1629 * @param value the value of the literal | 1638 * @param value the value of the literal |
1630 * @return an integer literal that has been resolved to the correct type | 1639 * @return an integer literal that has been resolved to the correct type |
1631 */ | 1640 */ |
1632 IntegerLiteral _resolvedInteger(int value) { | 1641 IntegerLiteral _resolvedInteger(int value) { |
1633 IntegerLiteral literal = AstFactory.integer(value); | 1642 IntegerLiteral literal = AstTestFactory.integer(value); |
1634 literal.staticType = _typeProvider.intType; | 1643 literal.staticType = _typeProvider.intType; |
1635 return literal; | 1644 return literal; |
1636 } | 1645 } |
1637 | 1646 |
1638 /** | 1647 /** |
1639 * Return a string literal that has been resolved to the correct type. | 1648 * Return a string literal that has been resolved to the correct type. |
1640 * | 1649 * |
1641 * @param value the value of the literal | 1650 * @param value the value of the literal |
1642 * @return a string literal that has been resolved to the correct type | 1651 * @return a string literal that has been resolved to the correct type |
1643 */ | 1652 */ |
1644 SimpleStringLiteral _resolvedString(String value) { | 1653 SimpleStringLiteral _resolvedString(String value) { |
1645 SimpleStringLiteral string = AstFactory.string2(value); | 1654 SimpleStringLiteral string = AstTestFactory.string2(value); |
1646 string.staticType = _typeProvider.stringType; | 1655 string.staticType = _typeProvider.stringType; |
1647 return string; | 1656 return string; |
1648 } | 1657 } |
1649 | 1658 |
1650 /** | 1659 /** |
1651 * Return a simple identifier that has been resolved to a variable element wit
h the given type. | 1660 * Return a simple identifier that has been resolved to a variable element wit
h the given type. |
1652 * | 1661 * |
1653 * @param type the type of the variable being represented | 1662 * @param type the type of the variable being represented |
1654 * @param variableName the name of the variable | 1663 * @param variableName the name of the variable |
1655 * @return a simple identifier that has been resolved to a variable element wi
th the given type | 1664 * @return a simple identifier that has been resolved to a variable element wi
th the given type |
1656 */ | 1665 */ |
1657 SimpleIdentifier _resolvedVariable(InterfaceType type, String variableName) { | 1666 SimpleIdentifier _resolvedVariable(InterfaceType type, String variableName) { |
1658 SimpleIdentifier identifier = AstFactory.identifier3(variableName); | 1667 SimpleIdentifier identifier = AstTestFactory.identifier3(variableName); |
1659 VariableElementImpl element = | 1668 VariableElementImpl element = |
1660 ElementFactory.localVariableElement(identifier); | 1669 ElementFactory.localVariableElement(identifier); |
1661 element.type = type; | 1670 element.type = type; |
1662 identifier.staticElement = element; | 1671 identifier.staticElement = element; |
1663 identifier.staticType = type; | 1672 identifier.staticType = type; |
1664 return identifier; | 1673 return identifier; |
1665 } | 1674 } |
1666 | 1675 |
1667 /** | 1676 /** |
1668 * Set the type of the given parameter to the given type. | 1677 * Set the type of the given parameter to the given type. |
1669 * | 1678 * |
1670 * @param parameter the parameter whose type is to be set | 1679 * @param parameter the parameter whose type is to be set |
1671 * @param type the new type of the given parameter | 1680 * @param type the new type of the given parameter |
1672 */ | 1681 */ |
1673 void _setType(FormalParameter parameter, DartType type) { | 1682 void _setType(FormalParameter parameter, DartType type) { |
1674 SimpleIdentifier identifier = parameter.identifier; | 1683 SimpleIdentifier identifier = parameter.identifier; |
1675 Element element = identifier.staticElement; | 1684 Element element = identifier.staticElement; |
1676 if (element is! ParameterElement) { | 1685 if (element is! ParameterElement) { |
1677 element = new ParameterElementImpl.forNode(identifier); | 1686 element = new ParameterElementImpl.forNode(identifier); |
1678 identifier.staticElement = element; | 1687 identifier.staticElement = element; |
1679 } | 1688 } |
1680 (element as ParameterElementImpl).type = type; | 1689 (element as ParameterElementImpl).type = type; |
1681 } | 1690 } |
1682 } | 1691 } |
OLD | NEW |