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

Side by Side Diff: pkg/analyzer/test/generated/all_the_rest_test.dart

Issue 2430723002: Extract ElementBuilder tests into a separate file. (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « pkg/analyzer/test/dart/element/test_all.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.generated.all_the_rest_test; 5 library analyzer.test.generated.all_the_rest_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/token.dart'; 8 import 'package:analyzer/dart/ast/token.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
11 import 'package:analyzer/error/error.dart'; 11 import 'package:analyzer/error/error.dart';
12 import 'package:analyzer/error/listener.dart'; 12 import 'package:analyzer/error/listener.dart';
13 import 'package:analyzer/file_system/file_system.dart'; 13 import 'package:analyzer/file_system/file_system.dart';
14 import 'package:analyzer/file_system/memory_file_system.dart'; 14 import 'package:analyzer/file_system/memory_file_system.dart';
15 import 'package:analyzer/file_system/physical_file_system.dart'; 15 import 'package:analyzer/file_system/physical_file_system.dart';
16 import 'package:analyzer/src/dart/ast/ast.dart';
17 import 'package:analyzer/src/dart/ast/utilities.dart' hide ConstantEvaluator; 16 import 'package:analyzer/src/dart/ast/utilities.dart' hide ConstantEvaluator;
18 import 'package:analyzer/src/dart/element/builder.dart'; 17 import 'package:analyzer/src/dart/element/builder.dart';
19 import 'package:analyzer/src/dart/element/element.dart'; 18 import 'package:analyzer/src/dart/element/element.dart';
20 import 'package:analyzer/src/dart/sdk/sdk.dart' hide SdkLibrariesReader; 19 import 'package:analyzer/src/dart/sdk/sdk.dart' hide SdkLibrariesReader;
21 import 'package:analyzer/src/error/codes.dart'; 20 import 'package:analyzer/src/error/codes.dart';
22 import 'package:analyzer/src/generated/engine.dart'; 21 import 'package:analyzer/src/generated/engine.dart';
23 import 'package:analyzer/src/generated/java_engine_io.dart'; 22 import 'package:analyzer/src/generated/java_engine_io.dart';
24 import 'package:analyzer/src/generated/java_io.dart'; 23 import 'package:analyzer/src/generated/java_io.dart';
25 import 'package:analyzer/src/generated/resolver.dart'; 24 import 'package:analyzer/src/generated/resolver.dart';
26 import 'package:analyzer/src/generated/sdk.dart'; 25 import 'package:analyzer/src/generated/sdk.dart';
(...skipping 18 matching lines...) Expand all
45 main() { 44 main() {
46 defineReflectiveSuite(() { 45 defineReflectiveSuite(() {
47 defineReflectiveTests(ContentCacheTest); 46 defineReflectiveTests(ContentCacheTest);
48 // ignore: deprecated_member_use 47 // ignore: deprecated_member_use
49 defineReflectiveTests(CustomUriResolverTest); 48 defineReflectiveTests(CustomUriResolverTest);
50 defineReflectiveTests(DartUriResolverTest); 49 defineReflectiveTests(DartUriResolverTest);
51 // ignore: deprecated_member_use 50 // ignore: deprecated_member_use
52 defineReflectiveTests(DirectoryBasedDartSdkTest); 51 defineReflectiveTests(DirectoryBasedDartSdkTest);
53 // ignore: deprecated_member_use 52 // ignore: deprecated_member_use
54 defineReflectiveTests(DirectoryBasedSourceContainerTest); 53 defineReflectiveTests(DirectoryBasedSourceContainerTest);
55 defineReflectiveTests(ElementBuilderTest);
56 defineReflectiveTests(ElementLocatorTest); 54 defineReflectiveTests(ElementLocatorTest);
57 defineReflectiveTests(EnumMemberBuilderTest); 55 defineReflectiveTests(EnumMemberBuilderTest);
58 defineReflectiveTests(ErrorReporterTest); 56 defineReflectiveTests(ErrorReporterTest);
59 defineReflectiveTests(ErrorSeverityTest); 57 defineReflectiveTests(ErrorSeverityTest);
60 defineReflectiveTests(ExitDetectorTest); 58 defineReflectiveTests(ExitDetectorTest);
61 defineReflectiveTests(ExitDetectorTest2); 59 defineReflectiveTests(ExitDetectorTest2);
62 defineReflectiveTests(FileBasedSourceTest); 60 defineReflectiveTests(FileBasedSourceTest);
63 defineReflectiveTests(ResolveRelativeUriTest); 61 defineReflectiveTests(ResolveRelativeUriTest);
64 // ignore: deprecated_member_use 62 // ignore: deprecated_member_use
65 defineReflectiveTests(SDKLibrariesReaderTest); 63 defineReflectiveTests(SDKLibrariesReaderTest);
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 Source source3 = new FileSource(file3); 343 Source source3 = new FileSource(file3);
346 DirectoryBasedSourceContainer container = 344 DirectoryBasedSourceContainer container =
347 new DirectoryBasedSourceContainer.con2('/does/not/exist'); 345 new DirectoryBasedSourceContainer.con2('/does/not/exist');
348 expect(container.contains(source1), isTrue); 346 expect(container.contains(source1), isTrue);
349 expect(container.contains(source2), isTrue); 347 expect(container.contains(source2), isTrue);
350 expect(container.contains(source3), isFalse); 348 expect(container.contains(source3), isFalse);
351 } 349 }
352 } 350 }
353 351
354 @reflectiveTest 352 @reflectiveTest
355 class ElementBuilderTest extends ParserTestCase {
356 CompilationUnitElement compilationUnitElement;
357 CompilationUnit compilationUnit;
358
359 /**
360 * Parse the given [code], pass it through [ElementBuilder], and return the
361 * resulting [ElementHolder].
362 */
363 ElementHolder buildElementsForText(String code) {
364 TestLogger logger = new TestLogger();
365 AnalysisEngine.instance.logger = logger;
366 try {
367 compilationUnit = ParserTestCase.parseCompilationUnit(code);
368 ElementHolder holder = new ElementHolder();
369 ElementBuilder builder =
370 new ElementBuilder(holder, compilationUnitElement);
371 compilationUnit.accept(builder);
372 return holder;
373 } finally {
374 expect(logger.log, hasLength(0));
375 AnalysisEngine.instance.logger = Logger.NULL;
376 }
377 }
378
379 /**
380 * Verify that the given [metadata] has exactly one annotation, and that its
381 * [ElementAnnotationImpl] is unresolved.
382 */
383 void checkAnnotation(NodeList<Annotation> metadata) {
384 expect(metadata, hasLength(1));
385 expect(metadata[0], new isInstanceOf<AnnotationImpl>());
386 AnnotationImpl annotation = metadata[0];
387 expect(annotation.elementAnnotation,
388 new isInstanceOf<ElementAnnotationImpl>());
389 ElementAnnotationImpl elementAnnotation = annotation.elementAnnotation;
390 expect(elementAnnotation.element, isNull); // Not yet resolved
391 expect(elementAnnotation.compilationUnit, isNotNull);
392 expect(elementAnnotation.compilationUnit, compilationUnitElement);
393 }
394
395 /**
396 * Verify that the given [element] has exactly one annotation, and that its
397 * [ElementAnnotationImpl] is unresolved.
398 */
399 void checkMetadata(Element element) {
400 expect(element.metadata, hasLength(1));
401 expect(element.metadata[0], new isInstanceOf<ElementAnnotationImpl>());
402 ElementAnnotationImpl elementAnnotation = element.metadata[0];
403 expect(elementAnnotation.element, isNull); // Not yet resolved
404 expect(elementAnnotation.compilationUnit, isNotNull);
405 expect(elementAnnotation.compilationUnit, compilationUnitElement);
406 }
407
408 void fail_visitMethodDeclaration_setter_duplicate() {
409 // https://github.com/dart-lang/sdk/issues/25601
410 String code = r'''
411 class C {
412 set zzz(x) {}
413 set zzz(y) {}
414 }
415 ''';
416 ClassElement classElement = buildElementsForText(code).types[0];
417 for (PropertyAccessorElement accessor in classElement.accessors) {
418 expect(accessor.variable.setter, same(accessor));
419 }
420 }
421
422 @override
423 void setUp() {
424 super.setUp();
425 compilationUnitElement = new CompilationUnitElementImpl('test.dart');
426 }
427
428 void test_metadata_fieldDeclaration() {
429 List<FieldElement> fields =
430 buildElementsForText('class C { @a int x, y; }').types[0].fields;
431 checkMetadata(fields[0]);
432 checkMetadata(fields[1]);
433 expect(fields[0].metadata, same(fields[1].metadata));
434 }
435
436 void test_metadata_localVariableDeclaration() {
437 List<LocalVariableElement> localVariables =
438 buildElementsForText('f() { @a int x, y; }')
439 .functions[0]
440 .localVariables;
441 checkMetadata(localVariables[0]);
442 checkMetadata(localVariables[1]);
443 expect(localVariables[0].metadata, same(localVariables[1].metadata));
444 }
445
446 void test_metadata_topLevelVariableDeclaration() {
447 List<TopLevelVariableElement> topLevelVariables =
448 buildElementsForText('@a int x, y;').topLevelVariables;
449 checkMetadata(topLevelVariables[0]);
450 checkMetadata(topLevelVariables[1]);
451 expect(topLevelVariables[0].metadata, same(topLevelVariables[1].metadata));
452 }
453
454 void test_metadata_visitClassDeclaration() {
455 ClassElement classElement = buildElementsForText('@a class C {}').types[0];
456 checkMetadata(classElement);
457 }
458
459 void test_metadata_visitClassTypeAlias() {
460 ClassElement classElement =
461 buildElementsForText('@a class C = D with E;').types[0];
462 checkMetadata(classElement);
463 }
464
465 void test_metadata_visitConstructorDeclaration() {
466 ConstructorElement constructorElement =
467 buildElementsForText('class C { @a C(); }').types[0].constructors[0];
468 checkMetadata(constructorElement);
469 }
470
471 void test_metadata_visitDeclaredIdentifier() {
472 LocalVariableElement localVariableElement =
473 buildElementsForText('f() { for (@a var x in y) {} }')
474 .functions[0]
475 .localVariables[0];
476 checkMetadata(localVariableElement);
477 }
478
479 void test_metadata_visitDefaultFormalParameter_fieldFormalParameter() {
480 ParameterElement parameterElement =
481 buildElementsForText('class C { var x; C([@a this.x = null]); }')
482 .types[0]
483 .constructors[0]
484 .parameters[0];
485 checkMetadata(parameterElement);
486 }
487
488 void
489 test_metadata_visitDefaultFormalParameter_functionTypedFormalParameter() {
490 ParameterElement parameterElement =
491 buildElementsForText('f([@a g() = null]) {}').functions[0].parameters[
492 0];
493 checkMetadata(parameterElement);
494 }
495
496 void test_metadata_visitDefaultFormalParameter_simpleFormalParameter() {
497 ParameterElement parameterElement =
498 buildElementsForText('f([@a gx = null]) {}').functions[0].parameters[0];
499 checkMetadata(parameterElement);
500 }
501
502 void test_metadata_visitEnumDeclaration() {
503 ClassElement classElement =
504 buildElementsForText('@a enum E { v }').enums[0];
505 checkMetadata(classElement);
506 }
507
508 void test_metadata_visitExportDirective() {
509 buildElementsForText('@a export "foo.dart";');
510 expect(compilationUnit.directives[0], new isInstanceOf<ExportDirective>());
511 ExportDirective exportDirective = compilationUnit.directives[0];
512 checkAnnotation(exportDirective.metadata);
513 }
514
515 void test_metadata_visitFieldFormalParameter() {
516 ParameterElement parameterElement =
517 buildElementsForText('class C { var x; C(@a this.x); }')
518 .types[0]
519 .constructors[0]
520 .parameters[0];
521 checkMetadata(parameterElement);
522 }
523
524 void test_metadata_visitFunctionDeclaration_function() {
525 FunctionElement functionElement =
526 buildElementsForText('@a f() {}').functions[0];
527 checkMetadata(functionElement);
528 }
529
530 void test_metadata_visitFunctionDeclaration_getter() {
531 PropertyAccessorElement propertyAccessorElement =
532 buildElementsForText('@a get f => null;').accessors[0];
533 checkMetadata(propertyAccessorElement);
534 }
535
536 void test_metadata_visitFunctionDeclaration_setter() {
537 PropertyAccessorElement propertyAccessorElement =
538 buildElementsForText('@a set f(value) {}').accessors[0];
539 checkMetadata(propertyAccessorElement);
540 }
541
542 void test_metadata_visitFunctionTypeAlias() {
543 FunctionTypeAliasElement functionTypeAliasElement =
544 buildElementsForText('@a typedef F();').typeAliases[0];
545 checkMetadata(functionTypeAliasElement);
546 }
547
548 void test_metadata_visitFunctionTypedFormalParameter() {
549 ParameterElement parameterElement =
550 buildElementsForText('f(@a g()) {}').functions[0].parameters[0];
551 checkMetadata(parameterElement);
552 }
553
554 void test_metadata_visitImportDirective() {
555 buildElementsForText('@a import "foo.dart";');
556 expect(compilationUnit.directives[0], new isInstanceOf<ImportDirective>());
557 ImportDirective importDirective = compilationUnit.directives[0];
558 checkAnnotation(importDirective.metadata);
559 }
560
561 void test_metadata_visitLibraryDirective() {
562 buildElementsForText('@a library L;');
563 expect(compilationUnit.directives[0], new isInstanceOf<LibraryDirective>());
564 LibraryDirective libraryDirective = compilationUnit.directives[0];
565 checkAnnotation(libraryDirective.metadata);
566 }
567
568 void test_metadata_visitMethodDeclaration_getter() {
569 PropertyAccessorElement propertyAccessorElement =
570 buildElementsForText('class C { @a get m => null; }')
571 .types[0]
572 .accessors[0];
573 checkMetadata(propertyAccessorElement);
574 }
575
576 void test_metadata_visitMethodDeclaration_method() {
577 MethodElement methodElement =
578 buildElementsForText('class C { @a m() {} }').types[0].methods[0];
579 checkMetadata(methodElement);
580 }
581
582 void test_metadata_visitMethodDeclaration_setter() {
583 PropertyAccessorElement propertyAccessorElement =
584 buildElementsForText('class C { @a set f(value) {} }')
585 .types[0]
586 .accessors[0];
587 checkMetadata(propertyAccessorElement);
588 }
589
590 void test_metadata_visitPartDirective() {
591 buildElementsForText('@a part "foo.dart";');
592 expect(compilationUnit.directives[0], new isInstanceOf<PartDirective>());
593 PartDirective partDirective = compilationUnit.directives[0];
594 checkAnnotation(partDirective.metadata);
595 }
596
597 void test_metadata_visitPartOfDirective() {
598 // We don't build ElementAnnotation objects for `part of` directives, since
599 // analyzer ignores them in favor of annotations on the library directive.
600 buildElementsForText('@a part of L;');
601 expect(compilationUnit.directives[0], new isInstanceOf<PartOfDirective>());
602 PartOfDirective partOfDirective = compilationUnit.directives[0];
603 expect(partOfDirective.metadata, hasLength(1));
604 expect(partOfDirective.metadata[0].elementAnnotation, isNull);
605 }
606
607 void test_metadata_visitSimpleFormalParameter() {
608 ParameterElement parameterElement =
609 buildElementsForText('f(@a x) {}').functions[0].parameters[0];
610 checkMetadata(parameterElement);
611 }
612
613 void test_metadata_visitTypeParameter() {
614 TypeParameterElement typeParameterElement =
615 buildElementsForText('class C<@a T> {}').types[0].typeParameters[0];
616 checkMetadata(typeParameterElement);
617 }
618
619 void test_visitCatchClause() {
620 List<LocalVariableElement> variables =
621 buildElementsForText('f() { try {} catch (e, s) {} }')
622 .functions[0]
623 .localVariables;
624 String exceptionParameterName = "e";
625 String stackParameterName = "s";
626 expect(variables, hasLength(2));
627
628 LocalVariableElement exceptionVariable = variables[0];
629 expect(exceptionVariable, isNotNull);
630 expect(exceptionVariable.name, exceptionParameterName);
631 expect(exceptionVariable.hasImplicitType, isTrue);
632 expect(exceptionVariable.isSynthetic, isFalse);
633 expect(exceptionVariable.isConst, isFalse);
634 expect(exceptionVariable.isFinal, isFalse);
635 expect(exceptionVariable.initializer, isNull);
636 _assertVisibleRange(exceptionVariable, 13, 28);
637
638 LocalVariableElement stackVariable = variables[1];
639 expect(stackVariable, isNotNull);
640 expect(stackVariable.name, stackParameterName);
641 expect(stackVariable.isSynthetic, isFalse);
642 expect(stackVariable.isConst, isFalse);
643 expect(stackVariable.isFinal, isFalse);
644 expect(stackVariable.initializer, isNull);
645 _assertVisibleRange(stackVariable, 13, 28);
646 }
647
648 void test_visitCatchClause_withType() {
649 List<LocalVariableElement> variables =
650 buildElementsForText('f() { try {} on E catch (e) {} }')
651 .functions[0]
652 .localVariables;
653 String exceptionParameterName = "e";
654 expect(variables, hasLength(1));
655 VariableElement exceptionVariable = variables[0];
656 expect(exceptionVariable, isNotNull);
657 expect(exceptionVariable.name, exceptionParameterName);
658 expect(exceptionVariable.hasImplicitType, isFalse);
659 }
660
661 void test_visitClassDeclaration_abstract() {
662 ElementHolder holder = new ElementHolder();
663 ElementBuilder builder = _makeBuilder(holder);
664 String className = "C";
665 ClassDeclaration classDeclaration = AstFactory.classDeclaration(
666 Keyword.ABSTRACT, className, null, null, null, null);
667 classDeclaration.accept(builder);
668 List<ClassElement> types = holder.types;
669 expect(types, hasLength(1));
670 ClassElement type = types[0];
671 expect(type, isNotNull);
672 expect(type.name, className);
673 List<TypeParameterElement> typeParameters = type.typeParameters;
674 expect(typeParameters, hasLength(0));
675 expect(type.isAbstract, isTrue);
676 expect(type.isMixinApplication, isFalse);
677 expect(type.isSynthetic, isFalse);
678 }
679
680 void test_visitClassDeclaration_invalidFunctionInAnnotation_class() {
681 // https://github.com/dart-lang/sdk/issues/25696
682 String code = r'''
683 class A {
684 const A({f});
685 }
686
687 @A(f: () {})
688 class C {}
689 ''';
690 buildElementsForText(code);
691 }
692
693 void test_visitClassDeclaration_invalidFunctionInAnnotation_method() {
694 String code = r'''
695 class A {
696 const A({f});
697 }
698
699 class C {
700 @A(f: () {})
701 void m() {}
702 }
703 ''';
704 ElementHolder holder = buildElementsForText(code);
705 ClassElement elementC = holder.types[1];
706 expect(elementC, isNotNull);
707 MethodElement methodM = elementC.methods[0];
708 expect(methodM, isNotNull);
709 expect(methodM.functions, isEmpty);
710 }
711
712 void test_visitClassDeclaration_minimal() {
713 ElementHolder holder = new ElementHolder();
714 ElementBuilder builder = _makeBuilder(holder);
715 String className = "C";
716 ClassDeclaration classDeclaration =
717 AstFactory.classDeclaration(null, className, null, null, null, null);
718 classDeclaration.documentationComment = AstFactory.documentationComment(
719 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
720 classDeclaration.endToken.offset = 80;
721 classDeclaration.accept(builder);
722 List<ClassElement> types = holder.types;
723 expect(types, hasLength(1));
724 ClassElement type = types[0];
725 expect(type, isNotNull);
726 expect(type.name, className);
727 List<TypeParameterElement> typeParameters = type.typeParameters;
728 expect(typeParameters, hasLength(0));
729 expect(type.isAbstract, isFalse);
730 expect(type.isMixinApplication, isFalse);
731 expect(type.isSynthetic, isFalse);
732 expect(type.documentationComment, '/// aaa');
733 _assertHasCodeRange(type, 50, 31);
734 }
735
736 void test_visitClassDeclaration_parameterized() {
737 ElementHolder holder = new ElementHolder();
738 ElementBuilder builder = _makeBuilder(holder);
739 String className = "C";
740 String firstVariableName = "E";
741 String secondVariableName = "F";
742 ClassDeclaration classDeclaration = AstFactory.classDeclaration(
743 null,
744 className,
745 AstFactory.typeParameterList([firstVariableName, secondVariableName]),
746 null,
747 null,
748 null);
749 classDeclaration.accept(builder);
750 List<ClassElement> types = holder.types;
751 expect(types, hasLength(1));
752 ClassElement type = types[0];
753 expect(type, isNotNull);
754 expect(type.name, className);
755 List<TypeParameterElement> typeParameters = type.typeParameters;
756 expect(typeParameters, hasLength(2));
757 expect(typeParameters[0].name, firstVariableName);
758 expect(typeParameters[1].name, secondVariableName);
759 expect(type.isAbstract, isFalse);
760 expect(type.isMixinApplication, isFalse);
761 expect(type.isSynthetic, isFalse);
762 }
763
764 void test_visitClassDeclaration_withMembers() {
765 ElementHolder holder = new ElementHolder();
766 ElementBuilder builder = _makeBuilder(holder);
767 String className = "C";
768 String typeParameterName = "E";
769 String fieldName = "f";
770 String methodName = "m";
771 ClassDeclaration classDeclaration = AstFactory.classDeclaration(
772 null,
773 className,
774 AstFactory.typeParameterList([typeParameterName]),
775 null,
776 null,
777 null, [
778 AstFactory.fieldDeclaration2(
779 false, null, [AstFactory.variableDeclaration(fieldName)]),
780 AstFactory.methodDeclaration2(
781 null,
782 null,
783 null,
784 null,
785 AstFactory.identifier3(methodName),
786 AstFactory.formalParameterList(),
787 AstFactory.blockFunctionBody2())
788 ]);
789 classDeclaration.accept(builder);
790 List<ClassElement> types = holder.types;
791 expect(types, hasLength(1));
792 ClassElement type = types[0];
793 expect(type, isNotNull);
794 expect(type.name, className);
795 expect(type.isAbstract, isFalse);
796 expect(type.isMixinApplication, isFalse);
797 expect(type.isSynthetic, isFalse);
798 List<TypeParameterElement> typeParameters = type.typeParameters;
799 expect(typeParameters, hasLength(1));
800 TypeParameterElement typeParameter = typeParameters[0];
801 expect(typeParameter, isNotNull);
802 expect(typeParameter.name, typeParameterName);
803 List<FieldElement> fields = type.fields;
804 expect(fields, hasLength(1));
805 FieldElement field = fields[0];
806 expect(field, isNotNull);
807 expect(field.name, fieldName);
808 List<MethodElement> methods = type.methods;
809 expect(methods, hasLength(1));
810 MethodElement method = methods[0];
811 expect(method, isNotNull);
812 expect(method.name, methodName);
813 }
814
815 void test_visitClassTypeAlias() {
816 // class B {}
817 // class M {}
818 // class C = B with M
819 ElementHolder holder = new ElementHolder();
820 ElementBuilder builder = _makeBuilder(holder);
821 ClassElementImpl classB = ElementFactory.classElement2('B', []);
822 ConstructorElementImpl constructorB =
823 ElementFactory.constructorElement2(classB, '', []);
824 constructorB.setModifier(Modifier.SYNTHETIC, true);
825 classB.constructors = [constructorB];
826 ClassElement classM = ElementFactory.classElement2('M', []);
827 WithClause withClause =
828 AstFactory.withClause([AstFactory.typeName(classM, [])]);
829 ClassTypeAlias alias = AstFactory.classTypeAlias(
830 'C', null, null, AstFactory.typeName(classB, []), withClause, null);
831 alias.accept(builder);
832 List<ClassElement> types = holder.types;
833 expect(types, hasLength(1));
834 ClassElement type = types[0];
835 expect(alias.element, same(type));
836 expect(type.name, equals('C'));
837 expect(type.isAbstract, isFalse);
838 expect(type.isMixinApplication, isTrue);
839 expect(type.isSynthetic, isFalse);
840 expect(type.typeParameters, isEmpty);
841 expect(type.fields, isEmpty);
842 expect(type.methods, isEmpty);
843 }
844
845 void test_visitClassTypeAlias_abstract() {
846 // class B {}
847 // class M {}
848 // abstract class C = B with M
849 ElementHolder holder = new ElementHolder();
850 ElementBuilder builder = _makeBuilder(holder);
851 ClassElementImpl classB = ElementFactory.classElement2('B', []);
852 ConstructorElementImpl constructorB =
853 ElementFactory.constructorElement2(classB, '', []);
854 constructorB.setModifier(Modifier.SYNTHETIC, true);
855 classB.constructors = [constructorB];
856 ClassElement classM = ElementFactory.classElement2('M', []);
857 WithClause withClause =
858 AstFactory.withClause([AstFactory.typeName(classM, [])]);
859 ClassTypeAlias classCAst = AstFactory.classTypeAlias('C', null,
860 Keyword.ABSTRACT, AstFactory.typeName(classB, []), withClause, null);
861 classCAst.accept(builder);
862 List<ClassElement> types = holder.types;
863 expect(types, hasLength(1));
864 ClassElement type = types[0];
865 expect(type.isAbstract, isTrue);
866 expect(type.isMixinApplication, isTrue);
867 }
868
869 void test_visitClassTypeAlias_typeParams() {
870 // class B {}
871 // class M {}
872 // class C<T> = B with M
873 ElementHolder holder = new ElementHolder();
874 ElementBuilder builder = _makeBuilder(holder);
875 ClassElementImpl classB = ElementFactory.classElement2('B', []);
876 ConstructorElementImpl constructorB =
877 ElementFactory.constructorElement2(classB, '', []);
878 constructorB.setModifier(Modifier.SYNTHETIC, true);
879 classB.constructors = [constructorB];
880 ClassElementImpl classM = ElementFactory.classElement2('M', []);
881 WithClause withClause =
882 AstFactory.withClause([AstFactory.typeName(classM, [])]);
883 ClassTypeAlias classCAst = AstFactory.classTypeAlias(
884 'C',
885 AstFactory.typeParameterList(['T']),
886 null,
887 AstFactory.typeName(classB, []),
888 withClause,
889 null);
890 classCAst.accept(builder);
891 List<ClassElement> types = holder.types;
892 expect(types, hasLength(1));
893 ClassElement type = types[0];
894 expect(type.typeParameters, hasLength(1));
895 expect(type.typeParameters[0].name, equals('T'));
896 }
897
898 void test_visitCompilationUnit_codeRange() {
899 TopLevelVariableDeclaration topLevelVariableDeclaration = AstFactory
900 .topLevelVariableDeclaration(null, AstFactory.typeName4('int'),
901 [AstFactory.variableDeclaration('V')]);
902 CompilationUnit unit = new CompilationUnit(
903 topLevelVariableDeclaration.beginToken,
904 null,
905 [],
906 [topLevelVariableDeclaration],
907 topLevelVariableDeclaration.endToken);
908 ElementHolder holder = new ElementHolder();
909 ElementBuilder builder = _makeBuilder(holder);
910 unit.beginToken.offset = 10;
911 unit.endToken.offset = 40;
912 unit.accept(builder);
913
914 CompilationUnitElement element = builder.compilationUnitElement;
915 _assertHasCodeRange(element, 0, 41);
916 }
917
918 void test_visitConstructorDeclaration_external() {
919 ElementHolder holder = new ElementHolder();
920 ElementBuilder builder = _makeBuilder(holder);
921 String className = "A";
922 ConstructorDeclaration constructorDeclaration =
923 AstFactory.constructorDeclaration2(
924 null,
925 null,
926 AstFactory.identifier3(className),
927 null,
928 AstFactory.formalParameterList(),
929 null,
930 AstFactory.blockFunctionBody2());
931 constructorDeclaration.externalKeyword =
932 TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
933 constructorDeclaration.accept(builder);
934 List<ConstructorElement> constructors = holder.constructors;
935 expect(constructors, hasLength(1));
936 ConstructorElement constructor = constructors[0];
937 expect(constructor, isNotNull);
938 expect(constructor.isExternal, isTrue);
939 expect(constructor.isFactory, isFalse);
940 expect(constructor.name, "");
941 expect(constructor.functions, hasLength(0));
942 expect(constructor.labels, hasLength(0));
943 expect(constructor.localVariables, hasLength(0));
944 expect(constructor.parameters, hasLength(0));
945 }
946
947 void test_visitConstructorDeclaration_factory() {
948 ElementHolder holder = new ElementHolder();
949 ElementBuilder builder = _makeBuilder(holder);
950 String className = "A";
951 ConstructorDeclaration constructorDeclaration =
952 AstFactory.constructorDeclaration2(
953 null,
954 Keyword.FACTORY,
955 AstFactory.identifier3(className),
956 null,
957 AstFactory.formalParameterList(),
958 null,
959 AstFactory.blockFunctionBody2());
960 constructorDeclaration.accept(builder);
961 List<ConstructorElement> constructors = holder.constructors;
962 expect(constructors, hasLength(1));
963 ConstructorElement constructor = constructors[0];
964 expect(constructor, isNotNull);
965 expect(constructor.isExternal, isFalse);
966 expect(constructor.isFactory, isTrue);
967 expect(constructor.name, "");
968 expect(constructor.functions, hasLength(0));
969 expect(constructor.labels, hasLength(0));
970 expect(constructor.localVariables, hasLength(0));
971 expect(constructor.parameters, hasLength(0));
972 }
973
974 void test_visitConstructorDeclaration_minimal() {
975 ElementHolder holder = new ElementHolder();
976 ElementBuilder builder = _makeBuilder(holder);
977 String className = "A";
978 ConstructorDeclaration constructorDeclaration =
979 AstFactory.constructorDeclaration2(
980 null,
981 null,
982 AstFactory.identifier3(className),
983 null,
984 AstFactory.formalParameterList(),
985 null,
986 AstFactory.blockFunctionBody2());
987 constructorDeclaration.documentationComment = AstFactory
988 .documentationComment(
989 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
990 constructorDeclaration.endToken.offset = 80;
991 constructorDeclaration.accept(builder);
992
993 List<ConstructorElement> constructors = holder.constructors;
994 expect(constructors, hasLength(1));
995 ConstructorElement constructor = constructors[0];
996 expect(constructor, isNotNull);
997 _assertHasCodeRange(constructor, 50, 31);
998 expect(constructor.documentationComment, '/// aaa');
999 expect(constructor.isExternal, isFalse);
1000 expect(constructor.isFactory, isFalse);
1001 expect(constructor.name, "");
1002 expect(constructor.functions, hasLength(0));
1003 expect(constructor.labels, hasLength(0));
1004 expect(constructor.localVariables, hasLength(0));
1005 expect(constructor.parameters, hasLength(0));
1006 }
1007
1008 void test_visitConstructorDeclaration_named() {
1009 ElementHolder holder = new ElementHolder();
1010 ElementBuilder builder = _makeBuilder(holder);
1011 String className = "A";
1012 String constructorName = "c";
1013 ConstructorDeclaration constructorDeclaration =
1014 AstFactory.constructorDeclaration2(
1015 null,
1016 null,
1017 AstFactory.identifier3(className),
1018 constructorName,
1019 AstFactory.formalParameterList(),
1020 null,
1021 AstFactory.blockFunctionBody2());
1022 constructorDeclaration.accept(builder);
1023 List<ConstructorElement> constructors = holder.constructors;
1024 expect(constructors, hasLength(1));
1025 ConstructorElement constructor = constructors[0];
1026 expect(constructor, isNotNull);
1027 expect(constructor.isExternal, isFalse);
1028 expect(constructor.isFactory, isFalse);
1029 expect(constructor.name, constructorName);
1030 expect(constructor.functions, hasLength(0));
1031 expect(constructor.labels, hasLength(0));
1032 expect(constructor.localVariables, hasLength(0));
1033 expect(constructor.parameters, hasLength(0));
1034 expect(constructorDeclaration.name.staticElement, same(constructor));
1035 expect(constructorDeclaration.element, same(constructor));
1036 }
1037
1038 void test_visitConstructorDeclaration_unnamed() {
1039 ElementHolder holder = new ElementHolder();
1040 ElementBuilder builder = _makeBuilder(holder);
1041 String className = "A";
1042 ConstructorDeclaration constructorDeclaration =
1043 AstFactory.constructorDeclaration2(
1044 null,
1045 null,
1046 AstFactory.identifier3(className),
1047 null,
1048 AstFactory.formalParameterList(),
1049 null,
1050 AstFactory.blockFunctionBody2());
1051 constructorDeclaration.accept(builder);
1052 List<ConstructorElement> constructors = holder.constructors;
1053 expect(constructors, hasLength(1));
1054 ConstructorElement constructor = constructors[0];
1055 expect(constructor, isNotNull);
1056 expect(constructor.isExternal, isFalse);
1057 expect(constructor.isFactory, isFalse);
1058 expect(constructor.name, "");
1059 expect(constructor.functions, hasLength(0));
1060 expect(constructor.labels, hasLength(0));
1061 expect(constructor.localVariables, hasLength(0));
1062 expect(constructor.parameters, hasLength(0));
1063 expect(constructorDeclaration.element, same(constructor));
1064 }
1065
1066 void test_visitDeclaredIdentifier_noType() {
1067 LocalVariableElement variable =
1068 buildElementsForText('f() { for (var i in []) {} }')
1069 .functions[0]
1070 .localVariables[0];
1071 _assertHasCodeRange(variable, 11, 5);
1072 expect(variable, isNotNull);
1073 expect(variable.hasImplicitType, isTrue);
1074 expect(variable.isConst, isFalse);
1075 expect(variable.isDeprecated, isFalse);
1076 expect(variable.isFinal, isFalse);
1077 expect(variable.isOverride, isFalse);
1078 expect(variable.isPrivate, isFalse);
1079 expect(variable.isPublic, isTrue);
1080 expect(variable.isSynthetic, isFalse);
1081 expect(variable.name, 'i');
1082 }
1083
1084 void test_visitDeclaredIdentifier_type() {
1085 LocalVariableElement variable =
1086 buildElementsForText('f() { for (int i in []) {} }')
1087 .functions[0]
1088 .localVariables[0];
1089 _assertHasCodeRange(variable, 11, 5);
1090 expect(variable.hasImplicitType, isFalse);
1091 expect(variable.isConst, isFalse);
1092 expect(variable.isDeprecated, isFalse);
1093 expect(variable.isFinal, isFalse);
1094 expect(variable.isOverride, isFalse);
1095 expect(variable.isPrivate, isFalse);
1096 expect(variable.isPublic, isTrue);
1097 expect(variable.isSynthetic, isFalse);
1098 expect(variable.name, 'i');
1099 }
1100
1101 void test_visitDefaultFormalParameter_noType() {
1102 // p = 0
1103 ElementHolder holder = new ElementHolder();
1104 ElementBuilder builder = _makeBuilder(holder);
1105 String parameterName = 'p';
1106 DefaultFormalParameter formalParameter =
1107 AstFactory.positionalFormalParameter(
1108 AstFactory.simpleFormalParameter3(parameterName),
1109 AstFactory.integer(0));
1110 formalParameter.beginToken.offset = 50;
1111 formalParameter.endToken.offset = 80;
1112 formalParameter.accept(builder);
1113
1114 List<ParameterElement> parameters = holder.parameters;
1115 expect(parameters, hasLength(1));
1116 ParameterElement parameter = parameters[0];
1117 _assertHasCodeRange(parameter, 50, 31);
1118 expect(parameter.hasImplicitType, isTrue);
1119 expect(parameter.initializer, isNotNull);
1120 expect(parameter.initializer.type, isNotNull);
1121 expect(parameter.initializer.hasImplicitReturnType, isTrue);
1122 expect(parameter.isConst, isFalse);
1123 expect(parameter.isDeprecated, isFalse);
1124 expect(parameter.isFinal, isFalse);
1125 expect(parameter.isInitializingFormal, isFalse);
1126 expect(parameter.isOverride, isFalse);
1127 expect(parameter.isPrivate, isFalse);
1128 expect(parameter.isPublic, isTrue);
1129 expect(parameter.isSynthetic, isFalse);
1130 expect(parameter.name, parameterName);
1131 }
1132
1133 void test_visitDefaultFormalParameter_type() {
1134 // E p = 0
1135 ElementHolder holder = new ElementHolder();
1136 ElementBuilder builder = _makeBuilder(holder);
1137 String parameterName = 'p';
1138 DefaultFormalParameter formalParameter = AstFactory.namedFormalParameter(
1139 AstFactory.simpleFormalParameter4(
1140 AstFactory.typeName4('E'), parameterName),
1141 AstFactory.integer(0));
1142 formalParameter.accept(builder);
1143
1144 List<ParameterElement> parameters = holder.parameters;
1145 expect(parameters, hasLength(1));
1146 ParameterElement parameter = parameters[0];
1147 expect(parameter.hasImplicitType, isFalse);
1148 expect(parameter.initializer, isNotNull);
1149 expect(parameter.initializer.type, isNotNull);
1150 expect(parameter.initializer.hasImplicitReturnType, isTrue);
1151 expect(parameter.isConst, isFalse);
1152 expect(parameter.isDeprecated, isFalse);
1153 expect(parameter.isFinal, isFalse);
1154 expect(parameter.isInitializingFormal, isFalse);
1155 expect(parameter.isOverride, isFalse);
1156 expect(parameter.isPrivate, isFalse);
1157 expect(parameter.isPublic, isTrue);
1158 expect(parameter.isSynthetic, isFalse);
1159 expect(parameter.name, parameterName);
1160 }
1161
1162 void test_visitEnumDeclaration() {
1163 ElementHolder holder = new ElementHolder();
1164 ElementBuilder builder = _makeBuilder(holder);
1165 String enumName = "E";
1166 EnumDeclaration enumDeclaration =
1167 AstFactory.enumDeclaration2(enumName, ["ONE"]);
1168 enumDeclaration.documentationComment = AstFactory.documentationComment(
1169 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1170 enumDeclaration.endToken.offset = 80;
1171 enumDeclaration.accept(builder);
1172 List<ClassElement> enums = holder.enums;
1173 expect(enums, hasLength(1));
1174 ClassElement enumElement = enums[0];
1175 expect(enumElement, isNotNull);
1176 _assertHasCodeRange(enumElement, 50, 31);
1177 expect(enumElement.documentationComment, '/// aaa');
1178 expect(enumElement.name, enumName);
1179 }
1180
1181 void test_visitFieldDeclaration() {
1182 ElementHolder holder = new ElementHolder();
1183 ElementBuilder builder = _makeBuilder(holder);
1184 String firstFieldName = "x";
1185 String secondFieldName = "y";
1186 FieldDeclaration fieldDeclaration =
1187 AstFactory.fieldDeclaration2(false, null, [
1188 AstFactory.variableDeclaration(firstFieldName),
1189 AstFactory.variableDeclaration(secondFieldName)
1190 ]);
1191 fieldDeclaration.documentationComment = AstFactory.documentationComment(
1192 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1193 fieldDeclaration.endToken.offset = 110;
1194 fieldDeclaration.accept(builder);
1195
1196 List<FieldElement> fields = holder.fields;
1197 expect(fields, hasLength(2));
1198
1199 FieldElement firstField = fields[0];
1200 expect(firstField, isNotNull);
1201 _assertHasCodeRange(firstField, 50, 61);
1202 expect(firstField.documentationComment, '/// aaa');
1203 expect(firstField.name, firstFieldName);
1204 expect(firstField.initializer, isNull);
1205 expect(firstField.isConst, isFalse);
1206 expect(firstField.isFinal, isFalse);
1207 expect(firstField.isSynthetic, isFalse);
1208
1209 FieldElement secondField = fields[1];
1210 expect(secondField, isNotNull);
1211 _assertHasCodeRange(secondField, 50, 61);
1212 expect(secondField.documentationComment, '/// aaa');
1213 expect(secondField.name, secondFieldName);
1214 expect(secondField.initializer, isNull);
1215 expect(secondField.isConst, isFalse);
1216 expect(secondField.isFinal, isFalse);
1217 expect(secondField.isSynthetic, isFalse);
1218 }
1219
1220 void test_visitFieldFormalParameter() {
1221 ElementHolder holder = new ElementHolder();
1222 ElementBuilder builder = _makeBuilder(holder);
1223 String parameterName = "p";
1224 FieldFormalParameter formalParameter =
1225 AstFactory.fieldFormalParameter(null, null, parameterName);
1226 formalParameter.beginToken.offset = 50;
1227 formalParameter.endToken.offset = 80;
1228 formalParameter.accept(builder);
1229 List<ParameterElement> parameters = holder.parameters;
1230 expect(parameters, hasLength(1));
1231 ParameterElement parameter = parameters[0];
1232 expect(parameter, isNotNull);
1233 _assertHasCodeRange(parameter, 50, 31);
1234 expect(parameter.name, parameterName);
1235 expect(parameter.initializer, isNull);
1236 expect(parameter.isConst, isFalse);
1237 expect(parameter.isFinal, isFalse);
1238 expect(parameter.isSynthetic, isFalse);
1239 expect(parameter.parameterKind, ParameterKind.REQUIRED);
1240 expect(parameter.parameters, hasLength(0));
1241 }
1242
1243 void test_visitFieldFormalParameter_functionTyped() {
1244 ElementHolder holder = new ElementHolder();
1245 ElementBuilder builder = _makeBuilder(holder);
1246 String parameterName = "p";
1247 FieldFormalParameter formalParameter = AstFactory.fieldFormalParameter(
1248 null,
1249 null,
1250 parameterName,
1251 AstFactory
1252 .formalParameterList([AstFactory.simpleFormalParameter3("a")]));
1253 formalParameter.accept(builder);
1254 List<ParameterElement> parameters = holder.parameters;
1255 expect(parameters, hasLength(1));
1256 ParameterElement parameter = parameters[0];
1257 expect(parameter, isNotNull);
1258 expect(parameter.name, parameterName);
1259 expect(parameter.initializer, isNull);
1260 expect(parameter.isConst, isFalse);
1261 expect(parameter.isFinal, isFalse);
1262 expect(parameter.isSynthetic, isFalse);
1263 expect(parameter.parameterKind, ParameterKind.REQUIRED);
1264 expect(parameter.parameters, hasLength(1));
1265 }
1266
1267 void test_visitFormalParameterList() {
1268 ElementHolder holder = new ElementHolder();
1269 ElementBuilder builder = _makeBuilder(holder);
1270 String firstParameterName = "a";
1271 String secondParameterName = "b";
1272 FormalParameterList parameterList = AstFactory.formalParameterList([
1273 AstFactory.simpleFormalParameter3(firstParameterName),
1274 AstFactory.simpleFormalParameter3(secondParameterName)
1275 ]);
1276 parameterList.accept(builder);
1277 List<ParameterElement> parameters = holder.parameters;
1278 expect(parameters, hasLength(2));
1279 expect(parameters[0].name, firstParameterName);
1280 expect(parameters[1].name, secondParameterName);
1281 }
1282
1283 void test_visitFunctionDeclaration_external() {
1284 // external f();
1285 ElementHolder holder = new ElementHolder();
1286 ElementBuilder builder = _makeBuilder(holder);
1287 String functionName = "f";
1288 FunctionDeclaration declaration = AstFactory.functionDeclaration(
1289 null,
1290 null,
1291 functionName,
1292 AstFactory.functionExpression2(
1293 AstFactory.formalParameterList(), AstFactory.emptyFunctionBody()));
1294 declaration.externalKeyword =
1295 TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
1296 declaration.accept(builder);
1297
1298 List<FunctionElement> functions = holder.functions;
1299 expect(functions, hasLength(1));
1300 FunctionElement function = functions[0];
1301 expect(function, isNotNull);
1302 expect(function.name, functionName);
1303 expect(declaration.element, same(function));
1304 expect(declaration.functionExpression.element, same(function));
1305 expect(function.hasImplicitReturnType, isTrue);
1306 expect(function.isExternal, isTrue);
1307 expect(function.isSynthetic, isFalse);
1308 expect(function.typeParameters, hasLength(0));
1309 }
1310
1311 void test_visitFunctionDeclaration_getter() {
1312 // get f() {}
1313 ElementHolder holder = new ElementHolder();
1314 ElementBuilder builder = _makeBuilder(holder);
1315 String functionName = "f";
1316 FunctionDeclaration declaration = AstFactory.functionDeclaration(
1317 null,
1318 Keyword.GET,
1319 functionName,
1320 AstFactory.functionExpression2(
1321 AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
1322 declaration.documentationComment = AstFactory.documentationComment(
1323 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1324 declaration.endToken.offset = 80;
1325 declaration.accept(builder);
1326
1327 List<PropertyAccessorElement> accessors = holder.accessors;
1328 expect(accessors, hasLength(1));
1329 PropertyAccessorElement accessor = accessors[0];
1330 expect(accessor, isNotNull);
1331 _assertHasCodeRange(accessor, 50, 31);
1332 expect(accessor.documentationComment, '/// aaa');
1333 expect(accessor.name, functionName);
1334 expect(declaration.element, same(accessor));
1335 expect(declaration.functionExpression.element, same(accessor));
1336 expect(accessor.hasImplicitReturnType, isTrue);
1337 expect(accessor.isGetter, isTrue);
1338 expect(accessor.isExternal, isFalse);
1339 expect(accessor.isSetter, isFalse);
1340 expect(accessor.isSynthetic, isFalse);
1341 expect(accessor.typeParameters, hasLength(0));
1342 PropertyInducingElement variable = accessor.variable;
1343 EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
1344 TopLevelVariableElement, variable);
1345 expect(variable.isSynthetic, isTrue);
1346 }
1347
1348 void test_visitFunctionDeclaration_plain() {
1349 // T f() {}
1350 ElementHolder holder = new ElementHolder();
1351 ElementBuilder builder = _makeBuilder(holder);
1352 String functionName = "f";
1353 FunctionDeclaration declaration = AstFactory.functionDeclaration(
1354 AstFactory.typeName4('T'),
1355 null,
1356 functionName,
1357 AstFactory.functionExpression2(
1358 AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
1359 declaration.documentationComment = AstFactory.documentationComment(
1360 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1361 declaration.endToken.offset = 80;
1362 declaration.accept(builder);
1363
1364 List<FunctionElement> functions = holder.functions;
1365 expect(functions, hasLength(1));
1366 FunctionElement function = functions[0];
1367 expect(function, isNotNull);
1368 _assertHasCodeRange(function, 50, 31);
1369 expect(function.documentationComment, '/// aaa');
1370 expect(function.hasImplicitReturnType, isFalse);
1371 expect(function.name, functionName);
1372 expect(declaration.element, same(function));
1373 expect(declaration.functionExpression.element, same(function));
1374 expect(function.isExternal, isFalse);
1375 expect(function.isSynthetic, isFalse);
1376 expect(function.typeParameters, hasLength(0));
1377 }
1378
1379 void test_visitFunctionDeclaration_setter() {
1380 // set f() {}
1381 ElementHolder holder = new ElementHolder();
1382 ElementBuilder builder = _makeBuilder(holder);
1383 String functionName = "f";
1384 FunctionDeclaration declaration = AstFactory.functionDeclaration(
1385 null,
1386 Keyword.SET,
1387 functionName,
1388 AstFactory.functionExpression2(
1389 AstFactory.formalParameterList(), AstFactory.blockFunctionBody2()));
1390 declaration.documentationComment = AstFactory.documentationComment(
1391 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1392 declaration.endToken.offset = 80;
1393 declaration.accept(builder);
1394
1395 List<PropertyAccessorElement> accessors = holder.accessors;
1396 expect(accessors, hasLength(1));
1397 PropertyAccessorElement accessor = accessors[0];
1398 expect(accessor, isNotNull);
1399 _assertHasCodeRange(accessor, 50, 31);
1400 expect(accessor.documentationComment, '/// aaa');
1401 expect(accessor.hasImplicitReturnType, isTrue);
1402 expect(accessor.name, "$functionName=");
1403 expect(declaration.element, same(accessor));
1404 expect(declaration.functionExpression.element, same(accessor));
1405 expect(accessor.isGetter, isFalse);
1406 expect(accessor.isExternal, isFalse);
1407 expect(accessor.isSetter, isTrue);
1408 expect(accessor.isSynthetic, isFalse);
1409 expect(accessor.typeParameters, hasLength(0));
1410 PropertyInducingElement variable = accessor.variable;
1411 EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
1412 TopLevelVariableElement, variable);
1413 expect(variable.isSynthetic, isTrue);
1414 }
1415
1416 void test_visitFunctionDeclaration_typeParameters() {
1417 // f<E>() {}
1418 ElementHolder holder = new ElementHolder();
1419 ElementBuilder builder = _makeBuilder(holder);
1420 String functionName = 'f';
1421 String typeParameterName = 'E';
1422 FunctionExpression expression = AstFactory.functionExpression3(
1423 AstFactory.typeParameterList([typeParameterName]),
1424 AstFactory.formalParameterList(),
1425 AstFactory.blockFunctionBody2());
1426 FunctionDeclaration declaration =
1427 AstFactory.functionDeclaration(null, null, functionName, expression);
1428 declaration.accept(builder);
1429
1430 List<FunctionElement> functions = holder.functions;
1431 expect(functions, hasLength(1));
1432 FunctionElement function = functions[0];
1433 expect(function, isNotNull);
1434 expect(function.hasImplicitReturnType, isTrue);
1435 expect(function.name, functionName);
1436 expect(function.isExternal, isFalse);
1437 expect(function.isSynthetic, isFalse);
1438 expect(declaration.element, same(function));
1439 expect(expression.element, same(function));
1440 List<TypeParameterElement> typeParameters = function.typeParameters;
1441 expect(typeParameters, hasLength(1));
1442 TypeParameterElement typeParameter = typeParameters[0];
1443 expect(typeParameter, isNotNull);
1444 expect(typeParameter.name, typeParameterName);
1445 }
1446
1447 void test_visitFunctionExpression() {
1448 ElementHolder holder = new ElementHolder();
1449 ElementBuilder builder = _makeBuilder(holder);
1450 FunctionExpression expression = AstFactory.functionExpression2(
1451 AstFactory.formalParameterList(), AstFactory.blockFunctionBody2());
1452 expression.accept(builder);
1453 List<FunctionElement> functions = holder.functions;
1454 expect(functions, hasLength(1));
1455 FunctionElement function = functions[0];
1456 expect(function, isNotNull);
1457 expect(expression.element, same(function));
1458 expect(function.hasImplicitReturnType, isTrue);
1459 expect(function.isSynthetic, isFalse);
1460 expect(function.typeParameters, hasLength(0));
1461 }
1462
1463 void test_visitFunctionExpression_inBlockBody() {
1464 List<FunctionElement> functions =
1465 buildElementsForText('f() { return () => 42; }').functions[0].functions;
1466 expect(functions, hasLength(1));
1467 FunctionElement function = functions[0];
1468 expect(function, isNotNull);
1469 expect(function.hasImplicitReturnType, isTrue);
1470 expect(function.isSynthetic, isFalse);
1471 expect(function.typeParameters, hasLength(0));
1472 }
1473
1474 void test_visitFunctionExpression_inExpressionBody() {
1475 List<FunctionElement> functions =
1476 buildElementsForText('f() => () => 42;').functions[0].functions;
1477 expect(functions, hasLength(1));
1478 FunctionElement function = functions[0];
1479 expect(function, isNotNull);
1480 expect(function.hasImplicitReturnType, isTrue);
1481 expect(function.isSynthetic, isFalse);
1482 expect(function.typeParameters, hasLength(0));
1483 }
1484
1485 void test_visitFunctionTypeAlias() {
1486 ElementHolder holder = new ElementHolder();
1487 ElementBuilder builder = _makeBuilder(holder);
1488 String aliasName = "F";
1489 String parameterName = "E";
1490 FunctionTypeAlias aliasNode = AstFactory.typeAlias(
1491 null, aliasName, AstFactory.typeParameterList([parameterName]), null);
1492 aliasNode.documentationComment = AstFactory.documentationComment(
1493 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1494 aliasNode.endToken.offset = 80;
1495 aliasNode.accept(builder);
1496
1497 List<FunctionTypeAliasElement> aliases = holder.typeAliases;
1498 expect(aliases, hasLength(1));
1499 FunctionTypeAliasElement alias = aliases[0];
1500 expect(alias, isNotNull);
1501 _assertHasCodeRange(alias, 50, 31);
1502 expect(alias.documentationComment, '/// aaa');
1503 expect(alias.name, aliasName);
1504 expect(alias.parameters, hasLength(0));
1505 List<TypeParameterElement> typeParameters = alias.typeParameters;
1506 expect(typeParameters, hasLength(1));
1507 TypeParameterElement typeParameter = typeParameters[0];
1508 expect(typeParameter, isNotNull);
1509 expect(typeParameter.name, parameterName);
1510 }
1511
1512 void test_visitFunctionTypedFormalParameter() {
1513 ElementHolder holder = new ElementHolder();
1514 ElementBuilder builder = _makeBuilder(holder);
1515 String parameterName = "p";
1516 FunctionTypedFormalParameter formalParameter =
1517 AstFactory.functionTypedFormalParameter(null, parameterName);
1518 _useParameterInMethod(formalParameter, 100, 110);
1519 formalParameter.accept(builder);
1520 List<ParameterElement> parameters = holder.parameters;
1521 expect(parameters, hasLength(1));
1522 ParameterElement parameter = parameters[0];
1523 expect(parameter, isNotNull);
1524 expect(parameter.name, parameterName);
1525 expect(parameter.initializer, isNull);
1526 expect(parameter.isConst, isFalse);
1527 expect(parameter.isFinal, isFalse);
1528 expect(parameter.isSynthetic, isFalse);
1529 expect(parameter.parameterKind, ParameterKind.REQUIRED);
1530 _assertVisibleRange(parameter, 100, 110);
1531 }
1532
1533 void test_visitFunctionTypedFormalParameter_withTypeParameters() {
1534 ElementHolder holder = new ElementHolder();
1535 ElementBuilder builder = _makeBuilder(holder);
1536 String parameterName = "p";
1537 FunctionTypedFormalParameter formalParameter =
1538 AstFactory.functionTypedFormalParameter(null, parameterName);
1539 formalParameter.typeParameters = AstFactory.typeParameterList(['F']);
1540 _useParameterInMethod(formalParameter, 100, 110);
1541 formalParameter.accept(builder);
1542 List<ParameterElement> parameters = holder.parameters;
1543 expect(parameters, hasLength(1));
1544 ParameterElement parameter = parameters[0];
1545 expect(parameter, isNotNull);
1546 expect(parameter.name, parameterName);
1547 expect(parameter.initializer, isNull);
1548 expect(parameter.isConst, isFalse);
1549 expect(parameter.isFinal, isFalse);
1550 expect(parameter.isSynthetic, isFalse);
1551 expect(parameter.parameterKind, ParameterKind.REQUIRED);
1552 expect(parameter.typeParameters, hasLength(1));
1553 _assertVisibleRange(parameter, 100, 110);
1554 }
1555
1556 void test_visitLabeledStatement() {
1557 List<LabelElement> labels =
1558 buildElementsForText('f() { l: print(42); }').functions[0].labels;
1559 expect(labels, hasLength(1));
1560 LabelElement label = labels[0];
1561 expect(label, isNotNull);
1562 expect(label.name, 'l');
1563 expect(label.isSynthetic, isFalse);
1564 }
1565
1566 void test_visitMethodDeclaration_abstract() {
1567 // m();
1568 ElementHolder holder = new ElementHolder();
1569 ElementBuilder builder = _makeBuilder(holder);
1570 String methodName = "m";
1571 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1572 null,
1573 null,
1574 null,
1575 null,
1576 AstFactory.identifier3(methodName),
1577 AstFactory.formalParameterList(),
1578 AstFactory.emptyFunctionBody());
1579 methodDeclaration.accept(builder);
1580
1581 List<MethodElement> methods = holder.methods;
1582 expect(methods, hasLength(1));
1583 MethodElement method = methods[0];
1584 expect(method, isNotNull);
1585 expect(method.hasImplicitReturnType, isTrue);
1586 expect(method.name, methodName);
1587 expect(method.functions, hasLength(0));
1588 expect(method.labels, hasLength(0));
1589 expect(method.localVariables, hasLength(0));
1590 expect(method.parameters, hasLength(0));
1591 expect(method.typeParameters, hasLength(0));
1592 expect(method.isAbstract, isTrue);
1593 expect(method.isExternal, isFalse);
1594 expect(method.isStatic, isFalse);
1595 expect(method.isSynthetic, isFalse);
1596 }
1597
1598 void test_visitMethodDeclaration_duplicateField_synthetic() {
1599 buildElementsForText(r'''
1600 class A {
1601 int f;
1602 int get f => 42;
1603 }
1604 ''');
1605 ClassDeclaration classNode = compilationUnit.declarations.single;
1606 // ClassElement
1607 ClassElement classElement = classNode.element;
1608 expect(classElement.fields, hasLength(2));
1609 expect(classElement.accessors, hasLength(3));
1610 FieldElement notSyntheticFieldElement = classElement.fields
1611 .singleWhere((f) => f.displayName == 'f' && !f.isSynthetic);
1612 FieldElement syntheticFieldElement = classElement.fields
1613 .singleWhere((f) => f.displayName == 'f' && f.isSynthetic);
1614 PropertyAccessorElement syntheticGetterElement = classElement.accessors
1615 .singleWhere(
1616 (a) => a.displayName == 'f' && a.isGetter && a.isSynthetic);
1617 PropertyAccessorElement syntheticSetterElement = classElement.accessors
1618 .singleWhere(
1619 (a) => a.displayName == 'f' && a.isSetter && a.isSynthetic);
1620 PropertyAccessorElement notSyntheticGetterElement = classElement.accessors
1621 .singleWhere(
1622 (a) => a.displayName == 'f' && a.isGetter && !a.isSynthetic);
1623 expect(notSyntheticFieldElement.getter, same(syntheticGetterElement));
1624 expect(notSyntheticFieldElement.setter, same(syntheticSetterElement));
1625 expect(syntheticFieldElement.getter, same(notSyntheticGetterElement));
1626 expect(syntheticFieldElement.setter, isNull);
1627 // class members nodes and their elements
1628 FieldDeclaration fieldDeclNode = classNode.members[0];
1629 VariableDeclaration fieldNode = fieldDeclNode.fields.variables.single;
1630 MethodDeclaration getterNode = classNode.members[1];
1631 expect(fieldNode.element, notSyntheticFieldElement);
1632 expect(getterNode.element, notSyntheticGetterElement);
1633 }
1634
1635 void test_visitMethodDeclaration_external() {
1636 // external m();
1637 ElementHolder holder = new ElementHolder();
1638 ElementBuilder builder = _makeBuilder(holder);
1639 String methodName = "m";
1640 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1641 null,
1642 null,
1643 null,
1644 null,
1645 AstFactory.identifier3(methodName),
1646 AstFactory.formalParameterList(),
1647 AstFactory.emptyFunctionBody());
1648 methodDeclaration.externalKeyword =
1649 TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
1650 methodDeclaration.accept(builder);
1651
1652 List<MethodElement> methods = holder.methods;
1653 expect(methods, hasLength(1));
1654 MethodElement method = methods[0];
1655 expect(method, isNotNull);
1656 expect(method.hasImplicitReturnType, isTrue);
1657 expect(method.name, methodName);
1658 expect(method.functions, hasLength(0));
1659 expect(method.labels, hasLength(0));
1660 expect(method.localVariables, hasLength(0));
1661 expect(method.parameters, hasLength(0));
1662 expect(method.typeParameters, hasLength(0));
1663 expect(method.isAbstract, isFalse);
1664 expect(method.isExternal, isTrue);
1665 expect(method.isStatic, isFalse);
1666 expect(method.isSynthetic, isFalse);
1667 }
1668
1669 void test_visitMethodDeclaration_getter() {
1670 // get m() {}
1671 ElementHolder holder = new ElementHolder();
1672 ElementBuilder builder = _makeBuilder(holder);
1673 String methodName = "m";
1674 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1675 null,
1676 null,
1677 Keyword.GET,
1678 null,
1679 AstFactory.identifier3(methodName),
1680 AstFactory.formalParameterList(),
1681 AstFactory.blockFunctionBody2());
1682 methodDeclaration.documentationComment = AstFactory.documentationComment(
1683 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1684 methodDeclaration.endToken.offset = 80;
1685 methodDeclaration.accept(builder);
1686
1687 List<FieldElement> fields = holder.fields;
1688 expect(fields, hasLength(1));
1689 FieldElement field = fields[0];
1690 expect(field, isNotNull);
1691 expect(field.name, methodName);
1692 expect(field.isSynthetic, isTrue);
1693 expect(field.setter, isNull);
1694 PropertyAccessorElement getter = field.getter;
1695 expect(getter, isNotNull);
1696 _assertHasCodeRange(getter, 50, 31);
1697 expect(getter.documentationComment, '/// aaa');
1698 expect(getter.hasImplicitReturnType, isTrue);
1699 expect(getter.isAbstract, isFalse);
1700 expect(getter.isExternal, isFalse);
1701 expect(getter.isGetter, isTrue);
1702 expect(getter.isSynthetic, isFalse);
1703 expect(getter.name, methodName);
1704 expect(getter.variable, field);
1705 expect(getter.functions, hasLength(0));
1706 expect(getter.labels, hasLength(0));
1707 expect(getter.localVariables, hasLength(0));
1708 expect(getter.parameters, hasLength(0));
1709 }
1710
1711 void test_visitMethodDeclaration_getter_abstract() {
1712 // get m();
1713 ElementHolder holder = new ElementHolder();
1714 ElementBuilder builder = _makeBuilder(holder);
1715 String methodName = "m";
1716 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1717 null,
1718 null,
1719 Keyword.GET,
1720 null,
1721 AstFactory.identifier3(methodName),
1722 AstFactory.formalParameterList(),
1723 AstFactory.emptyFunctionBody());
1724 methodDeclaration.accept(builder);
1725
1726 List<FieldElement> fields = holder.fields;
1727 expect(fields, hasLength(1));
1728 FieldElement field = fields[0];
1729 expect(field, isNotNull);
1730 expect(field.name, methodName);
1731 expect(field.isSynthetic, isTrue);
1732 expect(field.setter, isNull);
1733 PropertyAccessorElement getter = field.getter;
1734 expect(getter, isNotNull);
1735 expect(getter.hasImplicitReturnType, isTrue);
1736 expect(getter.isAbstract, isTrue);
1737 expect(getter.isExternal, isFalse);
1738 expect(getter.isGetter, isTrue);
1739 expect(getter.isSynthetic, isFalse);
1740 expect(getter.name, methodName);
1741 expect(getter.variable, field);
1742 expect(getter.functions, hasLength(0));
1743 expect(getter.labels, hasLength(0));
1744 expect(getter.localVariables, hasLength(0));
1745 expect(getter.parameters, hasLength(0));
1746 }
1747
1748 void test_visitMethodDeclaration_getter_external() {
1749 // external get m();
1750 ElementHolder holder = new ElementHolder();
1751 ElementBuilder builder = _makeBuilder(holder);
1752 String methodName = "m";
1753 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(
1754 null,
1755 null,
1756 Keyword.GET,
1757 null,
1758 AstFactory.identifier3(methodName),
1759 AstFactory.formalParameterList());
1760 methodDeclaration.externalKeyword =
1761 TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
1762 methodDeclaration.accept(builder);
1763
1764 List<FieldElement> fields = holder.fields;
1765 expect(fields, hasLength(1));
1766 FieldElement field = fields[0];
1767 expect(field, isNotNull);
1768 expect(field.name, methodName);
1769 expect(field.isSynthetic, isTrue);
1770 expect(field.setter, isNull);
1771 PropertyAccessorElement getter = field.getter;
1772 expect(getter, isNotNull);
1773 expect(getter.hasImplicitReturnType, isTrue);
1774 expect(getter.isAbstract, isFalse);
1775 expect(getter.isExternal, isTrue);
1776 expect(getter.isGetter, isTrue);
1777 expect(getter.isSynthetic, isFalse);
1778 expect(getter.name, methodName);
1779 expect(getter.variable, field);
1780 expect(getter.functions, hasLength(0));
1781 expect(getter.labels, hasLength(0));
1782 expect(getter.localVariables, hasLength(0));
1783 expect(getter.parameters, hasLength(0));
1784 }
1785
1786 void test_visitMethodDeclaration_minimal() {
1787 // T m() {}
1788 ElementHolder holder = new ElementHolder();
1789 ElementBuilder builder = _makeBuilder(holder);
1790 String methodName = "m";
1791 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1792 null,
1793 AstFactory.typeName4('T'),
1794 null,
1795 null,
1796 AstFactory.identifier3(methodName),
1797 AstFactory.formalParameterList(),
1798 AstFactory.blockFunctionBody2());
1799 methodDeclaration.documentationComment = AstFactory.documentationComment(
1800 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1801 methodDeclaration.endToken.offset = 80;
1802 methodDeclaration.accept(builder);
1803
1804 List<MethodElement> methods = holder.methods;
1805 expect(methods, hasLength(1));
1806 MethodElement method = methods[0];
1807 expect(method, isNotNull);
1808 _assertHasCodeRange(method, 50, 31);
1809 expect(method.documentationComment, '/// aaa');
1810 expect(method.hasImplicitReturnType, isFalse);
1811 expect(method.name, methodName);
1812 expect(method.functions, hasLength(0));
1813 expect(method.labels, hasLength(0));
1814 expect(method.localVariables, hasLength(0));
1815 expect(method.parameters, hasLength(0));
1816 expect(method.typeParameters, hasLength(0));
1817 expect(method.isAbstract, isFalse);
1818 expect(method.isExternal, isFalse);
1819 expect(method.isStatic, isFalse);
1820 expect(method.isSynthetic, isFalse);
1821 }
1822
1823 void test_visitMethodDeclaration_operator() {
1824 // operator +(addend) {}
1825 ElementHolder holder = new ElementHolder();
1826 ElementBuilder builder = _makeBuilder(holder);
1827 String methodName = "+";
1828 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1829 null,
1830 null,
1831 null,
1832 Keyword.OPERATOR,
1833 AstFactory.identifier3(methodName),
1834 AstFactory
1835 .formalParameterList([AstFactory.simpleFormalParameter3("addend")]),
1836 AstFactory.blockFunctionBody2());
1837 methodDeclaration.accept(builder);
1838
1839 List<MethodElement> methods = holder.methods;
1840 expect(methods, hasLength(1));
1841 MethodElement method = methods[0];
1842 expect(method, isNotNull);
1843 expect(method.hasImplicitReturnType, isTrue);
1844 expect(method.name, methodName);
1845 expect(method.functions, hasLength(0));
1846 expect(method.labels, hasLength(0));
1847 expect(method.localVariables, hasLength(0));
1848 expect(method.parameters, hasLength(1));
1849 expect(method.typeParameters, hasLength(0));
1850 expect(method.isAbstract, isFalse);
1851 expect(method.isExternal, isFalse);
1852 expect(method.isStatic, isFalse);
1853 expect(method.isSynthetic, isFalse);
1854 }
1855
1856 void test_visitMethodDeclaration_setter() {
1857 // set m() {}
1858 ElementHolder holder = new ElementHolder();
1859 ElementBuilder builder = _makeBuilder(holder);
1860 String methodName = "m";
1861 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1862 null,
1863 null,
1864 Keyword.SET,
1865 null,
1866 AstFactory.identifier3(methodName),
1867 AstFactory.formalParameterList(),
1868 AstFactory.blockFunctionBody2());
1869 methodDeclaration.documentationComment = AstFactory.documentationComment(
1870 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
1871 methodDeclaration.endToken.offset = 80;
1872 methodDeclaration.accept(builder);
1873
1874 List<FieldElement> fields = holder.fields;
1875 expect(fields, hasLength(1));
1876 FieldElement field = fields[0];
1877 expect(field, isNotNull);
1878 expect(field.name, methodName);
1879 expect(field.isSynthetic, isTrue);
1880 expect(field.getter, isNull);
1881
1882 PropertyAccessorElement setter = field.setter;
1883 expect(setter, isNotNull);
1884 _assertHasCodeRange(setter, 50, 31);
1885 expect(setter.documentationComment, '/// aaa');
1886 expect(setter.hasImplicitReturnType, isTrue);
1887 expect(setter.isAbstract, isFalse);
1888 expect(setter.isExternal, isFalse);
1889 expect(setter.isSetter, isTrue);
1890 expect(setter.isSynthetic, isFalse);
1891 expect(setter.name, "$methodName=");
1892 expect(setter.displayName, methodName);
1893 expect(setter.variable, field);
1894 expect(setter.functions, hasLength(0));
1895 expect(setter.labels, hasLength(0));
1896 expect(setter.localVariables, hasLength(0));
1897 expect(setter.parameters, hasLength(0));
1898 }
1899
1900 void test_visitMethodDeclaration_setter_abstract() {
1901 // set m();
1902 ElementHolder holder = new ElementHolder();
1903 ElementBuilder builder = _makeBuilder(holder);
1904 String methodName = "m";
1905 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1906 null,
1907 null,
1908 Keyword.SET,
1909 null,
1910 AstFactory.identifier3(methodName),
1911 AstFactory.formalParameterList(),
1912 AstFactory.emptyFunctionBody());
1913 methodDeclaration.accept(builder);
1914
1915 List<FieldElement> fields = holder.fields;
1916 expect(fields, hasLength(1));
1917 FieldElement field = fields[0];
1918 expect(field, isNotNull);
1919 expect(field.name, methodName);
1920 expect(field.isSynthetic, isTrue);
1921 expect(field.getter, isNull);
1922 PropertyAccessorElement setter = field.setter;
1923 expect(setter, isNotNull);
1924 expect(setter.hasImplicitReturnType, isTrue);
1925 expect(setter.isAbstract, isTrue);
1926 expect(setter.isExternal, isFalse);
1927 expect(setter.isSetter, isTrue);
1928 expect(setter.isSynthetic, isFalse);
1929 expect(setter.name, "$methodName=");
1930 expect(setter.displayName, methodName);
1931 expect(setter.variable, field);
1932 expect(setter.functions, hasLength(0));
1933 expect(setter.labels, hasLength(0));
1934 expect(setter.localVariables, hasLength(0));
1935 expect(setter.parameters, hasLength(0));
1936 }
1937
1938 void test_visitMethodDeclaration_setter_external() {
1939 // external m();
1940 ElementHolder holder = new ElementHolder();
1941 ElementBuilder builder = _makeBuilder(holder);
1942 String methodName = "m";
1943 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration(
1944 null,
1945 null,
1946 Keyword.SET,
1947 null,
1948 AstFactory.identifier3(methodName),
1949 AstFactory.formalParameterList());
1950 methodDeclaration.externalKeyword =
1951 TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
1952 methodDeclaration.accept(builder);
1953
1954 List<FieldElement> fields = holder.fields;
1955 expect(fields, hasLength(1));
1956 FieldElement field = fields[0];
1957 expect(field, isNotNull);
1958 expect(field.name, methodName);
1959 expect(field.isSynthetic, isTrue);
1960 expect(field.getter, isNull);
1961 PropertyAccessorElement setter = field.setter;
1962 expect(setter, isNotNull);
1963 expect(setter.hasImplicitReturnType, isTrue);
1964 expect(setter.isAbstract, isFalse);
1965 expect(setter.isExternal, isTrue);
1966 expect(setter.isSetter, isTrue);
1967 expect(setter.isSynthetic, isFalse);
1968 expect(setter.name, "$methodName=");
1969 expect(setter.displayName, methodName);
1970 expect(setter.variable, field);
1971 expect(setter.functions, hasLength(0));
1972 expect(setter.labels, hasLength(0));
1973 expect(setter.localVariables, hasLength(0));
1974 expect(setter.parameters, hasLength(0));
1975 }
1976
1977 void test_visitMethodDeclaration_static() {
1978 // static m() {}
1979 ElementHolder holder = new ElementHolder();
1980 ElementBuilder builder = _makeBuilder(holder);
1981 String methodName = "m";
1982 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
1983 Keyword.STATIC,
1984 null,
1985 null,
1986 null,
1987 AstFactory.identifier3(methodName),
1988 AstFactory.formalParameterList(),
1989 AstFactory.blockFunctionBody2());
1990 methodDeclaration.accept(builder);
1991 List<MethodElement> methods = holder.methods;
1992 expect(methods, hasLength(1));
1993 MethodElement method = methods[0];
1994 expect(method, isNotNull);
1995 expect(method.hasImplicitReturnType, isTrue);
1996 expect(method.name, methodName);
1997 expect(method.functions, hasLength(0));
1998 expect(method.labels, hasLength(0));
1999 expect(method.localVariables, hasLength(0));
2000 expect(method.parameters, hasLength(0));
2001 expect(method.typeParameters, hasLength(0));
2002 expect(method.isAbstract, isFalse);
2003 expect(method.isExternal, isFalse);
2004 expect(method.isStatic, isTrue);
2005 expect(method.isSynthetic, isFalse);
2006 }
2007
2008 void test_visitMethodDeclaration_typeParameters() {
2009 // m<E>() {}
2010 ElementHolder holder = new ElementHolder();
2011 ElementBuilder builder = _makeBuilder(holder);
2012 String methodName = "m";
2013 MethodDeclaration methodDeclaration = AstFactory.methodDeclaration2(
2014 null,
2015 null,
2016 null,
2017 null,
2018 AstFactory.identifier3(methodName),
2019 AstFactory.formalParameterList(),
2020 AstFactory.blockFunctionBody2());
2021 methodDeclaration.typeParameters = AstFactory.typeParameterList(['E']);
2022 methodDeclaration.accept(builder);
2023
2024 List<MethodElement> methods = holder.methods;
2025 expect(methods, hasLength(1));
2026 MethodElement method = methods[0];
2027 expect(method, isNotNull);
2028 expect(method.hasImplicitReturnType, isTrue);
2029 expect(method.name, methodName);
2030 expect(method.functions, hasLength(0));
2031 expect(method.labels, hasLength(0));
2032 expect(method.localVariables, hasLength(0));
2033 expect(method.parameters, hasLength(0));
2034 expect(method.typeParameters, hasLength(1));
2035 expect(method.isAbstract, isFalse);
2036 expect(method.isExternal, isFalse);
2037 expect(method.isStatic, isFalse);
2038 expect(method.isSynthetic, isFalse);
2039 }
2040
2041 void test_visitMethodDeclaration_withMembers() {
2042 MethodElement method = buildElementsForText(
2043 'class C { m(p) { var v; try { l: return; } catch (e) {} } }')
2044 .types[0]
2045 .methods[0];
2046 String methodName = "m";
2047 String parameterName = "p";
2048 String localVariableName = "v";
2049 String labelName = "l";
2050 String exceptionParameterName = "e";
2051 expect(method, isNotNull);
2052 expect(method.hasImplicitReturnType, isTrue);
2053 expect(method.name, methodName);
2054 expect(method.typeParameters, hasLength(0));
2055 expect(method.isAbstract, isFalse);
2056 expect(method.isExternal, isFalse);
2057 expect(method.isStatic, isFalse);
2058 expect(method.isSynthetic, isFalse);
2059 List<VariableElement> parameters = method.parameters;
2060 expect(parameters, hasLength(1));
2061 VariableElement parameter = parameters[0];
2062 expect(parameter, isNotNull);
2063 expect(parameter.name, parameterName);
2064 List<VariableElement> localVariables = method.localVariables;
2065 expect(localVariables, hasLength(2));
2066 VariableElement firstVariable = localVariables[0];
2067 VariableElement secondVariable = localVariables[1];
2068 expect(firstVariable, isNotNull);
2069 expect(secondVariable, isNotNull);
2070 expect(
2071 (firstVariable.name == localVariableName &&
2072 secondVariable.name == exceptionParameterName) ||
2073 (firstVariable.name == exceptionParameterName &&
2074 secondVariable.name == localVariableName),
2075 isTrue);
2076 List<LabelElement> labels = method.labels;
2077 expect(labels, hasLength(1));
2078 LabelElement label = labels[0];
2079 expect(label, isNotNull);
2080 expect(label.name, labelName);
2081 }
2082
2083 void test_visitNamedFormalParameter() {
2084 ElementHolder holder = new ElementHolder();
2085 ElementBuilder builder = _makeBuilder(holder);
2086 String parameterName = "p";
2087 DefaultFormalParameter formalParameter = AstFactory.namedFormalParameter(
2088 AstFactory.simpleFormalParameter3(parameterName),
2089 AstFactory.identifier3("42"));
2090 _useParameterInMethod(formalParameter, 100, 110);
2091 formalParameter.beginToken.offset = 50;
2092 formalParameter.endToken.offset = 80;
2093 formalParameter.accept(builder);
2094 List<ParameterElement> parameters = holder.parameters;
2095 expect(parameters, hasLength(1));
2096 ParameterElement parameter = parameters[0];
2097 expect(parameter, isNotNull);
2098 _assertHasCodeRange(parameter, 50, 32);
2099 expect(parameter.name, parameterName);
2100 expect(parameter.isConst, isFalse);
2101 expect(parameter.isFinal, isFalse);
2102 expect(parameter.isSynthetic, isFalse);
2103 expect(parameter.parameterKind, ParameterKind.NAMED);
2104 _assertVisibleRange(parameter, 100, 110);
2105 expect(parameter.defaultValueCode, "42");
2106 FunctionElement initializer = parameter.initializer;
2107 expect(initializer, isNotNull);
2108 expect(initializer.isSynthetic, isTrue);
2109 expect(initializer.hasImplicitReturnType, isTrue);
2110 }
2111
2112 void test_visitSimpleFormalParameter_noType() {
2113 // p
2114 ElementHolder holder = new ElementHolder();
2115 ElementBuilder builder = _makeBuilder(holder);
2116 String parameterName = "p";
2117 SimpleFormalParameter formalParameter =
2118 AstFactory.simpleFormalParameter3(parameterName);
2119 _useParameterInMethod(formalParameter, 100, 110);
2120 formalParameter.accept(builder);
2121 List<ParameterElement> parameters = holder.parameters;
2122 expect(parameters, hasLength(1));
2123 ParameterElement parameter = parameters[0];
2124 expect(parameter, isNotNull);
2125 expect(parameter.hasImplicitType, isTrue);
2126 expect(parameter.initializer, isNull);
2127 expect(parameter.isConst, isFalse);
2128 expect(parameter.isFinal, isFalse);
2129 expect(parameter.isSynthetic, isFalse);
2130 expect(parameter.name, parameterName);
2131 expect(parameter.parameterKind, ParameterKind.REQUIRED);
2132 _assertVisibleRange(parameter, 100, 110);
2133 }
2134
2135 void test_visitSimpleFormalParameter_type() {
2136 // T p
2137 ElementHolder holder = new ElementHolder();
2138 ElementBuilder builder = _makeBuilder(holder);
2139 String parameterName = "p";
2140 SimpleFormalParameter formalParameter = AstFactory.simpleFormalParameter4(
2141 AstFactory.typeName4('T'), parameterName);
2142 _useParameterInMethod(formalParameter, 100, 110);
2143 formalParameter.accept(builder);
2144 List<ParameterElement> parameters = holder.parameters;
2145 expect(parameters, hasLength(1));
2146 ParameterElement parameter = parameters[0];
2147 expect(parameter, isNotNull);
2148 expect(parameter.hasImplicitType, isFalse);
2149 expect(parameter.initializer, isNull);
2150 expect(parameter.isConst, isFalse);
2151 expect(parameter.isFinal, isFalse);
2152 expect(parameter.isSynthetic, isFalse);
2153 expect(parameter.name, parameterName);
2154 expect(parameter.parameterKind, ParameterKind.REQUIRED);
2155 _assertVisibleRange(parameter, 100, 110);
2156 }
2157
2158 void test_visitTypeAlias_minimal() {
2159 ElementHolder holder = new ElementHolder();
2160 ElementBuilder builder = _makeBuilder(holder);
2161 String aliasName = "F";
2162 TypeAlias typeAlias = AstFactory.typeAlias(null, aliasName, null, null);
2163 typeAlias.accept(builder);
2164 List<FunctionTypeAliasElement> aliases = holder.typeAliases;
2165 expect(aliases, hasLength(1));
2166 FunctionTypeAliasElement alias = aliases[0];
2167 expect(alias, isNotNull);
2168 expect(alias.name, aliasName);
2169 expect(alias.type, isNotNull);
2170 expect(alias.isSynthetic, isFalse);
2171 }
2172
2173 void test_visitTypeAlias_withFormalParameters() {
2174 ElementHolder holder = new ElementHolder();
2175 ElementBuilder builder = _makeBuilder(holder);
2176 String aliasName = "F";
2177 String firstParameterName = "x";
2178 String secondParameterName = "y";
2179 TypeAlias typeAlias = AstFactory.typeAlias(
2180 null,
2181 aliasName,
2182 AstFactory.typeParameterList(),
2183 AstFactory.formalParameterList([
2184 AstFactory.simpleFormalParameter3(firstParameterName),
2185 AstFactory.simpleFormalParameter3(secondParameterName)
2186 ]));
2187 typeAlias.beginToken.offset = 50;
2188 typeAlias.endToken.offset = 80;
2189 typeAlias.accept(builder);
2190 List<FunctionTypeAliasElement> aliases = holder.typeAliases;
2191 expect(aliases, hasLength(1));
2192 FunctionTypeAliasElement alias = aliases[0];
2193 expect(alias, isNotNull);
2194 _assertHasCodeRange(alias, 50, 31);
2195 expect(alias.name, aliasName);
2196 expect(alias.type, isNotNull);
2197 expect(alias.isSynthetic, isFalse);
2198 List<VariableElement> parameters = alias.parameters;
2199 expect(parameters, hasLength(2));
2200 expect(parameters[0].name, firstParameterName);
2201 expect(parameters[1].name, secondParameterName);
2202 List<TypeParameterElement> typeParameters = alias.typeParameters;
2203 expect(typeParameters, isNotNull);
2204 expect(typeParameters, hasLength(0));
2205 }
2206
2207 void test_visitTypeAlias_withTypeParameters() {
2208 ElementHolder holder = new ElementHolder();
2209 ElementBuilder builder = _makeBuilder(holder);
2210 String aliasName = "F";
2211 String firstTypeParameterName = "A";
2212 String secondTypeParameterName = "B";
2213 TypeAlias typeAlias = AstFactory.typeAlias(
2214 null,
2215 aliasName,
2216 AstFactory.typeParameterList(
2217 [firstTypeParameterName, secondTypeParameterName]),
2218 AstFactory.formalParameterList());
2219 typeAlias.accept(builder);
2220 List<FunctionTypeAliasElement> aliases = holder.typeAliases;
2221 expect(aliases, hasLength(1));
2222 FunctionTypeAliasElement alias = aliases[0];
2223 expect(alias, isNotNull);
2224 expect(alias.name, aliasName);
2225 expect(alias.type, isNotNull);
2226 expect(alias.isSynthetic, isFalse);
2227 List<VariableElement> parameters = alias.parameters;
2228 expect(parameters, isNotNull);
2229 expect(parameters, hasLength(0));
2230 List<TypeParameterElement> typeParameters = alias.typeParameters;
2231 expect(typeParameters, hasLength(2));
2232 expect(typeParameters[0].name, firstTypeParameterName);
2233 expect(typeParameters[1].name, secondTypeParameterName);
2234 }
2235
2236 void test_visitTypeParameter() {
2237 ElementHolder holder = new ElementHolder();
2238 ElementBuilder builder = _makeBuilder(holder);
2239 String parameterName = "E";
2240 TypeParameter typeParameter = AstFactory.typeParameter(parameterName);
2241 typeParameter.beginToken.offset = 50;
2242 typeParameter.accept(builder);
2243 List<TypeParameterElement> typeParameters = holder.typeParameters;
2244 expect(typeParameters, hasLength(1));
2245 TypeParameterElement typeParameterElement = typeParameters[0];
2246 expect(typeParameterElement, isNotNull);
2247 _assertHasCodeRange(typeParameterElement, 50, 1);
2248 expect(typeParameterElement.name, parameterName);
2249 expect(typeParameterElement.bound, isNull);
2250 expect(typeParameterElement.isSynthetic, isFalse);
2251 }
2252
2253 void test_visitVariableDeclaration_inConstructor() {
2254 List<ConstructorElement> constructors =
2255 buildElementsForText('class C { C() { var v = 1; } }')
2256 .types[0]
2257 .constructors;
2258 expect(constructors, hasLength(1));
2259 List<LocalVariableElement> variableElements =
2260 constructors[0].localVariables;
2261 expect(variableElements, hasLength(1));
2262 LocalVariableElement variableElement = variableElements[0];
2263 _assertHasCodeRange(variableElement, 16, 10);
2264 expect(variableElement.hasImplicitType, isTrue);
2265 expect(variableElement.name, 'v');
2266 _assertVisibleRange(variableElement, 14, 28);
2267 }
2268
2269 void test_visitVariableDeclaration_inForEachStatement() {
2270 ElementHolder holder = new ElementHolder();
2271 ElementBuilder builder = _makeBuilder(holder);
2272 //
2273 // m() { for (var v in []) }
2274 //
2275 String variableName = "v";
2276 Statement statement = AstFactory.forEachStatement(
2277 AstFactory.declaredIdentifier3('v'),
2278 AstFactory.listLiteral(),
2279 AstFactory.block());
2280 _setNodeSourceRange(statement, 100, 110);
2281 MethodDeclaration method = AstFactory.methodDeclaration2(
2282 null,
2283 null,
2284 null,
2285 null,
2286 AstFactory.identifier3("m"),
2287 AstFactory.formalParameterList(),
2288 AstFactory.blockFunctionBody2([statement]));
2289 _setBlockBodySourceRange(method.body, 200, 220);
2290 method.accept(builder);
2291
2292 List<MethodElement> methods = holder.methods;
2293 expect(methods, hasLength(1));
2294 List<LocalVariableElement> variableElements = methods[0].localVariables;
2295 expect(variableElements, hasLength(1));
2296 LocalVariableElement variableElement = variableElements[0];
2297 expect(variableElement.name, variableName);
2298 _assertVisibleRange(variableElement, 100, 110);
2299 }
2300
2301 void test_visitVariableDeclaration_inForStatement() {
2302 ElementHolder holder = new ElementHolder();
2303 ElementBuilder builder = _makeBuilder(holder);
2304 //
2305 // m() { for (T v;;) }
2306 //
2307 String variableName = "v";
2308 ForStatement statement = AstFactory.forStatement2(
2309 AstFactory.variableDeclarationList(null, AstFactory.typeName4('T'),
2310 [AstFactory.variableDeclaration('v')]),
2311 null,
2312 null,
2313 AstFactory.block());
2314 _setNodeSourceRange(statement, 100, 110);
2315 MethodDeclaration method = AstFactory.methodDeclaration2(
2316 null,
2317 null,
2318 null,
2319 null,
2320 AstFactory.identifier3("m"),
2321 AstFactory.formalParameterList(),
2322 AstFactory.blockFunctionBody2([statement]));
2323 _setBlockBodySourceRange(method.body, 200, 220);
2324 method.accept(builder);
2325
2326 List<MethodElement> methods = holder.methods;
2327 expect(methods, hasLength(1));
2328 List<LocalVariableElement> variableElements = methods[0].localVariables;
2329 expect(variableElements, hasLength(1));
2330 LocalVariableElement variableElement = variableElements[0];
2331 expect(variableElement.name, variableName);
2332 _assertVisibleRange(variableElement, 100, 110);
2333 }
2334
2335 void test_visitVariableDeclaration_inMethod() {
2336 ElementHolder holder = new ElementHolder();
2337 ElementBuilder builder = _makeBuilder(holder);
2338 //
2339 // m() {T v;}
2340 //
2341 String variableName = "v";
2342 VariableDeclaration variable =
2343 AstFactory.variableDeclaration2(variableName, null);
2344 Statement statement = AstFactory.variableDeclarationStatement(
2345 null, AstFactory.typeName4('T'), [variable]);
2346 MethodDeclaration method = AstFactory.methodDeclaration2(
2347 null,
2348 null,
2349 null,
2350 null,
2351 AstFactory.identifier3("m"),
2352 AstFactory.formalParameterList(),
2353 AstFactory.blockFunctionBody2([statement]));
2354 _setBlockBodySourceRange(method.body, 100, 110);
2355 method.accept(builder);
2356
2357 List<MethodElement> methods = holder.methods;
2358 expect(methods, hasLength(1));
2359 List<LocalVariableElement> variableElements = methods[0].localVariables;
2360 expect(variableElements, hasLength(1));
2361 LocalVariableElement variableElement = variableElements[0];
2362 expect(variableElement.hasImplicitType, isFalse);
2363 expect(variableElement.name, variableName);
2364 _assertVisibleRange(variableElement, 100, 110);
2365 }
2366
2367 void test_visitVariableDeclaration_localNestedInFunction() {
2368 ElementHolder holder = new ElementHolder();
2369 ElementBuilder builder = _makeBuilder(holder);
2370 //
2371 // var f = () {var v;};
2372 //
2373 String variableName = "v";
2374 VariableDeclaration variable =
2375 AstFactory.variableDeclaration2(variableName, null);
2376 Statement statement =
2377 AstFactory.variableDeclarationStatement2(null, [variable]);
2378 Expression initializer = AstFactory.functionExpression2(
2379 AstFactory.formalParameterList(),
2380 AstFactory.blockFunctionBody2([statement]));
2381 String fieldName = "f";
2382 VariableDeclaration field =
2383 AstFactory.variableDeclaration2(fieldName, initializer);
2384 FieldDeclaration fieldDeclaration =
2385 AstFactory.fieldDeclaration2(false, null, [field]);
2386 fieldDeclaration.accept(builder);
2387
2388 List<FieldElement> variables = holder.fields;
2389 expect(variables, hasLength(1));
2390 FieldElement fieldElement = variables[0];
2391 expect(fieldElement, isNotNull);
2392 FunctionElement initializerElement = fieldElement.initializer;
2393 expect(initializerElement, isNotNull);
2394 expect(initializerElement.hasImplicitReturnType, isTrue);
2395 List<FunctionElement> functionElements = initializerElement.functions;
2396 expect(functionElements, hasLength(1));
2397 List<LocalVariableElement> variableElements =
2398 functionElements[0].localVariables;
2399 expect(variableElements, hasLength(1));
2400 LocalVariableElement variableElement = variableElements[0];
2401 expect(variableElement.hasImplicitType, isTrue);
2402 expect(variableElement.isConst, isFalse);
2403 expect(variableElement.isFinal, isFalse);
2404 expect(variableElement.isSynthetic, isFalse);
2405 expect(variableElement.name, variableName);
2406 }
2407
2408 void test_visitVariableDeclaration_noInitializer() {
2409 // var v;
2410 ElementHolder holder = new ElementHolder();
2411 ElementBuilder builder = _makeBuilder(holder);
2412 String variableName = "v";
2413 VariableDeclaration variableDeclaration =
2414 AstFactory.variableDeclaration2(variableName, null);
2415 AstFactory.variableDeclarationList2(null, [variableDeclaration]);
2416 variableDeclaration.accept(builder);
2417
2418 List<TopLevelVariableElement> variables = holder.topLevelVariables;
2419 expect(variables, hasLength(1));
2420 TopLevelVariableElement variable = variables[0];
2421 expect(variable, isNotNull);
2422 expect(variable.hasImplicitType, isTrue);
2423 expect(variable.initializer, isNull);
2424 expect(variable.name, variableName);
2425 expect(variable.isConst, isFalse);
2426 expect(variable.isFinal, isFalse);
2427 expect(variable.isSynthetic, isFalse);
2428 expect(variable.getter, isNotNull);
2429 expect(variable.setter, isNotNull);
2430 }
2431
2432 void test_visitVariableDeclaration_top() {
2433 // final a, b;
2434 ElementHolder holder = new ElementHolder();
2435 ElementBuilder builder = _makeBuilder(holder);
2436 VariableDeclaration variableDeclaration1 =
2437 AstFactory.variableDeclaration('a');
2438 VariableDeclaration variableDeclaration2 =
2439 AstFactory.variableDeclaration('b');
2440 TopLevelVariableDeclaration topLevelVariableDeclaration = AstFactory
2441 .topLevelVariableDeclaration(
2442 Keyword.FINAL, null, [variableDeclaration1, variableDeclaration2]);
2443 topLevelVariableDeclaration.documentationComment = AstFactory
2444 .documentationComment(
2445 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
2446
2447 topLevelVariableDeclaration.accept(builder);
2448 List<TopLevelVariableElement> variables = holder.topLevelVariables;
2449 expect(variables, hasLength(2));
2450
2451 TopLevelVariableElement variable1 = variables[0];
2452 expect(variable1, isNotNull);
2453 expect(variable1.documentationComment, '/// aaa');
2454
2455 TopLevelVariableElement variable2 = variables[1];
2456 expect(variable2, isNotNull);
2457 expect(variable2.documentationComment, '/// aaa');
2458 }
2459
2460 void test_visitVariableDeclaration_top_const_hasInitializer() {
2461 // const v = 42;
2462 ElementHolder holder = new ElementHolder();
2463 ElementBuilder builder = _makeBuilder(holder);
2464 String variableName = "v";
2465 VariableDeclaration variableDeclaration =
2466 AstFactory.variableDeclaration2(variableName, AstFactory.integer(42));
2467 AstFactory.variableDeclarationList2(Keyword.CONST, [variableDeclaration]);
2468 variableDeclaration.accept(builder);
2469
2470 List<TopLevelVariableElement> variables = holder.topLevelVariables;
2471 expect(variables, hasLength(1));
2472 TopLevelVariableElement variable = variables[0];
2473 expect(variable, new isInstanceOf<ConstTopLevelVariableElementImpl>());
2474 expect(variable.initializer, isNotNull);
2475 expect(variable.initializer.type, isNotNull);
2476 expect(variable.initializer.hasImplicitReturnType, isTrue);
2477 expect(variable.name, variableName);
2478 expect(variable.hasImplicitType, isTrue);
2479 expect(variable.isConst, isTrue);
2480 expect(variable.isFinal, isFalse);
2481 expect(variable.isSynthetic, isFalse);
2482 expect(variable.getter, isNotNull);
2483 expect(variable.setter, isNull);
2484 }
2485
2486 void test_visitVariableDeclaration_top_final() {
2487 // final v;
2488 ElementHolder holder = new ElementHolder();
2489 ElementBuilder builder = _makeBuilder(holder);
2490 String variableName = "v";
2491 VariableDeclaration variableDeclaration =
2492 AstFactory.variableDeclaration2(variableName, null);
2493 AstFactory.variableDeclarationList2(Keyword.FINAL, [variableDeclaration]);
2494 variableDeclaration.accept(builder);
2495 List<TopLevelVariableElement> variables = holder.topLevelVariables;
2496 expect(variables, hasLength(1));
2497 TopLevelVariableElement variable = variables[0];
2498 expect(variable, isNotNull);
2499 expect(variable.hasImplicitType, isTrue);
2500 expect(variable.initializer, isNull);
2501 expect(variable.name, variableName);
2502 expect(variable.isConst, isFalse);
2503 expect(variable.isFinal, isTrue);
2504 expect(variable.isSynthetic, isFalse);
2505 expect(variable.getter, isNotNull);
2506 expect(variable.setter, isNull);
2507 }
2508
2509 void _assertHasCodeRange(Element element, int offset, int length) {
2510 ElementImpl elementImpl = element;
2511 expect(elementImpl.codeOffset, offset);
2512 expect(elementImpl.codeLength, length);
2513 }
2514
2515 void _assertVisibleRange(LocalElement element, int offset, int end) {
2516 SourceRange visibleRange = element.visibleRange;
2517 expect(visibleRange.offset, offset);
2518 expect(visibleRange.end, end);
2519 }
2520
2521 ElementBuilder _makeBuilder(ElementHolder holder) =>
2522 new ElementBuilder(holder, new CompilationUnitElementImpl('test.dart'));
2523
2524 void _setBlockBodySourceRange(BlockFunctionBody body, int offset, int end) {
2525 _setNodeSourceRange(body.block, offset, end);
2526 }
2527
2528 void _setNodeSourceRange(AstNode node, int offset, int end) {
2529 node.beginToken.offset = offset;
2530 Token endToken = node.endToken;
2531 endToken.offset = end - endToken.length;
2532 }
2533
2534 void _useParameterInMethod(
2535 FormalParameter formalParameter, int blockOffset, int blockEnd) {
2536 Block block = AstFactory.block();
2537 block.leftBracket.offset = blockOffset;
2538 block.rightBracket.offset = blockEnd - 1;
2539 BlockFunctionBody body = AstFactory.blockFunctionBody(block);
2540 AstFactory.methodDeclaration2(
2541 null,
2542 null,
2543 null,
2544 null,
2545 AstFactory.identifier3("main"),
2546 AstFactory.formalParameterList([formalParameter]),
2547 body);
2548 }
2549 }
2550
2551 @reflectiveTest
2552 class ElementLocatorTest extends ResolverTestCase { 353 class ElementLocatorTest extends ResolverTestCase {
2553 void fail_locate_Identifier_partOfDirective() { 354 void fail_locate_Identifier_partOfDirective() {
2554 // Can't resolve the library element without the library declaration. 355 // Can't resolve the library element without the library declaration.
2555 // AstNode id = findNodeIn("foo", "part of foo.bar;"); 356 // AstNode id = findNodeIn("foo", "part of foo.bar;");
2556 // Element element = ElementLocator.locate(id); 357 // Element element = ElementLocator.locate(id);
2557 // assertInstanceOf(LibraryElement.class, element); 358 // assertInstanceOf(LibraryElement.class, element);
2558 fail("Test this case"); 359 fail("Test this case");
2559 } 360 }
2560 361
2561 @override 362 @override
(...skipping 1906 matching lines...) Expand 10 before | Expand all | Expand 10 after
4468 expect(UriKind.fromEncoding(0x70), same(UriKind.PACKAGE_URI)); 2269 expect(UriKind.fromEncoding(0x70), same(UriKind.PACKAGE_URI));
4469 expect(UriKind.fromEncoding(0x58), same(null)); 2270 expect(UriKind.fromEncoding(0x58), same(null));
4470 } 2271 }
4471 2272
4472 void test_getEncoding() { 2273 void test_getEncoding() {
4473 expect(UriKind.DART_URI.encoding, 0x64); 2274 expect(UriKind.DART_URI.encoding, 0x64);
4474 expect(UriKind.FILE_URI.encoding, 0x66); 2275 expect(UriKind.FILE_URI.encoding, 0x66);
4475 expect(UriKind.PACKAGE_URI.encoding, 0x70); 2276 expect(UriKind.PACKAGE_URI.encoding, 0x70);
4476 } 2277 }
4477 } 2278 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/dart/element/test_all.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698