Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Side by Side Diff: pkg/analyzer/test/dart/element/builder_test.dart

Issue 2644543005: Element model support for covariant (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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.dart.element.builder_test; 5 library analyzer.test.dart.element.builder_test;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 8 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
9 import 'package:analyzer/dart/ast/token.dart'; 9 import 'package:analyzer/dart/ast/token.dart';
10 import 'package:analyzer/dart/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 expect(parameter, isNotNull); 440 expect(parameter, isNotNull);
441 expect(parameter.name, parameterName); 441 expect(parameter.name, parameterName);
442 expect(parameter.initializer, isNull); 442 expect(parameter.initializer, isNull);
443 expect(parameter.isConst, isFalse); 443 expect(parameter.isConst, isFalse);
444 expect(parameter.isFinal, isFalse); 444 expect(parameter.isFinal, isFalse);
445 expect(parameter.isSynthetic, isFalse); 445 expect(parameter.isSynthetic, isFalse);
446 expect(parameter.parameterKind, ParameterKind.REQUIRED); 446 expect(parameter.parameterKind, ParameterKind.REQUIRED);
447 _assertVisibleRange(parameter, 100, 110); 447 _assertVisibleRange(parameter, 100, 110);
448 } 448 }
449 449
450 void test_visitFunctionTypedFormalParameter_covariant() {
451 ElementHolder holder = new ElementHolder();
452 ElementBuilder builder = _makeBuilder(holder);
453 String parameterName = "p";
454 FunctionTypedFormalParameterImpl formalParameter =
455 AstTestFactory.functionTypedFormalParameter(null, parameterName);
456 formalParameter.covariantKeyword =
457 TokenFactory.tokenFromKeyword(Keyword.COVARIANT);
458 _useParameterInMethod(formalParameter, 100, 110);
459 formalParameter.accept(builder);
460 List<ParameterElement> parameters = holder.parameters;
461 expect(parameters, hasLength(1));
462 ParameterElementImpl parameter = parameters[0];
463 expect(parameter, isNotNull);
464 expect(parameter.name, parameterName);
465 expect(parameter.initializer, isNull);
466 expect(parameter.isConst, isFalse);
467 expect(parameter.isExplicitlyCovariant, isTrue);
468 expect(parameter.isFinal, isFalse);
469 expect(parameter.isSynthetic, isFalse);
470 expect(parameter.parameterKind, ParameterKind.REQUIRED);
471 _assertVisibleRange(parameter, 100, 110);
472 }
473
450 void test_visitFunctionTypedFormalParameter_withTypeParameters() { 474 void test_visitFunctionTypedFormalParameter_withTypeParameters() {
451 ElementHolder holder = new ElementHolder(); 475 ElementHolder holder = new ElementHolder();
452 ElementBuilder builder = _makeBuilder(holder); 476 ElementBuilder builder = _makeBuilder(holder);
453 String parameterName = "p"; 477 String parameterName = "p";
454 FunctionTypedFormalParameter formalParameter = 478 FunctionTypedFormalParameter formalParameter =
455 AstTestFactory.functionTypedFormalParameter(null, parameterName); 479 AstTestFactory.functionTypedFormalParameter(null, parameterName);
456 formalParameter.typeParameters = AstTestFactory.typeParameterList(['F']); 480 formalParameter.typeParameters = AstTestFactory.typeParameterList(['F']);
457 _useParameterInMethod(formalParameter, 100, 110); 481 _useParameterInMethod(formalParameter, 100, 110);
458 formalParameter.accept(builder); 482 formalParameter.accept(builder);
459 List<ParameterElement> parameters = holder.parameters; 483 List<ParameterElement> parameters = holder.parameters;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 expect(parameter.isSynthetic, isFalse); 569 expect(parameter.isSynthetic, isFalse);
546 expect(parameter.parameterKind, ParameterKind.NAMED); 570 expect(parameter.parameterKind, ParameterKind.NAMED);
547 _assertVisibleRange(parameter, 100, 110); 571 _assertVisibleRange(parameter, 100, 110);
548 expect(parameter.defaultValueCode, "42"); 572 expect(parameter.defaultValueCode, "42");
549 FunctionElement initializer = parameter.initializer; 573 FunctionElement initializer = parameter.initializer;
550 expect(initializer, isNotNull); 574 expect(initializer, isNotNull);
551 expect(initializer.isSynthetic, isTrue); 575 expect(initializer.isSynthetic, isTrue);
552 expect(initializer.hasImplicitReturnType, isTrue); 576 expect(initializer.hasImplicitReturnType, isTrue);
553 } 577 }
554 578
579 void test_visitNamedFormalParameter_covariant() {
580 ElementHolder holder = new ElementHolder();
581 ElementBuilder builder = _makeBuilder(holder);
582 String parameterName = "p";
583 DefaultFormalParameter formalParameter =
584 AstTestFactory.namedFormalParameter(
585 AstTestFactory.simpleFormalParameter3(parameterName),
586 AstTestFactory.identifier3("42"));
587 (formalParameter.parameter as NormalFormalParameterImpl).covariantKeyword =
588 TokenFactory.tokenFromKeyword(Keyword.COVARIANT);
589 _useParameterInMethod(formalParameter, 100, 110);
590 formalParameter.beginToken.offset = 50;
591 formalParameter.endToken.offset = 80;
592 formalParameter.accept(builder);
593 List<ParameterElement> parameters = holder.parameters;
594 expect(parameters, hasLength(1));
595 ParameterElementImpl parameter = parameters[0];
596 expect(parameter, isNotNull);
597 assertHasCodeRange(parameter, 50, 32);
598 expect(parameter.name, parameterName);
599 expect(parameter.isConst, isFalse);
600 expect(parameter.isExplicitlyCovariant, isTrue);
601 expect(parameter.isFinal, isFalse);
602 expect(parameter.isSynthetic, isFalse);
603 expect(parameter.parameterKind, ParameterKind.NAMED);
604 _assertVisibleRange(parameter, 100, 110);
605 expect(parameter.defaultValueCode, "42");
606 FunctionElement initializer = parameter.initializer;
607 expect(initializer, isNotNull);
608 expect(initializer.isSynthetic, isTrue);
609 expect(initializer.hasImplicitReturnType, isTrue);
610 }
611
555 void test_visitSimpleFormalParameter_noType() { 612 void test_visitSimpleFormalParameter_noType() {
556 // p 613 // p
557 ElementHolder holder = new ElementHolder(); 614 ElementHolder holder = new ElementHolder();
558 ElementBuilder builder = _makeBuilder(holder); 615 ElementBuilder builder = _makeBuilder(holder);
559 String parameterName = "p"; 616 String parameterName = "p";
560 SimpleFormalParameter formalParameter = 617 SimpleFormalParameter formalParameter =
561 AstTestFactory.simpleFormalParameter3(parameterName); 618 AstTestFactory.simpleFormalParameter3(parameterName);
562 _useParameterInMethod(formalParameter, 100, 110); 619 _useParameterInMethod(formalParameter, 100, 110);
563 formalParameter.accept(builder); 620 formalParameter.accept(builder);
564 List<ParameterElement> parameters = holder.parameters; 621 List<ParameterElement> parameters = holder.parameters;
565 expect(parameters, hasLength(1)); 622 expect(parameters, hasLength(1));
566 ParameterElement parameter = parameters[0]; 623 ParameterElement parameter = parameters[0];
567 expect(parameter, isNotNull); 624 expect(parameter, isNotNull);
568 expect(parameter.hasImplicitType, isTrue); 625 expect(parameter.hasImplicitType, isTrue);
569 expect(parameter.initializer, isNull); 626 expect(parameter.initializer, isNull);
570 expect(parameter.isConst, isFalse); 627 expect(parameter.isConst, isFalse);
571 expect(parameter.isFinal, isFalse); 628 expect(parameter.isFinal, isFalse);
572 expect(parameter.isSynthetic, isFalse); 629 expect(parameter.isSynthetic, isFalse);
573 expect(parameter.name, parameterName); 630 expect(parameter.name, parameterName);
574 expect(parameter.parameterKind, ParameterKind.REQUIRED); 631 expect(parameter.parameterKind, ParameterKind.REQUIRED);
575 _assertVisibleRange(parameter, 100, 110); 632 _assertVisibleRange(parameter, 100, 110);
576 } 633 }
577 634
635 void test_visitSimpleFormalParameter_noType_covariant() {
636 // p
637 ElementHolder holder = new ElementHolder();
638 ElementBuilder builder = _makeBuilder(holder);
639 String parameterName = "p";
640 SimpleFormalParameterImpl formalParameter =
641 AstTestFactory.simpleFormalParameter3(parameterName);
642 formalParameter.covariantKeyword =
643 TokenFactory.tokenFromKeyword(Keyword.COVARIANT);
644 _useParameterInMethod(formalParameter, 100, 110);
645 formalParameter.accept(builder);
646 List<ParameterElement> parameters = holder.parameters;
647 expect(parameters, hasLength(1));
648 ParameterElementImpl parameter = parameters[0];
649 expect(parameter, isNotNull);
650 expect(parameter.hasImplicitType, isTrue);
651 expect(parameter.initializer, isNull);
652 expect(parameter.isConst, isFalse);
653 expect(parameter.isExplicitlyCovariant, isTrue);
654 expect(parameter.isFinal, isFalse);
655 expect(parameter.isSynthetic, isFalse);
656 expect(parameter.name, parameterName);
657 expect(parameter.parameterKind, ParameterKind.REQUIRED);
658 _assertVisibleRange(parameter, 100, 110);
659 }
660
578 void test_visitSimpleFormalParameter_type() { 661 void test_visitSimpleFormalParameter_type() {
579 // T p 662 // T p
580 ElementHolder holder = new ElementHolder(); 663 ElementHolder holder = new ElementHolder();
581 ElementBuilder builder = _makeBuilder(holder); 664 ElementBuilder builder = _makeBuilder(holder);
582 String parameterName = "p"; 665 String parameterName = "p";
583 SimpleFormalParameter formalParameter = AstTestFactory 666 SimpleFormalParameter formalParameter = AstTestFactory
584 .simpleFormalParameter4(AstTestFactory.typeName4('T'), parameterName); 667 .simpleFormalParameter4(AstTestFactory.typeName4('T'), parameterName);
585 _useParameterInMethod(formalParameter, 100, 110); 668 _useParameterInMethod(formalParameter, 100, 110);
586 formalParameter.accept(builder); 669 formalParameter.accept(builder);
587 List<ParameterElement> parameters = holder.parameters; 670 List<ParameterElement> parameters = holder.parameters;
588 expect(parameters, hasLength(1)); 671 expect(parameters, hasLength(1));
589 ParameterElement parameter = parameters[0]; 672 ParameterElement parameter = parameters[0];
590 expect(parameter, isNotNull); 673 expect(parameter, isNotNull);
591 expect(parameter.hasImplicitType, isFalse); 674 expect(parameter.hasImplicitType, isFalse);
592 expect(parameter.initializer, isNull); 675 expect(parameter.initializer, isNull);
593 expect(parameter.isConst, isFalse); 676 expect(parameter.isConst, isFalse);
594 expect(parameter.isFinal, isFalse); 677 expect(parameter.isFinal, isFalse);
595 expect(parameter.isSynthetic, isFalse); 678 expect(parameter.isSynthetic, isFalse);
596 expect(parameter.name, parameterName); 679 expect(parameter.name, parameterName);
597 expect(parameter.parameterKind, ParameterKind.REQUIRED); 680 expect(parameter.parameterKind, ParameterKind.REQUIRED);
598 _assertVisibleRange(parameter, 100, 110); 681 _assertVisibleRange(parameter, 100, 110);
599 } 682 }
600 683
684 void test_visitSimpleFormalParameter_type_covariant() {
685 // T p
686 ElementHolder holder = new ElementHolder();
687 ElementBuilder builder = _makeBuilder(holder);
688 String parameterName = "p";
689 SimpleFormalParameterImpl formalParameter = AstTestFactory
690 .simpleFormalParameter4(AstTestFactory.typeName4('T'), parameterName);
691 formalParameter.covariantKeyword =
692 TokenFactory.tokenFromKeyword(Keyword.COVARIANT);
693 _useParameterInMethod(formalParameter, 100, 110);
694 formalParameter.accept(builder);
695 List<ParameterElement> parameters = holder.parameters;
696 expect(parameters, hasLength(1));
697 ParameterElementImpl parameter = parameters[0];
698 expect(parameter, isNotNull);
699 expect(parameter.hasImplicitType, isFalse);
700 expect(parameter.initializer, isNull);
701 expect(parameter.isConst, isFalse);
702 expect(parameter.isExplicitlyCovariant, isTrue);
703 expect(parameter.isFinal, isFalse);
704 expect(parameter.isSynthetic, isFalse);
705 expect(parameter.name, parameterName);
706 expect(parameter.parameterKind, ParameterKind.REQUIRED);
707 _assertVisibleRange(parameter, 100, 110);
708 }
709
710 void test_visitVariableDeclaration_field_covariant() {
711 // covariant int f;
712 ElementHolder holder = new ElementHolder();
713 ElementBuilder builder = _makeBuilder(holder);
714 String fieldName = "f";
715 VariableDeclarationImpl variableDeclaration =
716 AstTestFactory.variableDeclaration2(fieldName, null);
717 FieldDeclarationImpl fieldDeclaration = AstTestFactory.fieldDeclaration(
718 false,
719 null,
720 AstTestFactory.typeName4('int'),
721 <VariableDeclaration>[variableDeclaration]);
722 fieldDeclaration.covariantKeyword =
723 TokenFactory.tokenFromKeyword(Keyword.COVARIANT);
724 variableDeclaration.accept(builder);
725
726 List<FieldElement> fields = holder.fields;
727 expect(fields, hasLength(1));
728 FieldElementImpl field = fields[0];
729 expect(field, isNotNull);
730 PropertyAccessorElementImpl setter = field.setter;
731 expect(setter, isNotNull);
732 expect(setter.parameters[0].isCovariant, isTrue);
733 }
734
601 void test_visitVariableDeclaration_inConstructor() { 735 void test_visitVariableDeclaration_inConstructor() {
602 List<ConstructorElement> constructors = 736 List<ConstructorElement> constructors =
603 buildElementsForText('class C { C() { var v = 1; } }') 737 buildElementsForText('class C { C() { var v = 1; } }')
604 .types[0] 738 .types[0]
605 .constructors; 739 .constructors;
606 expect(constructors, hasLength(1)); 740 expect(constructors, hasLength(1));
607 List<LocalVariableElement> variableElements = 741 List<LocalVariableElement> variableElements =
608 constructors[0].localVariables; 742 constructors[0].localVariables;
609 expect(variableElements, hasLength(1)); 743 expect(variableElements, hasLength(1));
610 LocalVariableElement variableElement = variableElements[0]; 744 LocalVariableElement variableElement = variableElements[0];
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 buildElementsForText('class C { var x; C([@a this.x = null]); }') 1221 buildElementsForText('class C { var x; C([@a this.x = null]); }')
1088 .types[0] 1222 .types[0]
1089 .constructors[0] 1223 .constructors[0]
1090 .parameters[0]; 1224 .parameters[0];
1091 checkMetadata(parameterElement); 1225 checkMetadata(parameterElement);
1092 } 1226 }
1093 1227
1094 void 1228 void
1095 test_metadata_visitDefaultFormalParameter_functionTypedFormalParameter() { 1229 test_metadata_visitDefaultFormalParameter_functionTypedFormalParameter() {
1096 ParameterElement parameterElement = 1230 ParameterElement parameterElement =
1097 buildElementsForText('f([@a g() = null]) {}').functions[0].parameters[ 1231 buildElementsForText('f([@a g() = null]) {}')
1098 0]; 1232 .functions[0]
1233 .parameters[0];
1099 checkMetadata(parameterElement); 1234 checkMetadata(parameterElement);
1100 } 1235 }
1101 1236
1102 void test_metadata_visitDefaultFormalParameter_simpleFormalParameter() { 1237 void test_metadata_visitDefaultFormalParameter_simpleFormalParameter() {
1103 ParameterElement parameterElement = 1238 ParameterElement parameterElement =
1104 buildElementsForText('f([@a gx = null]) {}').functions[0].parameters[0]; 1239 buildElementsForText('f([@a gx = null]) {}').functions[0].parameters[0];
1105 checkMetadata(parameterElement); 1240 checkMetadata(parameterElement);
1106 } 1241 }
1107 1242
1108 void test_metadata_visitEnumDeclaration() { 1243 void test_metadata_visitEnumDeclaration() {
(...skipping 1376 matching lines...) Expand 10 before | Expand all | Expand 10 after
2485 AnalysisEngine.instance.logger = logger; 2620 AnalysisEngine.instance.logger = logger;
2486 try { 2621 try {
2487 _compilationUnit = ParserTestCase.parseCompilationUnit(code); 2622 _compilationUnit = ParserTestCase.parseCompilationUnit(code);
2488 compilationUnit.accept(visitor); 2623 compilationUnit.accept(visitor);
2489 } finally { 2624 } finally {
2490 expect(logger.log, hasLength(0)); 2625 expect(logger.log, hasLength(0));
2491 AnalysisEngine.instance.logger = Logger.NULL; 2626 AnalysisEngine.instance.logger = Logger.NULL;
2492 } 2627 }
2493 } 2628 }
2494 } 2629 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698