OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 | |
6 /** | 5 /** |
7 * The messages in this file should meet the following guide lines: | 6 * The messages in this file should meet the following guide lines: |
8 * | 7 * |
9 * 1. The message should be a complete sentence starting with an uppercase | 8 * 1. The message should be a complete sentence starting with an uppercase |
10 * letter, and ending with a period. | 9 * letter, and ending with a period. |
11 * | 10 * |
12 * 2. Reserved words and embedded identifiers should be in single quotes, so | 11 * 2. Reserved words and embedded identifiers should be in single quotes, so |
13 * prefer double quotes for the complete message. For example, "The | 12 * prefer double quotes for the complete message. For example, "The |
14 * class '#{className}' can't use 'super'." Notice that the word 'class' in the | 13 * class '#{className}' can't use 'super'." Notice that the word 'class' in the |
15 * preceding message is not quoted as it refers to the concept 'class', not the | 14 * preceding message is not quoted as it refers to the concept 'class', not the |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 * or ERROR about the duplicated element, and then report an INFO about the | 55 * or ERROR about the duplicated element, and then report an INFO about the |
57 * location of the existing element. | 56 * location of the existing element. |
58 * | 57 * |
59 * Generally, we want to provide messages that consists of three sentences: | 58 * Generally, we want to provide messages that consists of three sentences: |
60 * 1. what is wrong, 2. why is it wrong, 3. how do I fix it. However, we | 59 * 1. what is wrong, 2. why is it wrong, 3. how do I fix it. However, we |
61 * combine the first two in [template] and the last in [howToFix]. | 60 * combine the first two in [template] and the last in [howToFix]. |
62 */ | 61 */ |
63 | 62 |
64 library dart2js.messages; | 63 library dart2js.messages; |
65 | 64 |
66 import '../tokens/token.dart' show | 65 import '../tokens/token.dart' show ErrorToken, Token; |
67 ErrorToken, | |
68 Token; | |
69 | 66 |
70 import 'invariant.dart' show | 67 import 'invariant.dart' show invariant; |
71 invariant; | 68 import 'spannable.dart' show CURRENT_ELEMENT_SPANNABLE; |
72 import 'spannable.dart' show | |
73 CURRENT_ELEMENT_SPANNABLE; | |
74 | 69 |
75 import 'generated/shared_messages.dart' as shared_messages; | 70 import 'generated/shared_messages.dart' as shared_messages; |
76 | 71 |
77 const DONT_KNOW_HOW_TO_FIX = "Computer says no!"; | 72 const DONT_KNOW_HOW_TO_FIX = "Computer says no!"; |
78 | 73 |
79 /// Keys for the [MessageTemplate]s. | 74 /// Keys for the [MessageTemplate]s. |
80 enum MessageKind { | 75 enum MessageKind { |
81 ABSTRACT_CLASS_INSTANTIATION, | 76 ABSTRACT_CLASS_INSTANTIATION, |
82 ABSTRACT_GETTER, | 77 ABSTRACT_GETTER, |
83 ABSTRACT_METHOD, | 78 ABSTRACT_METHOD, |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 * | 486 * |
492 * An example is either a String containing the example source code or a Map | 487 * An example is either a String containing the example source code or a Map |
493 * from filenames to source code. In the latter case, the filename for the | 488 * from filenames to source code. In the latter case, the filename for the |
494 * main library code must be 'main.dart'. | 489 * main library code must be 'main.dart'. |
495 */ | 490 */ |
496 final List examples; | 491 final List examples; |
497 | 492 |
498 /// Additional options needed for the examples to work. | 493 /// Additional options needed for the examples to work. |
499 final List<String> options; | 494 final List<String> options; |
500 | 495 |
501 const MessageTemplate( | 496 const MessageTemplate(this.kind, this.template, |
502 this.kind, | 497 {this.howToFix, this.examples, this.options: const <String>[]}); |
503 this.template, | |
504 {this.howToFix, | |
505 this.examples, | |
506 this.options: const <String>[]}); | |
507 | 498 |
508 /// All templates used by the compiler. | 499 /// All templates used by the compiler. |
509 /// | 500 /// |
510 /// The map is complete mapping from [MessageKind] to their corresponding | 501 /// The map is complete mapping from [MessageKind] to their corresponding |
511 /// [MessageTemplate]. | 502 /// [MessageTemplate]. |
512 // The key type is a union of MessageKind and SharedMessageKind. | 503 // The key type is a union of MessageKind and SharedMessageKind. |
513 static final Map<dynamic, MessageTemplate> TEMPLATES = | 504 static final Map<dynamic, MessageTemplate> TEMPLATES = <dynamic, |
514 <dynamic, MessageTemplate>{} | 505 MessageTemplate>{} |
515 ..addAll(shared_messages.TEMPLATES) | 506 ..addAll(shared_messages.TEMPLATES) |
516 ..addAll(const<MessageKind, MessageTemplate>{ | 507 ..addAll(const <MessageKind, MessageTemplate>{ |
517 /// Do not use this. It is here for legacy and debugging. It violates item | 508 /// Do not use this. It is here for legacy and debugging. It violates item |
518 /// 4 of the guide lines for error messages in the beginning of the file. | 509 /// 4 of the guide lines for error messages in the beginning of the file. |
519 MessageKind.GENERIC: | 510 MessageKind.GENERIC: |
520 const MessageTemplate(MessageKind.GENERIC, '#{text}'), | 511 const MessageTemplate(MessageKind.GENERIC, '#{text}'), |
521 | 512 |
522 MessageKind.VOID_EXPRESSION: | 513 MessageKind.VOID_EXPRESSION: const MessageTemplate( |
523 const MessageTemplate(MessageKind.VOID_EXPRESSION, | 514 MessageKind.VOID_EXPRESSION, "Expression does not yield a value."), |
524 "Expression does not yield a value."), | |
525 | 515 |
526 MessageKind.VOID_VARIABLE: | 516 MessageKind.VOID_VARIABLE: const MessageTemplate( |
527 const MessageTemplate(MessageKind.VOID_VARIABLE, | 517 MessageKind.VOID_VARIABLE, "Variable cannot be of type void."), |
528 "Variable cannot be of type void."), | |
529 | 518 |
530 MessageKind.RETURN_VALUE_IN_VOID: | 519 MessageKind.RETURN_VALUE_IN_VOID: const MessageTemplate( |
531 const MessageTemplate(MessageKind.RETURN_VALUE_IN_VOID, | 520 MessageKind.RETURN_VALUE_IN_VOID, |
532 "Cannot return value from void function."), | 521 "Cannot return value from void function."), |
533 | 522 |
534 MessageKind.RETURN_NOTHING: | 523 MessageKind.RETURN_NOTHING: const MessageTemplate( |
535 const MessageTemplate(MessageKind.RETURN_NOTHING, | 524 MessageKind.RETURN_NOTHING, |
536 "Value of type '#{returnType}' expected."), | 525 "Value of type '#{returnType}' expected."), |
537 | 526 |
538 MessageKind.MISSING_ARGUMENT: | 527 MessageKind.MISSING_ARGUMENT: const MessageTemplate( |
539 const MessageTemplate(MessageKind.MISSING_ARGUMENT, | 528 MessageKind.MISSING_ARGUMENT, |
540 "Missing argument of type '#{argumentType}'."), | 529 "Missing argument of type '#{argumentType}'."), |
541 | 530 |
542 MessageKind.ADDITIONAL_ARGUMENT: | 531 MessageKind.ADDITIONAL_ARGUMENT: const MessageTemplate( |
543 const MessageTemplate(MessageKind.ADDITIONAL_ARGUMENT, | 532 MessageKind.ADDITIONAL_ARGUMENT, "Additional argument."), |
544 "Additional argument."), | |
545 | 533 |
546 MessageKind.NAMED_ARGUMENT_NOT_FOUND: | 534 MessageKind.NAMED_ARGUMENT_NOT_FOUND: const MessageTemplate( |
547 const MessageTemplate(MessageKind.NAMED_ARGUMENT_NOT_FOUND, | 535 MessageKind.NAMED_ARGUMENT_NOT_FOUND, |
548 "No named argument '#{argumentName}' found on method."), | 536 "No named argument '#{argumentName}' found on method."), |
549 | 537 |
550 MessageKind.AWAIT_MEMBER_NOT_FOUND: | 538 MessageKind.AWAIT_MEMBER_NOT_FOUND: const MessageTemplate( |
551 const MessageTemplate(MessageKind.AWAIT_MEMBER_NOT_FOUND, | 539 MessageKind.AWAIT_MEMBER_NOT_FOUND, |
552 "No member named 'await' in class '#{className}'.", | 540 "No member named 'await' in class '#{className}'.", |
553 howToFix: "Did you mean to add the 'async' marker " | 541 howToFix: "Did you mean to add the 'async' marker " |
554 "to '#{functionName}'?", | 542 "to '#{functionName}'?", |
555 examples: const [""" | 543 examples: const [ |
| 544 """ |
556 class A { | 545 class A { |
557 m() => await -3; | 546 m() => await -3; |
558 } | 547 } |
559 main() => new A().m(); | 548 main() => new A().m(); |
560 """]), | 549 """ |
| 550 ]), |
561 | 551 |
562 MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE: | 552 MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE: const MessageTemplate( |
563 const MessageTemplate(MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE, | 553 MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE, |
564 "No member named 'await' in class '#{className}'.", | 554 "No member named 'await' in class '#{className}'.", |
565 howToFix: "Did you mean to add the 'async' marker " | 555 howToFix: "Did you mean to add the 'async' marker " |
566 "to the enclosing function?", | 556 "to the enclosing function?", |
567 examples: const [""" | 557 examples: const [ |
| 558 """ |
568 class A { | 559 class A { |
569 m() => () => await -3; | 560 m() => () => await -3; |
570 } | 561 } |
571 main() => new A().m(); | 562 main() => new A().m(); |
572 """]), | 563 """ |
| 564 ]), |
573 | 565 |
574 MessageKind.NOT_CALLABLE: | 566 MessageKind.NOT_CALLABLE: const MessageTemplate( |
575 const MessageTemplate(MessageKind.NOT_CALLABLE, | 567 MessageKind.NOT_CALLABLE, "'#{elementName}' is not callable."), |
576 "'#{elementName}' is not callable."), | |
577 | 568 |
578 MessageKind.MEMBER_NOT_STATIC: | 569 MessageKind.MEMBER_NOT_STATIC: const MessageTemplate( |
579 const MessageTemplate(MessageKind.MEMBER_NOT_STATIC, | 570 MessageKind.MEMBER_NOT_STATIC, |
580 "'#{className}.#{memberName}' is not static."), | 571 "'#{className}.#{memberName}' is not static."), |
581 | 572 |
582 MessageKind.NO_INSTANCE_AVAILABLE: | 573 MessageKind.NO_INSTANCE_AVAILABLE: const MessageTemplate( |
583 const MessageTemplate(MessageKind.NO_INSTANCE_AVAILABLE, | 574 MessageKind.NO_INSTANCE_AVAILABLE, |
584 "'#{name}' is only available in instance methods."), | 575 "'#{name}' is only available in instance methods."), |
585 | 576 |
586 MessageKind.NO_THIS_AVAILABLE: | 577 MessageKind.NO_THIS_AVAILABLE: const MessageTemplate( |
587 const MessageTemplate(MessageKind.NO_THIS_AVAILABLE, | 578 MessageKind.NO_THIS_AVAILABLE, |
588 "'this' is only available in instance methods."), | 579 "'this' is only available in instance methods."), |
589 | 580 |
590 MessageKind.PRIVATE_ACCESS: | 581 MessageKind.PRIVATE_ACCESS: const MessageTemplate( |
591 const MessageTemplate(MessageKind.PRIVATE_ACCESS, | 582 MessageKind.PRIVATE_ACCESS, |
592 "'#{name}' is declared private within library " | 583 "'#{name}' is declared private within library " |
593 "'#{libraryName}'."), | 584 "'#{libraryName}'."), |
594 | 585 |
595 MessageKind.THIS_IS_THE_DECLARATION: | 586 MessageKind.THIS_IS_THE_DECLARATION: const MessageTemplate( |
596 const MessageTemplate(MessageKind.THIS_IS_THE_DECLARATION, | 587 MessageKind.THIS_IS_THE_DECLARATION, |
597 "This is the declaration of '#{name}'."), | 588 "This is the declaration of '#{name}'."), |
598 | 589 |
599 MessageKind.THIS_IS_THE_METHOD: | 590 MessageKind.THIS_IS_THE_METHOD: const MessageTemplate( |
600 const MessageTemplate(MessageKind.THIS_IS_THE_METHOD, | 591 MessageKind.THIS_IS_THE_METHOD, "This is the method declaration."), |
601 "This is the method declaration."), | |
602 | 592 |
603 MessageKind.CANNOT_RESOLVE: | 593 MessageKind.CANNOT_RESOLVE: const MessageTemplate( |
604 const MessageTemplate(MessageKind.CANNOT_RESOLVE, | 594 MessageKind.CANNOT_RESOLVE, "Cannot resolve '#{name}'."), |
605 "Cannot resolve '#{name}'."), | |
606 | 595 |
607 MessageKind.CANNOT_RESOLVE_AWAIT: | 596 MessageKind.CANNOT_RESOLVE_AWAIT: const MessageTemplate( |
608 const MessageTemplate(MessageKind.CANNOT_RESOLVE_AWAIT, | 597 MessageKind.CANNOT_RESOLVE_AWAIT, "Cannot resolve '#{name}'.", |
| 598 howToFix: "Did you mean to add the 'async' marker " |
| 599 "to '#{functionName}'?", |
| 600 examples: const [ |
| 601 "main() => await -3;", |
| 602 "foo() => await -3; main() => foo();" |
| 603 ]), |
| 604 |
| 605 MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE: const MessageTemplate( |
| 606 MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE, |
609 "Cannot resolve '#{name}'.", | 607 "Cannot resolve '#{name}'.", |
610 howToFix: "Did you mean to add the 'async' marker " | 608 howToFix: "Did you mean to add the 'async' marker " |
611 "to '#{functionName}'?", | 609 "to the enclosing function?", |
612 examples: const [ | 610 examples: const ["main() { (() => await -3)(); }",]), |
613 "main() => await -3;", | |
614 "foo() => await -3; main() => foo();" | |
615 ]), | |
616 | 611 |
617 MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE: | 612 MessageKind.CANNOT_RESOLVE_IN_INITIALIZER: const MessageTemplate( |
618 const MessageTemplate(MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE, | 613 MessageKind.CANNOT_RESOLVE_IN_INITIALIZER, |
619 "Cannot resolve '#{name}'.", | |
620 howToFix: "Did you mean to add the 'async' marker " | |
621 "to the enclosing function?", | |
622 examples: const [ | |
623 "main() { (() => await -3)(); }", | |
624 ]), | |
625 | |
626 MessageKind.CANNOT_RESOLVE_IN_INITIALIZER: | |
627 const MessageTemplate(MessageKind.CANNOT_RESOLVE_IN_INITIALIZER, | |
628 "Cannot resolve '#{name}'. It would be implicitly looked up on this " | 614 "Cannot resolve '#{name}'. It would be implicitly looked up on this " |
629 "instance, but instances are not available in initializers.", | 615 "instance, but instances are not available in initializers.", |
630 howToFix: "Try correcting the unresolved reference or move the " | 616 howToFix: "Try correcting the unresolved reference or move the " |
631 "initialization to a constructor body.", | 617 "initialization to a constructor body.", |
632 examples: const [""" | 618 examples: const [ |
| 619 """ |
633 class A { | 620 class A { |
634 var test = unresolvedName; | 621 var test = unresolvedName; |
635 } | 622 } |
636 main() => new A(); | 623 main() => new A(); |
637 """]), | 624 """ |
| 625 ]), |
638 | 626 |
639 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR: | 627 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR: const MessageTemplate( |
640 const MessageTemplate(MessageKind.CANNOT_RESOLVE_CONSTRUCTOR, | 628 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR, |
641 "Cannot resolve constructor '#{constructorName}'."), | 629 "Cannot resolve constructor '#{constructorName}'."), |
642 | 630 |
643 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT: | 631 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT: |
644 const MessageTemplate( | 632 const MessageTemplate( |
645 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT, | 633 MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT, |
646 "cannot resolve constructor '#{constructorName}' " | 634 "cannot resolve constructor '#{constructorName}' " |
647 "for implicit super call.", | 635 "for implicit super call.", |
648 howToFix: "Try explicitly invoking a constructor of the super class", | 636 howToFix: |
649 examples: const [""" | 637 "Try explicitly invoking a constructor of the super class", |
| 638 examples: const [ |
| 639 """ |
650 class A { | 640 class A { |
651 A.foo() {} | 641 A.foo() {} |
652 } | 642 } |
653 class B extends A { | 643 class B extends A { |
654 B(); | 644 B(); |
655 } | 645 } |
656 main() => new B(); | 646 main() => new B(); |
657 """]), | 647 """ |
| 648 ]), |
658 | 649 |
659 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME: | 650 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME: const MessageTemplate( |
660 const MessageTemplate(MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME, | 651 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME, |
661 "Unnamed constructor name must be '#{name}'."), | 652 "Unnamed constructor name must be '#{name}'."), |
662 | 653 |
663 MessageKind.INVALID_CONSTRUCTOR_NAME: | 654 MessageKind.INVALID_CONSTRUCTOR_NAME: const MessageTemplate( |
664 const MessageTemplate(MessageKind.INVALID_CONSTRUCTOR_NAME, | 655 MessageKind.INVALID_CONSTRUCTOR_NAME, |
665 "Constructor name must start with '#{name}'."), | 656 "Constructor name must start with '#{name}'."), |
666 | 657 |
667 MessageKind.CANNOT_RESOLVE_TYPE: | 658 MessageKind.CANNOT_RESOLVE_TYPE: const MessageTemplate( |
668 const MessageTemplate(MessageKind.CANNOT_RESOLVE_TYPE, | 659 MessageKind.CANNOT_RESOLVE_TYPE, |
669 "Cannot resolve type '#{typeName}'."), | 660 "Cannot resolve type '#{typeName}'."), |
670 | 661 |
671 MessageKind.DUPLICATE_DEFINITION: | 662 MessageKind.DUPLICATE_DEFINITION: const MessageTemplate( |
672 const MessageTemplate(MessageKind.DUPLICATE_DEFINITION, | 663 MessageKind.DUPLICATE_DEFINITION, |
673 "Duplicate definition of '#{name}'.", | 664 "Duplicate definition of '#{name}'.", |
674 howToFix: "Try to rename or remove this definition.", | 665 howToFix: "Try to rename or remove this definition.", |
675 examples: const [""" | 666 examples: const [ |
| 667 """ |
676 class C { | 668 class C { |
677 void f() {} | 669 void f() {} |
678 int get f => 1; | 670 int get f => 1; |
679 } | 671 } |
680 | 672 |
681 main() { | 673 main() { |
682 new C(); | 674 new C(); |
683 } | 675 } |
684 | 676 |
685 """]), | 677 """ |
| 678 ]), |
686 | 679 |
687 MessageKind.EXISTING_DEFINITION: | 680 MessageKind.EXISTING_DEFINITION: const MessageTemplate( |
688 const MessageTemplate(MessageKind.EXISTING_DEFINITION, | 681 MessageKind.EXISTING_DEFINITION, "Existing definition of '#{name}'."), |
689 "Existing definition of '#{name}'."), | |
690 | 682 |
691 MessageKind.DUPLICATE_IMPORT: | 683 MessageKind.DUPLICATE_IMPORT: const MessageTemplate( |
692 const MessageTemplate(MessageKind.DUPLICATE_IMPORT, | 684 MessageKind.DUPLICATE_IMPORT, "Duplicate import of '#{name}'."), |
693 "Duplicate import of '#{name}'."), | |
694 | 685 |
695 MessageKind.HIDDEN_IMPORT: | 686 MessageKind.HIDDEN_IMPORT: const MessageTemplate( |
696 const MessageTemplate(MessageKind.HIDDEN_IMPORT, | 687 MessageKind.HIDDEN_IMPORT, |
697 "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' " | 688 "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' " |
698 "from library '#{hidingUri}'.", | 689 "from library '#{hidingUri}'.", |
699 howToFix: | 690 howToFix: |
700 "Try adding 'hide #{name}' to the import of '#{hiddenUri}'.", | 691 "Try adding 'hide #{name}' to the import of '#{hiddenUri}'.", |
701 examples: const [ | 692 examples: const [ |
702 const { | 693 const { |
703 'main.dart': | 694 'main.dart': """ |
704 """ | |
705 import 'dart:async'; // This imports a class Future. | 695 import 'dart:async'; // This imports a class Future. |
706 import 'future.dart'; | 696 import 'future.dart'; |
707 | 697 |
708 void main() => new Future();""", | 698 void main() => new Future();""", |
709 | 699 'future.dart': """ |
710 'future.dart': | |
711 """ | |
712 library future; | 700 library future; |
713 | 701 |
714 class Future {}"""}, | 702 class Future {}""" |
715 | 703 }, |
716 const { | 704 const { |
717 'main.dart': | 705 'main.dart': """ |
718 """ | |
719 import 'future.dart'; | 706 import 'future.dart'; |
720 import 'dart:async'; // This imports a class Future. | 707 import 'dart:async'; // This imports a class Future. |
721 | 708 |
722 void main() => new Future();""", | 709 void main() => new Future();""", |
723 | 710 'future.dart': """ |
724 'future.dart': | |
725 """ | |
726 library future; | 711 library future; |
727 | 712 |
728 class Future {}"""}, | 713 class Future {}""" |
729 | 714 }, |
730 const { | 715 const { |
731 'main.dart': | 716 'main.dart': """ |
732 """ | |
733 import 'export.dart'; | 717 import 'export.dart'; |
734 import 'dart:async'; // This imports a class Future. | 718 import 'dart:async'; // This imports a class Future. |
735 | 719 |
736 void main() => new Future();""", | 720 void main() => new Future();""", |
737 | 721 'future.dart': """ |
738 'future.dart': | |
739 """ | |
740 library future; | 722 library future; |
741 | 723 |
742 class Future {}""", | 724 class Future {}""", |
743 | 725 'export.dart': """ |
744 'export.dart': | |
745 """ | |
746 library export; | 726 library export; |
747 | 727 |
748 export 'future.dart';"""}, | 728 export 'future.dart';""" |
749 | 729 }, |
750 const { | 730 const { |
751 'main.dart': | 731 'main.dart': """ |
752 """ | |
753 import 'future.dart' as prefix; | 732 import 'future.dart' as prefix; |
754 import 'dart:async' as prefix; // This imports a class Future. | 733 import 'dart:async' as prefix; // This imports a class Future. |
755 | 734 |
756 void main() => new prefix.Future();""", | 735 void main() => new prefix.Future();""", |
757 | 736 'future.dart': """ |
758 'future.dart': | |
759 """ | |
760 library future; | 737 library future; |
761 | 738 |
762 class Future {}"""}]), | 739 class Future {}""" |
| 740 } |
| 741 ]), |
763 | 742 |
764 | 743 MessageKind.HIDDEN_IMPLICIT_IMPORT: const MessageTemplate( |
765 MessageKind.HIDDEN_IMPLICIT_IMPORT: | 744 MessageKind.HIDDEN_IMPLICIT_IMPORT, |
766 const MessageTemplate(MessageKind.HIDDEN_IMPLICIT_IMPORT, | |
767 "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' " | 745 "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' " |
768 "from library '#{hidingUri}'.", | 746 "from library '#{hidingUri}'.", |
769 howToFix: "Try adding an explicit " | 747 howToFix: "Try adding an explicit " |
770 "'import \"#{hiddenUri}\" hide #{name}'.", | 748 "'import \"#{hiddenUri}\" hide #{name}'.", |
771 examples: const [ | 749 examples: const [ |
772 const { | 750 const { |
773 'main.dart': | 751 'main.dart': """ |
774 """ | |
775 // This hides the implicit import of class Type from dart:core. | 752 // This hides the implicit import of class Type from dart:core. |
776 import 'type.dart'; | 753 import 'type.dart'; |
777 | 754 |
778 void main() => new Type();""", | 755 void main() => new Type();""", |
779 | 756 'type.dart': """ |
780 'type.dart': | |
781 """ | |
782 library type; | 757 library type; |
783 | 758 |
784 class Type {}"""}, | 759 class Type {}""" |
785 const { | 760 }, |
786 'conflictsWithDart.dart': | 761 const { |
787 """ | 762 'conflictsWithDart.dart': """ |
788 library conflictsWithDart; | 763 library conflictsWithDart; |
789 | 764 |
790 class Duration { | 765 class Duration { |
791 static var x = 100; | 766 static var x = 100; |
792 } | 767 } |
793 """, | 768 """, |
794 | 769 'conflictsWithDartAsWell.dart': """ |
795 'conflictsWithDartAsWell.dart': | |
796 """ | |
797 library conflictsWithDartAsWell; | 770 library conflictsWithDartAsWell; |
798 | 771 |
799 class Duration { | 772 class Duration { |
800 static var x = 100; | 773 static var x = 100; |
801 } | 774 } |
802 """, | 775 """, |
803 | 776 'main.dart': r""" |
804 'main.dart': | |
805 r""" | |
806 library testDartConflicts; | 777 library testDartConflicts; |
807 | 778 |
808 import 'conflictsWithDart.dart'; | 779 import 'conflictsWithDart.dart'; |
809 import 'conflictsWithDartAsWell.dart'; | 780 import 'conflictsWithDartAsWell.dart'; |
810 | 781 |
811 main() { | 782 main() { |
812 print("Hail Caesar ${Duration.x}"); | 783 print("Hail Caesar ${Duration.x}"); |
813 } | 784 } |
814 """}]), | 785 """ |
| 786 } |
| 787 ]), |
815 | 788 |
816 MessageKind.DUPLICATE_EXPORT: | 789 MessageKind.DUPLICATE_EXPORT: const MessageTemplate( |
817 const MessageTemplate(MessageKind.DUPLICATE_EXPORT, | 790 MessageKind.DUPLICATE_EXPORT, "Duplicate export of '#{name}'.", |
818 "Duplicate export of '#{name}'.", | |
819 howToFix: "Try adding 'hide #{name}' to one of the exports.", | 791 howToFix: "Try adding 'hide #{name}' to one of the exports.", |
820 examples: const [const { | 792 examples: const [ |
821 'main.dart': """ | 793 const { |
| 794 'main.dart': """ |
822 export 'decl1.dart'; | 795 export 'decl1.dart'; |
823 export 'decl2.dart'; | 796 export 'decl2.dart'; |
824 | 797 |
825 main() {}""", | 798 main() {}""", |
826 'decl1.dart': "class Class {}", | 799 'decl1.dart': "class Class {}", |
827 'decl2.dart': "class Class {}"}]), | 800 'decl2.dart': "class Class {}" |
| 801 } |
| 802 ]), |
828 | 803 |
829 MessageKind.DUPLICATE_EXPORT_CONT: | 804 MessageKind.DUPLICATE_EXPORT_CONT: const MessageTemplate( |
830 const MessageTemplate(MessageKind.DUPLICATE_EXPORT_CONT, | 805 MessageKind.DUPLICATE_EXPORT_CONT, |
831 "This is another export of '#{name}'."), | 806 "This is another export of '#{name}'."), |
832 | 807 |
833 MessageKind.DUPLICATE_EXPORT_DECL: | 808 MessageKind.DUPLICATE_EXPORT_DECL: const MessageTemplate( |
834 const MessageTemplate(MessageKind.DUPLICATE_EXPORT_DECL, | 809 MessageKind.DUPLICATE_EXPORT_DECL, |
835 "The exported '#{name}' from export #{uriString} is defined here."), | 810 "The exported '#{name}' from export #{uriString} is defined here."), |
836 | 811 |
837 MessageKind.EMPTY_HIDE: | 812 MessageKind.EMPTY_HIDE: const MessageTemplate(MessageKind.EMPTY_HIDE, |
838 const MessageTemplate(MessageKind.EMPTY_HIDE, | 813 "Library '#{uri}' doesn't export a '#{name}' declaration.", |
839 "Library '#{uri}' doesn't export a '#{name}' declaration.", | 814 howToFix: "Try removing '#{name}' the 'hide' clause.", |
840 howToFix: "Try removing '#{name}' the 'hide' clause.", | 815 examples: const [ |
841 examples: const [ | 816 const { |
842 const { | 817 'main.dart': """ |
843 'main.dart': """ | |
844 import 'dart:core' hide Foo; | 818 import 'dart:core' hide Foo; |
845 | 819 |
846 main() {}"""}, | 820 main() {}""" |
847 const { | 821 }, |
848 'main.dart': """ | 822 const { |
| 823 'main.dart': """ |
849 export 'dart:core' hide Foo; | 824 export 'dart:core' hide Foo; |
850 | 825 |
851 main() {}"""}, | 826 main() {}""" |
852 ]), | 827 }, |
| 828 ]), |
853 | 829 |
854 MessageKind.EMPTY_SHOW: | 830 MessageKind.EMPTY_SHOW: const MessageTemplate(MessageKind.EMPTY_SHOW, |
855 const MessageTemplate(MessageKind.EMPTY_SHOW, | 831 "Library '#{uri}' doesn't export a '#{name}' declaration.", |
856 "Library '#{uri}' doesn't export a '#{name}' declaration.", | 832 howToFix: "Try removing '#{name}' from the 'show' clause.", |
857 howToFix: "Try removing '#{name}' from the 'show' clause.", | 833 examples: const [ |
858 examples: const [ | 834 const { |
859 const { | 835 'main.dart': """ |
860 'main.dart': """ | |
861 import 'dart:core' show Foo; | 836 import 'dart:core' show Foo; |
862 | 837 |
863 main() {}"""}, | 838 main() {}""" |
864 const { | 839 }, |
865 'main.dart': """ | 840 const { |
| 841 'main.dart': """ |
866 export 'dart:core' show Foo; | 842 export 'dart:core' show Foo; |
867 | 843 |
868 main() {}"""}, | 844 main() {}""" |
869 ]), | 845 }, |
| 846 ]), |
870 | 847 |
871 MessageKind.NOT_A_TYPE: | 848 MessageKind.NOT_A_TYPE: const MessageTemplate( |
872 const MessageTemplate(MessageKind.NOT_A_TYPE, | 849 MessageKind.NOT_A_TYPE, "'#{node}' is not a type."), |
873 "'#{node}' is not a type."), | |
874 | 850 |
875 MessageKind.NOT_A_PREFIX: | 851 MessageKind.NOT_A_PREFIX: const MessageTemplate( |
876 const MessageTemplate(MessageKind.NOT_A_PREFIX, | 852 MessageKind.NOT_A_PREFIX, "'#{node}' is not a prefix."), |
877 "'#{node}' is not a prefix."), | |
878 | 853 |
879 MessageKind.PREFIX_AS_EXPRESSION: | 854 MessageKind.PREFIX_AS_EXPRESSION: const MessageTemplate( |
880 const MessageTemplate(MessageKind.PREFIX_AS_EXPRESSION, | 855 MessageKind.PREFIX_AS_EXPRESSION, |
881 "Library prefix '#{prefix}' is not a valid expression."), | 856 "Library prefix '#{prefix}' is not a valid expression."), |
882 | 857 |
883 MessageKind.CANNOT_FIND_CONSTRUCTOR: | 858 MessageKind.CANNOT_FIND_CONSTRUCTOR: const MessageTemplate( |
884 const MessageTemplate(MessageKind.CANNOT_FIND_CONSTRUCTOR, | 859 MessageKind.CANNOT_FIND_CONSTRUCTOR, |
885 "Cannot find constructor '#{constructorName}' in class " | 860 "Cannot find constructor '#{constructorName}' in class " |
886 "'#{className}'."), | 861 "'#{className}'."), |
887 | 862 |
888 MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR: | 863 MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR: const MessageTemplate( |
889 const MessageTemplate(MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR, | 864 MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR, |
890 "Cannot find unnamed constructor in class " | 865 "Cannot find unnamed constructor in class " |
891 "'#{className}'."), | 866 "'#{className}'."), |
892 | 867 |
893 MessageKind.CYCLIC_CLASS_HIERARCHY: | 868 MessageKind.CYCLIC_CLASS_HIERARCHY: const MessageTemplate( |
894 const MessageTemplate(MessageKind.CYCLIC_CLASS_HIERARCHY, | 869 MessageKind.CYCLIC_CLASS_HIERARCHY, |
895 "'#{className}' creates a cycle in the class hierarchy."), | 870 "'#{className}' creates a cycle in the class hierarchy."), |
896 | 871 |
897 MessageKind.CYCLIC_REDIRECTING_FACTORY: | 872 MessageKind.CYCLIC_REDIRECTING_FACTORY: const MessageTemplate( |
898 const MessageTemplate(MessageKind.CYCLIC_REDIRECTING_FACTORY, | 873 MessageKind.CYCLIC_REDIRECTING_FACTORY, |
899 'Redirecting factory leads to a cyclic redirection.'), | 874 'Redirecting factory leads to a cyclic redirection.'), |
900 | 875 |
901 MessageKind.INVALID_RECEIVER_IN_INITIALIZER: | 876 MessageKind.INVALID_RECEIVER_IN_INITIALIZER: const MessageTemplate( |
902 const MessageTemplate(MessageKind.INVALID_RECEIVER_IN_INITIALIZER, | 877 MessageKind.INVALID_RECEIVER_IN_INITIALIZER, |
903 "Field initializer expected."), | 878 "Field initializer expected."), |
904 | 879 |
905 MessageKind.NO_SUPER_IN_STATIC: | 880 MessageKind.NO_SUPER_IN_STATIC: const MessageTemplate( |
906 const MessageTemplate(MessageKind.NO_SUPER_IN_STATIC, | 881 MessageKind.NO_SUPER_IN_STATIC, |
907 "'super' is only available in instance methods."), | 882 "'super' is only available in instance methods."), |
908 | 883 |
909 MessageKind.DUPLICATE_INITIALIZER: | 884 MessageKind.DUPLICATE_INITIALIZER: const MessageTemplate( |
910 const MessageTemplate(MessageKind.DUPLICATE_INITIALIZER, | 885 MessageKind.DUPLICATE_INITIALIZER, |
911 "Field '#{fieldName}' is initialized more than once."), | 886 "Field '#{fieldName}' is initialized more than once."), |
912 | 887 |
913 MessageKind.ALREADY_INITIALIZED: | 888 MessageKind.ALREADY_INITIALIZED: const MessageTemplate( |
914 const MessageTemplate(MessageKind.ALREADY_INITIALIZED, | 889 MessageKind.ALREADY_INITIALIZED, |
915 "'#{fieldName}' was already initialized here."), | 890 "'#{fieldName}' was already initialized here."), |
916 | 891 |
917 MessageKind.INIT_STATIC_FIELD: | 892 MessageKind.INIT_STATIC_FIELD: const MessageTemplate( |
918 const MessageTemplate(MessageKind.INIT_STATIC_FIELD, | 893 MessageKind.INIT_STATIC_FIELD, |
919 "Cannot initialize static field '#{fieldName}'."), | 894 "Cannot initialize static field '#{fieldName}'."), |
920 | 895 |
921 MessageKind.NOT_A_FIELD: | 896 MessageKind.NOT_A_FIELD: const MessageTemplate( |
922 const MessageTemplate(MessageKind.NOT_A_FIELD, | 897 MessageKind.NOT_A_FIELD, "'#{fieldName}' is not a field."), |
923 "'#{fieldName}' is not a field."), | |
924 | 898 |
925 MessageKind.CONSTRUCTOR_CALL_EXPECTED: | 899 MessageKind.CONSTRUCTOR_CALL_EXPECTED: const MessageTemplate( |
926 const MessageTemplate(MessageKind.CONSTRUCTOR_CALL_EXPECTED, | 900 MessageKind.CONSTRUCTOR_CALL_EXPECTED, |
927 "only call to 'this' or 'super' constructor allowed."), | 901 "only call to 'this' or 'super' constructor allowed."), |
928 | 902 |
929 MessageKind.INVALID_FOR_IN: | 903 MessageKind.INVALID_FOR_IN: const MessageTemplate( |
930 const MessageTemplate(MessageKind.INVALID_FOR_IN, | 904 MessageKind.INVALID_FOR_IN, "Invalid for-in variable declaration."), |
931 "Invalid for-in variable declaration."), | |
932 | 905 |
933 MessageKind.INVALID_INITIALIZER: | 906 MessageKind.INVALID_INITIALIZER: const MessageTemplate( |
934 const MessageTemplate(MessageKind.INVALID_INITIALIZER, | 907 MessageKind.INVALID_INITIALIZER, "Invalid initializer."), |
935 "Invalid initializer."), | |
936 | 908 |
937 MessageKind.FUNCTION_WITH_INITIALIZER: | 909 MessageKind.FUNCTION_WITH_INITIALIZER: const MessageTemplate( |
938 const MessageTemplate(MessageKind.FUNCTION_WITH_INITIALIZER, | 910 MessageKind.FUNCTION_WITH_INITIALIZER, |
939 "Only constructors can have initializers."), | 911 "Only constructors can have initializers."), |
940 | 912 |
941 MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE: | 913 MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE: const MessageTemplate( |
942 const MessageTemplate(MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE, | 914 MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE, |
943 "Cyclic constructor redirection."), | 915 "Cyclic constructor redirection."), |
944 | 916 |
945 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY: | 917 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY: const MessageTemplate( |
946 const MessageTemplate(MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY, | 918 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY, |
947 "Redirecting constructor can't have a body."), | 919 "Redirecting constructor can't have a body."), |
948 | 920 |
949 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER: | 921 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER: |
950 const MessageTemplate( | 922 const MessageTemplate( |
951 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER, | 923 MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER, |
952 "Redirecting constructor cannot have other initializers."), | 924 "Redirecting constructor cannot have other initializers."), |
953 | 925 |
954 MessageKind.SUPER_INITIALIZER_IN_OBJECT: | 926 MessageKind.SUPER_INITIALIZER_IN_OBJECT: const MessageTemplate( |
955 const MessageTemplate(MessageKind.SUPER_INITIALIZER_IN_OBJECT, | 927 MessageKind.SUPER_INITIALIZER_IN_OBJECT, |
956 "'Object' cannot have a super initializer."), | 928 "'Object' cannot have a super initializer."), |
957 | 929 |
958 MessageKind.DUPLICATE_SUPER_INITIALIZER: | 930 MessageKind.DUPLICATE_SUPER_INITIALIZER: const MessageTemplate( |
959 const MessageTemplate(MessageKind.DUPLICATE_SUPER_INITIALIZER, | 931 MessageKind.DUPLICATE_SUPER_INITIALIZER, |
960 "Cannot have more than one super initializer."), | 932 "Cannot have more than one super initializer."), |
961 | 933 |
962 MessageKind.SUPER_CALL_TO_FACTORY: | 934 MessageKind.SUPER_CALL_TO_FACTORY: const MessageTemplate( |
963 const MessageTemplate(MessageKind.SUPER_CALL_TO_FACTORY, | 935 MessageKind.SUPER_CALL_TO_FACTORY, |
964 "The target of the superinitializer must be a generative " | 936 "The target of the superinitializer must be a generative " |
965 "constructor.", | 937 "constructor.", |
966 howToFix: "Try calling another constructor on the superclass.", | 938 howToFix: "Try calling another constructor on the superclass.", |
967 examples: const [""" | 939 examples: const [ |
| 940 """ |
968 class Super { | 941 class Super { |
969 factory Super() => null; | 942 factory Super() => null; |
970 } | 943 } |
971 class Class extends Super {} | 944 class Class extends Super {} |
972 main() => new Class(); | 945 main() => new Class(); |
973 """, """ | 946 """, |
| 947 """ |
974 class Super { | 948 class Super { |
975 factory Super() => null; | 949 factory Super() => null; |
976 } | 950 } |
977 class Class extends Super { | 951 class Class extends Super { |
978 Class(); | 952 Class(); |
979 } | 953 } |
980 main() => new Class(); | 954 main() => new Class(); |
981 """, """ | 955 """, |
| 956 """ |
982 class Super { | 957 class Super { |
983 factory Super() => null; | 958 factory Super() => null; |
984 } | 959 } |
985 class Class extends Super { | 960 class Class extends Super { |
986 Class() : super(); | 961 Class() : super(); |
987 } | 962 } |
988 main() => new Class(); | 963 main() => new Class(); |
989 """, """ | 964 """, |
| 965 """ |
990 class Super { | 966 class Super { |
991 factory Super.foo() => null; | 967 factory Super.foo() => null; |
992 } | 968 } |
993 class Class extends Super { | 969 class Class extends Super { |
994 Class() : super.foo(); | 970 Class() : super.foo(); |
995 } | 971 } |
996 main() => new Class(); | 972 main() => new Class(); |
997 """]), | 973 """ |
| 974 ]), |
998 | 975 |
999 MessageKind.THIS_CALL_TO_FACTORY: | 976 MessageKind.THIS_CALL_TO_FACTORY: const MessageTemplate( |
1000 const MessageTemplate(MessageKind.THIS_CALL_TO_FACTORY, | 977 MessageKind.THIS_CALL_TO_FACTORY, |
1001 "The target of the redirection clause must be a generative " | 978 "The target of the redirection clause must be a generative " |
1002 "constructor", | 979 "constructor", |
1003 howToFix: "Try redirecting to another constructor.", | 980 howToFix: "Try redirecting to another constructor.", |
1004 examples: const [""" | 981 examples: const [ |
| 982 """ |
1005 class Class { | 983 class Class { |
1006 factory Class() => null; | 984 factory Class() => null; |
1007 Class.foo() : this(); | 985 Class.foo() : this(); |
1008 } | 986 } |
1009 main() => new Class.foo(); | 987 main() => new Class.foo(); |
1010 """, """ | 988 """, |
| 989 """ |
1011 class Class { | 990 class Class { |
1012 factory Class.foo() => null; | 991 factory Class.foo() => null; |
1013 Class() : this.foo(); | 992 Class() : this.foo(); |
1014 } | 993 } |
1015 main() => new Class(); | 994 main() => new Class(); |
1016 """]), | 995 """ |
| 996 ]), |
1017 | 997 |
1018 MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS: | 998 MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS: const MessageTemplate( |
1019 const MessageTemplate(MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS, | 999 MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS, |
1020 "Arguments do not match the expected parameters of constructor " | 1000 "Arguments do not match the expected parameters of constructor " |
1021 "'#{constructorName}'."), | 1001 "'#{constructorName}'."), |
1022 | 1002 |
1023 MessageKind.NO_MATCHING_CONSTRUCTOR: | 1003 MessageKind.NO_MATCHING_CONSTRUCTOR: const MessageTemplate( |
1024 const MessageTemplate(MessageKind.NO_MATCHING_CONSTRUCTOR, | 1004 MessageKind.NO_MATCHING_CONSTRUCTOR, |
1025 "'super' call arguments and constructor parameters do not match."), | 1005 "'super' call arguments and constructor parameters do not match."), |
1026 | 1006 |
1027 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: | 1007 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: const MessageTemplate( |
1028 const MessageTemplate(MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT, | 1008 MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT, |
1029 "Implicit 'super' call arguments and constructor parameters " | 1009 "Implicit 'super' call arguments and constructor parameters " |
1030 "do not match."), | 1010 "do not match."), |
1031 | 1011 |
1032 MessageKind.CONST_CALLS_NON_CONST: | 1012 MessageKind.CONST_CALLS_NON_CONST: const MessageTemplate( |
1033 const MessageTemplate(MessageKind.CONST_CALLS_NON_CONST, | 1013 MessageKind.CONST_CALLS_NON_CONST, |
1034 "'const' constructor cannot call a non-const constructor."), | 1014 "'const' constructor cannot call a non-const constructor."), |
1035 | 1015 |
1036 MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT: | 1016 MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT: const MessageTemplate( |
1037 const MessageTemplate(MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT, | 1017 MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT, |
1038 "'const' constructor cannot call a non-const constructor. " | 1018 "'const' constructor cannot call a non-const constructor. " |
1039 "This constructor has an implicit call to a " | 1019 "This constructor has an implicit call to a " |
1040 "super non-const constructor.", | 1020 "super non-const constructor.", |
1041 howToFix: "Try making the super constructor const.", | 1021 howToFix: "Try making the super constructor const.", |
1042 examples: const [""" | 1022 examples: const [ |
| 1023 """ |
1043 class C { | 1024 class C { |
1044 C(); // missing const | 1025 C(); // missing const |
1045 } | 1026 } |
1046 class D extends C { | 1027 class D extends C { |
1047 final d; | 1028 final d; |
1048 const D(this.d); | 1029 const D(this.d); |
1049 } | 1030 } |
1050 main() => new D(0);"""]), | 1031 main() => new D(0);""" |
| 1032 ]), |
1051 | 1033 |
1052 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS: | 1034 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS: const MessageTemplate( |
1053 const MessageTemplate( | |
1054 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS, | 1035 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS, |
1055 "Can't declare constructor 'const' on class #{className} " | 1036 "Can't declare constructor 'const' on class #{className} " |
1056 "because the class contains non-final instance fields.", | 1037 "because the class contains non-final instance fields.", |
1057 howToFix: "Try making all fields final.", | 1038 howToFix: "Try making all fields final.", |
1058 examples: const [""" | 1039 examples: const [ |
| 1040 """ |
1059 class C { | 1041 class C { |
1060 // 'a' must be declared final to allow for the const constructor. | 1042 // 'a' must be declared final to allow for the const constructor. |
1061 var a; | 1043 var a; |
1062 const C(this.a); | 1044 const C(this.a); |
1063 } | 1045 } |
1064 | 1046 |
1065 main() => new C(0);"""]), | 1047 main() => new C(0);""" |
| 1048 ]), |
1066 | 1049 |
1067 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD: | 1050 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD: |
1068 const MessageTemplate( | 1051 const MessageTemplate( |
1069 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD, | 1052 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD, |
1070 "This non-final field prevents using const constructors."), | 1053 "This non-final field prevents using const constructors."), |
1071 | 1054 |
1072 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR: | 1055 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR: |
1073 const MessageTemplate( | 1056 const MessageTemplate( |
1074 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, | 1057 MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR, |
1075 "This const constructor is not allowed due to " | 1058 "This const constructor is not allowed due to " |
1076 "non-final fields."), | 1059 "non-final fields."), |
1077 | 1060 |
1078 | 1061 MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED: const MessageTemplate( |
1079 MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED: | 1062 MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED, |
1080 const MessageTemplate(MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED, | |
1081 "Initializing formal parameter only allowed in generative " | 1063 "Initializing formal parameter only allowed in generative " |
1082 "constructor."), | 1064 "constructor."), |
1083 | 1065 |
1084 MessageKind.INVALID_PARAMETER: | 1066 MessageKind.INVALID_PARAMETER: const MessageTemplate( |
1085 const MessageTemplate(MessageKind.INVALID_PARAMETER, | 1067 MessageKind.INVALID_PARAMETER, "Cannot resolve parameter."), |
1086 "Cannot resolve parameter."), | |
1087 | 1068 |
1088 MessageKind.NOT_INSTANCE_FIELD: | 1069 MessageKind.NOT_INSTANCE_FIELD: const MessageTemplate( |
1089 const MessageTemplate(MessageKind.NOT_INSTANCE_FIELD, | 1070 MessageKind.NOT_INSTANCE_FIELD, |
1090 "'#{fieldName}' is not an instance field."), | 1071 "'#{fieldName}' is not an instance field."), |
1091 | 1072 |
1092 MessageKind.THIS_PROPERTY: | 1073 MessageKind.THIS_PROPERTY: const MessageTemplate( |
1093 const MessageTemplate(MessageKind.THIS_PROPERTY, | 1074 MessageKind.THIS_PROPERTY, "Expected an identifier."), |
1094 "Expected an identifier."), | |
1095 | 1075 |
1096 MessageKind.NO_CATCH_NOR_FINALLY: | 1076 MessageKind.NO_CATCH_NOR_FINALLY: const MessageTemplate( |
1097 const MessageTemplate(MessageKind.NO_CATCH_NOR_FINALLY, | 1077 MessageKind.NO_CATCH_NOR_FINALLY, "Expected 'catch' or 'finally'."), |
1098 "Expected 'catch' or 'finally'."), | |
1099 | 1078 |
1100 MessageKind.EMPTY_CATCH_DECLARATION: | 1079 MessageKind.EMPTY_CATCH_DECLARATION: const MessageTemplate( |
1101 const MessageTemplate(MessageKind.EMPTY_CATCH_DECLARATION, | 1080 MessageKind.EMPTY_CATCH_DECLARATION, |
1102 "Expected an identifier in catch declaration."), | 1081 "Expected an identifier in catch declaration."), |
1103 | 1082 |
1104 MessageKind.EXTRA_CATCH_DECLARATION: | 1083 MessageKind.EXTRA_CATCH_DECLARATION: const MessageTemplate( |
1105 const MessageTemplate(MessageKind.EXTRA_CATCH_DECLARATION, | 1084 MessageKind.EXTRA_CATCH_DECLARATION, |
1106 "Extra parameter in catch declaration."), | 1085 "Extra parameter in catch declaration."), |
1107 | 1086 |
1108 MessageKind.PARAMETER_WITH_TYPE_IN_CATCH: | 1087 MessageKind.PARAMETER_WITH_TYPE_IN_CATCH: const MessageTemplate( |
1109 const MessageTemplate(MessageKind.PARAMETER_WITH_TYPE_IN_CATCH, | 1088 MessageKind.PARAMETER_WITH_TYPE_IN_CATCH, |
1110 "Cannot use type annotations in catch."), | 1089 "Cannot use type annotations in catch."), |
1111 | 1090 |
1112 MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH: | 1091 MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH: const MessageTemplate( |
1113 const MessageTemplate(MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH, | 1092 MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH, |
1114 "Cannot use modifiers in catch."), | 1093 "Cannot use modifiers in catch."), |
1115 | 1094 |
1116 MessageKind.OPTIONAL_PARAMETER_IN_CATCH: | 1095 MessageKind.OPTIONAL_PARAMETER_IN_CATCH: const MessageTemplate( |
1117 const MessageTemplate(MessageKind.OPTIONAL_PARAMETER_IN_CATCH, | 1096 MessageKind.OPTIONAL_PARAMETER_IN_CATCH, |
1118 "Cannot use optional parameters in catch."), | 1097 "Cannot use optional parameters in catch."), |
1119 | 1098 |
1120 MessageKind.UNBOUND_LABEL: | 1099 MessageKind.UNBOUND_LABEL: const MessageTemplate( |
1121 const MessageTemplate(MessageKind.UNBOUND_LABEL, | 1100 MessageKind.UNBOUND_LABEL, "Cannot resolve label '#{labelName}'."), |
1122 "Cannot resolve label '#{labelName}'."), | |
1123 | 1101 |
1124 MessageKind.NO_BREAK_TARGET: | 1102 MessageKind.NO_BREAK_TARGET: const MessageTemplate( |
1125 const MessageTemplate(MessageKind.NO_BREAK_TARGET, | 1103 MessageKind.NO_BREAK_TARGET, |
1126 "'break' statement not inside switch or loop."), | 1104 "'break' statement not inside switch or loop."), |
1127 | 1105 |
1128 MessageKind.NO_CONTINUE_TARGET: | 1106 MessageKind.NO_CONTINUE_TARGET: const MessageTemplate( |
1129 const MessageTemplate(MessageKind.NO_CONTINUE_TARGET, | 1107 MessageKind.NO_CONTINUE_TARGET, |
1130 "'continue' statement not inside loop."), | 1108 "'continue' statement not inside loop."), |
1131 | 1109 |
1132 MessageKind.EXISTING_LABEL: | 1110 MessageKind.EXISTING_LABEL: const MessageTemplate( |
1133 const MessageTemplate(MessageKind.EXISTING_LABEL, | 1111 MessageKind.EXISTING_LABEL, |
1134 "Original declaration of duplicate label '#{labelName}'."), | 1112 "Original declaration of duplicate label '#{labelName}'."), |
1135 | 1113 |
1136 MessageKind.DUPLICATE_LABEL: | 1114 MessageKind.DUPLICATE_LABEL: const MessageTemplate( |
1137 const MessageTemplate(MessageKind.DUPLICATE_LABEL, | 1115 MessageKind.DUPLICATE_LABEL, |
1138 "Duplicate declaration of label '#{labelName}'."), | 1116 "Duplicate declaration of label '#{labelName}'."), |
1139 | 1117 |
1140 MessageKind.UNUSED_LABEL: | 1118 MessageKind.UNUSED_LABEL: const MessageTemplate( |
1141 const MessageTemplate(MessageKind.UNUSED_LABEL, | 1119 MessageKind.UNUSED_LABEL, "Unused label '#{labelName}'."), |
1142 "Unused label '#{labelName}'."), | |
1143 | 1120 |
1144 MessageKind.INVALID_CONTINUE: | 1121 MessageKind.INVALID_CONTINUE: const MessageTemplate( |
1145 const MessageTemplate(MessageKind.INVALID_CONTINUE, | 1122 MessageKind.INVALID_CONTINUE, |
1146 "Target of continue is not a loop or switch case."), | 1123 "Target of continue is not a loop or switch case."), |
1147 | 1124 |
1148 MessageKind.INVALID_BREAK: | 1125 MessageKind.INVALID_BREAK: const MessageTemplate( |
1149 const MessageTemplate(MessageKind.INVALID_BREAK, | 1126 MessageKind.INVALID_BREAK, "Target of break is not a statement."), |
1150 "Target of break is not a statement."), | |
1151 | 1127 |
1152 MessageKind.DUPLICATE_TYPE_VARIABLE_NAME: | 1128 MessageKind.DUPLICATE_TYPE_VARIABLE_NAME: const MessageTemplate( |
1153 const MessageTemplate(MessageKind.DUPLICATE_TYPE_VARIABLE_NAME, | 1129 MessageKind.DUPLICATE_TYPE_VARIABLE_NAME, |
1154 "Type variable '#{typeVariableName}' already declared."), | 1130 "Type variable '#{typeVariableName}' already declared."), |
1155 | 1131 |
1156 MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER: | 1132 MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER: const MessageTemplate( |
1157 const MessageTemplate(MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, | 1133 MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER, |
1158 "Cannot refer to type variable '#{typeVariableName}' " | 1134 "Cannot refer to type variable '#{typeVariableName}' " |
1159 "within a static member."), | 1135 "within a static member."), |
1160 | 1136 |
1161 MessageKind.TYPE_VARIABLE_IN_CONSTANT: | 1137 MessageKind.TYPE_VARIABLE_IN_CONSTANT: const MessageTemplate( |
1162 const MessageTemplate(MessageKind.TYPE_VARIABLE_IN_CONSTANT, | 1138 MessageKind.TYPE_VARIABLE_IN_CONSTANT, |
1163 "Constant expressions can't refer to type variables.", | 1139 "Constant expressions can't refer to type variables.", |
1164 howToFix: "Try removing the type variable or replacing it with a " | 1140 howToFix: "Try removing the type variable or replacing it with a " |
1165 "concrete type.", | 1141 "concrete type.", |
1166 examples: const [""" | 1142 examples: const [ |
| 1143 """ |
1167 class C<T> { | 1144 class C<T> { |
1168 const C(); | 1145 const C(); |
1169 | 1146 |
1170 m(T t) => const C<T>(); | 1147 m(T t) => const C<T>(); |
1171 } | 1148 } |
1172 | 1149 |
1173 void main() => new C().m(null); | 1150 void main() => new C().m(null); |
1174 """ | 1151 """ |
1175 ]), | 1152 ]), |
1176 | 1153 |
1177 MessageKind.INVALID_TYPE_VARIABLE_BOUND: | 1154 MessageKind.INVALID_TYPE_VARIABLE_BOUND: const MessageTemplate( |
1178 const MessageTemplate(MessageKind.INVALID_TYPE_VARIABLE_BOUND, | 1155 MessageKind.INVALID_TYPE_VARIABLE_BOUND, |
1179 "'#{typeArgument}' is not a subtype of bound '#{bound}' for " | 1156 "'#{typeArgument}' is not a subtype of bound '#{bound}' for " |
1180 "type variable '#{typeVariable}' of type '#{thisType}'.", | 1157 "type variable '#{typeVariable}' of type '#{thisType}'.", |
1181 howToFix: "Try to change or remove the type argument.", | 1158 howToFix: "Try to change or remove the type argument.", |
1182 examples: const [""" | 1159 examples: const [ |
| 1160 """ |
1183 class C<T extends num> {} | 1161 class C<T extends num> {} |
1184 | 1162 |
1185 // 'String' is not a valid instantiation of T with bound num.'. | 1163 // 'String' is not a valid instantiation of T with bound num.'. |
1186 main() => new C<String>(); | 1164 main() => new C<String>(); |
1187 """]), | 1165 """ |
1188 | 1166 ]), |
1189 MessageKind.INVALID_USE_OF_SUPER: | 1167 |
1190 const MessageTemplate(MessageKind.INVALID_USE_OF_SUPER, | 1168 MessageKind.INVALID_USE_OF_SUPER: const MessageTemplate( |
1191 "'super' not allowed here."), | 1169 MessageKind.INVALID_USE_OF_SUPER, "'super' not allowed here."), |
1192 | 1170 |
1193 MessageKind.INVALID_CASE_DEFAULT: | 1171 MessageKind.INVALID_CASE_DEFAULT: const MessageTemplate( |
1194 const MessageTemplate(MessageKind.INVALID_CASE_DEFAULT, | 1172 MessageKind.INVALID_CASE_DEFAULT, |
1195 "'default' only allowed on last case of a switch."), | 1173 "'default' only allowed on last case of a switch."), |
1196 | 1174 |
1197 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL: | 1175 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL: const MessageTemplate( |
1198 const MessageTemplate(MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL, | 1176 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL, |
1199 "'case' expressions do not all have type '#{type}'."), | 1177 "'case' expressions do not all have type '#{type}'."), |
1200 | 1178 |
1201 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE: | 1179 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE: const MessageTemplate( |
1202 const MessageTemplate(MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE, | 1180 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE, |
1203 "'case' expression of type '#{type}'."), | 1181 "'case' expression of type '#{type}'."), |
1204 | 1182 |
1205 MessageKind.SWITCH_CASE_FORBIDDEN: | 1183 MessageKind.SWITCH_CASE_FORBIDDEN: const MessageTemplate( |
1206 const MessageTemplate(MessageKind.SWITCH_CASE_FORBIDDEN, | 1184 MessageKind.SWITCH_CASE_FORBIDDEN, |
1207 "'case' expression may not be of type '#{type}'."), | 1185 "'case' expression may not be of type '#{type}'."), |
1208 | 1186 |
1209 MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS: | 1187 MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS: const MessageTemplate( |
1210 const MessageTemplate(MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS, | 1188 MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS, |
1211 "'case' expression type '#{type}' overrides 'operator =='."), | 1189 "'case' expression type '#{type}' overrides 'operator =='."), |
1212 | 1190 |
1213 MessageKind.INVALID_ARGUMENT_AFTER_NAMED: | 1191 MessageKind.INVALID_ARGUMENT_AFTER_NAMED: const MessageTemplate( |
1214 const MessageTemplate(MessageKind.INVALID_ARGUMENT_AFTER_NAMED, | 1192 MessageKind.INVALID_ARGUMENT_AFTER_NAMED, |
1215 "Unnamed argument after named argument."), | 1193 "Unnamed argument after named argument."), |
1216 | 1194 |
1217 MessageKind.INVALID_AWAIT_FOR_IN: | 1195 MessageKind.INVALID_AWAIT_FOR_IN: const MessageTemplate( |
1218 const MessageTemplate(MessageKind.INVALID_AWAIT_FOR_IN, | 1196 MessageKind.INVALID_AWAIT_FOR_IN, |
1219 "'await' is only supported in methods with an 'async' or " | 1197 "'await' is only supported in methods with an 'async' or " |
1220 "'async*' body modifier.", | 1198 "'async*' body modifier.", |
1221 howToFix: "Try adding 'async' or 'async*' to the method body or " | 1199 howToFix: "Try adding 'async' or 'async*' to the method body or " |
1222 "removing the 'await' keyword.", | 1200 "removing the 'await' keyword.", |
1223 examples: const [ | 1201 examples: const [ |
1224 """ | 1202 """ |
1225 main(o) sync* { | 1203 main(o) sync* { |
1226 await for (var e in o) {} | 1204 await for (var e in o) {} |
1227 }"""]), | 1205 }""" |
1228 | 1206 ]), |
1229 MessageKind.INVALID_AWAIT: | 1207 |
1230 const MessageTemplate(MessageKind.INVALID_AWAIT, | 1208 MessageKind.INVALID_AWAIT: const MessageTemplate( |
| 1209 MessageKind.INVALID_AWAIT, |
1231 "'await' is only supported in methods with an 'async' or " | 1210 "'await' is only supported in methods with an 'async' or " |
1232 "'async*' body modifier.", | 1211 "'async*' body modifier.", |
1233 howToFix: "Try adding 'async' or 'async*' to the method body.", | 1212 howToFix: "Try adding 'async' or 'async*' to the method body.", |
1234 examples: const [ | 1213 examples: const [ |
1235 """ | 1214 """ |
1236 main(o) sync* { | 1215 main(o) sync* { |
1237 await null; | 1216 await null; |
1238 }"""]), | 1217 }""" |
1239 | 1218 ]), |
1240 MessageKind.INVALID_YIELD: | 1219 |
1241 const MessageTemplate(MessageKind.INVALID_YIELD, | 1220 MessageKind.INVALID_YIELD: const MessageTemplate( |
| 1221 MessageKind.INVALID_YIELD, |
1242 "'yield' is only supported in methods with a 'sync*' or " | 1222 "'yield' is only supported in methods with a 'sync*' or " |
1243 "'async*' body modifier.", | 1223 "'async*' body modifier.", |
1244 howToFix: "Try adding 'sync*' or 'async*' to the method body.", | 1224 howToFix: "Try adding 'sync*' or 'async*' to the method body.", |
1245 examples: const [ | 1225 examples: const [ |
1246 """ | 1226 """ |
1247 main(o) async { | 1227 main(o) async { |
1248 yield 0; | 1228 yield 0; |
1249 }"""]), | 1229 }""" |
1250 | 1230 ]), |
1251 MessageKind.NOT_A_COMPILE_TIME_CONSTANT: | 1231 |
1252 const MessageTemplate(MessageKind.NOT_A_COMPILE_TIME_CONSTANT, | 1232 MessageKind.NOT_A_COMPILE_TIME_CONSTANT: const MessageTemplate( |
| 1233 MessageKind.NOT_A_COMPILE_TIME_CONSTANT, |
1253 "Not a compile-time constant."), | 1234 "Not a compile-time constant."), |
1254 | 1235 |
1255 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT: | 1236 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT: const MessageTemplate( |
1256 const MessageTemplate(MessageKind.DEFERRED_COMPILE_TIME_CONSTANT, | 1237 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT, |
1257 "A deferred value cannot be used as a compile-time constant."), | 1238 "A deferred value cannot be used as a compile-time constant."), |
1258 | 1239 |
1259 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION: | 1240 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION: |
1260 const MessageTemplate( | 1241 const MessageTemplate( |
1261 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION, | 1242 MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION, |
1262 "A deferred class cannot be used to create a " | 1243 "A deferred class cannot be used to create a " |
1263 "compile-time constant."), | 1244 "compile-time constant."), |
1264 | 1245 |
1265 MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS: | 1246 MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS: const MessageTemplate( |
1266 const MessageTemplate(MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS, | 1247 MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS, |
1267 "Cycle in the compile-time constant computation."), | 1248 "Cycle in the compile-time constant computation."), |
1268 | 1249 |
1269 MessageKind.CONSTRUCTOR_IS_NOT_CONST: | 1250 MessageKind.CONSTRUCTOR_IS_NOT_CONST: const MessageTemplate( |
1270 const MessageTemplate(MessageKind.CONSTRUCTOR_IS_NOT_CONST, | 1251 MessageKind.CONSTRUCTOR_IS_NOT_CONST, |
1271 "Constructor is not a 'const' constructor."), | 1252 "Constructor is not a 'const' constructor."), |
1272 | 1253 |
1273 MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS: | 1254 MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS: const MessageTemplate( |
1274 const MessageTemplate(MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS, | 1255 MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS, |
1275 "Const-map key type '#{type}' overrides 'operator =='."), | 1256 "Const-map key type '#{type}' overrides 'operator =='."), |
1276 | 1257 |
1277 MessageKind.NO_SUCH_LIBRARY_MEMBER: | 1258 MessageKind.NO_SUCH_LIBRARY_MEMBER: const MessageTemplate( |
1278 const MessageTemplate(MessageKind.NO_SUCH_LIBRARY_MEMBER, | 1259 MessageKind.NO_SUCH_LIBRARY_MEMBER, |
1279 "'#{libraryName}' has no member named '#{memberName}'."), | 1260 "'#{libraryName}' has no member named '#{memberName}'."), |
1280 | 1261 |
1281 MessageKind.CANNOT_INSTANTIATE_TYPEDEF: | 1262 MessageKind.CANNOT_INSTANTIATE_TYPEDEF: const MessageTemplate( |
1282 const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_TYPEDEF, | 1263 MessageKind.CANNOT_INSTANTIATE_TYPEDEF, |
1283 "Cannot instantiate typedef '#{typedefName}'."), | 1264 "Cannot instantiate typedef '#{typedefName}'."), |
1284 | 1265 |
1285 MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT: | 1266 MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT: const MessageTemplate( |
1286 const MessageTemplate(MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT, | 1267 MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT, |
1287 "Non-optional parameters can't have a default value.", | 1268 "Non-optional parameters can't have a default value.", |
1288 howToFix: | 1269 howToFix: |
1289 "Try removing the default value or making the parameter optional.", | 1270 "Try removing the default value or making the parameter optional."
, |
1290 examples: const [""" | 1271 examples: const [ |
| 1272 """ |
1291 main() { | 1273 main() { |
1292 foo(a: 1) => print(a); | 1274 foo(a: 1) => print(a); |
1293 foo(2); | 1275 foo(2); |
1294 }""", """ | 1276 }""", |
| 1277 """ |
1295 main() { | 1278 main() { |
1296 foo(a = 1) => print(a); | 1279 foo(a = 1) => print(a); |
1297 foo(2); | 1280 foo(2); |
1298 }"""]), | 1281 }""" |
1299 | 1282 ]), |
1300 MessageKind.NAMED_PARAMETER_WITH_EQUALS: | 1283 |
1301 const MessageTemplate(MessageKind.NAMED_PARAMETER_WITH_EQUALS, | 1284 MessageKind.NAMED_PARAMETER_WITH_EQUALS: const MessageTemplate( |
| 1285 MessageKind.NAMED_PARAMETER_WITH_EQUALS, |
1302 "Named optional parameters can't use '=' to specify a default " | 1286 "Named optional parameters can't use '=' to specify a default " |
1303 "value.", | 1287 "value.", |
1304 howToFix: "Try replacing '=' with ':'.", | 1288 howToFix: "Try replacing '=' with ':'.", |
1305 examples: const [""" | 1289 examples: const [ |
| 1290 """ |
1306 main() { | 1291 main() { |
1307 foo({a = 1}) => print(a); | 1292 foo({a = 1}) => print(a); |
1308 foo(a: 2); | 1293 foo(a: 2); |
1309 }"""]), | 1294 }""" |
1310 | 1295 ]), |
1311 MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS: | 1296 |
1312 const MessageTemplate(MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS, | 1297 MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS: const MessageTemplate( |
| 1298 MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS, |
1313 "Positional optional parameters can't use ':' to specify a " | 1299 "Positional optional parameters can't use ':' to specify a " |
1314 "default value.", | 1300 "default value.", |
1315 howToFix: "Try replacing ':' with '='.", | 1301 howToFix: "Try replacing ':' with '='.", |
1316 examples: const [""" | 1302 examples: const [ |
| 1303 """ |
1317 main() { | 1304 main() { |
1318 foo([a: 1]) => print(a); | 1305 foo([a: 1]) => print(a); |
1319 foo(2); | 1306 foo(2); |
1320 }"""]), | 1307 }""" |
1321 | 1308 ]), |
1322 MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT: | 1309 |
1323 const MessageTemplate(MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT, | 1310 MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT: const MessageTemplate( |
| 1311 MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT, |
1324 "A parameter of a typedef can't specify a default value.", | 1312 "A parameter of a typedef can't specify a default value.", |
1325 howToFix: | 1313 howToFix: "Try removing the default value.", |
1326 "Try removing the default value.", | 1314 examples: const [ |
1327 examples: const [""" | 1315 """ |
1328 typedef void F([int arg = 0]); | 1316 typedef void F([int arg = 0]); |
1329 | 1317 |
1330 main() { | 1318 main() { |
1331 F f; | 1319 F f; |
1332 }""", """ | 1320 }""", |
| 1321 """ |
1333 typedef void F({int arg: 0}); | 1322 typedef void F({int arg: 0}); |
1334 | 1323 |
1335 main() { | 1324 main() { |
1336 F f; | 1325 F f; |
1337 }"""]), | 1326 }""" |
1338 | 1327 ]), |
1339 MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT: | 1328 |
1340 const MessageTemplate(MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT, | 1329 MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT: const MessageTemplate( |
| 1330 MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT, |
1341 "A function type parameter can't specify a default value.", | 1331 "A function type parameter can't specify a default value.", |
1342 howToFix: | 1332 howToFix: "Try removing the default value.", |
1343 "Try removing the default value.", | 1333 examples: const [ |
1344 examples: const [""" | 1334 """ |
1345 foo(f(int i, [a = 1])) {} | 1335 foo(f(int i, [a = 1])) {} |
1346 | 1336 |
1347 main() { | 1337 main() { |
1348 foo(1, 2); | 1338 foo(1, 2); |
1349 }""", """ | 1339 }""", |
| 1340 """ |
1350 foo(f(int i, {a: 1})) {} | 1341 foo(f(int i, {a: 1})) {} |
1351 | 1342 |
1352 main() { | 1343 main() { |
1353 foo(1, a: 2); | 1344 foo(1, a: 2); |
1354 }"""]), | 1345 }""" |
1355 | 1346 ]), |
1356 MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT: | 1347 |
1357 const MessageTemplate(MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT, | 1348 MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT: const MessageTemplate( |
| 1349 MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT, |
1358 "A parameter of a redirecting factory constructor can't specify a " | 1350 "A parameter of a redirecting factory constructor can't specify a " |
1359 "default value.", | 1351 "default value.", |
1360 howToFix: | 1352 howToFix: "Try removing the default value.", |
1361 "Try removing the default value.", | 1353 examples: const [ |
1362 examples: const [""" | 1354 """ |
1363 class A { | 1355 class A { |
1364 A([a]); | 1356 A([a]); |
1365 factory A.foo([a = 1]) = A; | 1357 factory A.foo([a = 1]) = A; |
1366 } | 1358 } |
1367 | 1359 |
1368 main() { | 1360 main() { |
1369 new A.foo(1); | 1361 new A.foo(1); |
1370 }""", """ | 1362 }""", |
| 1363 """ |
1371 class A { | 1364 class A { |
1372 A({a}); | 1365 A({a}); |
1373 factory A.foo({a: 1}) = A; | 1366 factory A.foo({a: 1}) = A; |
1374 } | 1367 } |
1375 | 1368 |
1376 main() { | 1369 main() { |
1377 new A.foo(a: 1); | 1370 new A.foo(a: 1); |
1378 }"""]), | 1371 }""" |
1379 | 1372 ]), |
1380 MessageKind.FORMAL_DECLARED_CONST: | 1373 |
1381 const MessageTemplate(MessageKind.FORMAL_DECLARED_CONST, | 1374 MessageKind.FORMAL_DECLARED_CONST: const MessageTemplate( |
| 1375 MessageKind.FORMAL_DECLARED_CONST, |
1382 "A formal parameter can't be declared const.", | 1376 "A formal parameter can't be declared const.", |
1383 howToFix: "Try removing 'const'.", | 1377 howToFix: "Try removing 'const'.", |
1384 examples: const [""" | 1378 examples: const [ |
| 1379 """ |
1385 foo(const x) {} | 1380 foo(const x) {} |
1386 main() => foo(42); | 1381 main() => foo(42); |
1387 """, """ | 1382 """, |
| 1383 """ |
1388 foo({const x}) {} | 1384 foo({const x}) {} |
1389 main() => foo(42); | 1385 main() => foo(42); |
1390 """, """ | 1386 """, |
| 1387 """ |
1391 foo([const x]) {} | 1388 foo([const x]) {} |
1392 main() => foo(42); | 1389 main() => foo(42); |
1393 """]), | 1390 """ |
1394 | 1391 ]), |
1395 MessageKind.FORMAL_DECLARED_STATIC: | 1392 |
1396 const MessageTemplate(MessageKind.FORMAL_DECLARED_STATIC, | 1393 MessageKind.FORMAL_DECLARED_STATIC: const MessageTemplate( |
| 1394 MessageKind.FORMAL_DECLARED_STATIC, |
1397 "A formal parameter can't be declared static.", | 1395 "A formal parameter can't be declared static.", |
1398 howToFix: "Try removing 'static'.", | 1396 howToFix: "Try removing 'static'.", |
1399 examples: const [""" | 1397 examples: const [ |
| 1398 """ |
1400 foo(static x) {} | 1399 foo(static x) {} |
1401 main() => foo(42); | 1400 main() => foo(42); |
1402 """, """ | 1401 """, |
| 1402 """ |
1403 foo({static x}) {} | 1403 foo({static x}) {} |
1404 main() => foo(42); | 1404 main() => foo(42); |
1405 """, """ | 1405 """, |
| 1406 """ |
1406 foo([static x]) {} | 1407 foo([static x]) {} |
1407 main() => foo(42); | 1408 main() => foo(42); |
1408 """]), | 1409 """ |
1409 | 1410 ]), |
1410 MessageKind.FINAL_FUNCTION_TYPE_PARAMETER: | 1411 |
1411 const MessageTemplate(MessageKind.FINAL_FUNCTION_TYPE_PARAMETER, | 1412 MessageKind.FINAL_FUNCTION_TYPE_PARAMETER: const MessageTemplate( |
| 1413 MessageKind.FINAL_FUNCTION_TYPE_PARAMETER, |
1412 "A function type parameter can't be declared final.", | 1414 "A function type parameter can't be declared final.", |
1413 howToFix: "Try removing 'final'.", | 1415 howToFix: "Try removing 'final'.", |
1414 examples: const [""" | 1416 examples: const [ |
| 1417 """ |
1415 foo(final int x(int a)) {} | 1418 foo(final int x(int a)) {} |
1416 main() => foo((y) => 42); | 1419 main() => foo((y) => 42); |
1417 """, """ | 1420 """, |
| 1421 """ |
1418 foo({final int x(int a)}) {} | 1422 foo({final int x(int a)}) {} |
1419 main() => foo((y) => 42); | 1423 main() => foo((y) => 42); |
1420 """, """ | 1424 """, |
| 1425 """ |
1421 foo([final int x(int a)]) {} | 1426 foo([final int x(int a)]) {} |
1422 main() => foo((y) => 42); | 1427 main() => foo((y) => 42); |
1423 """]), | 1428 """ |
1424 | 1429 ]), |
1425 MessageKind.VAR_FUNCTION_TYPE_PARAMETER: | 1430 |
1426 const MessageTemplate(MessageKind.VAR_FUNCTION_TYPE_PARAMETER, | 1431 MessageKind.VAR_FUNCTION_TYPE_PARAMETER: const MessageTemplate( |
| 1432 MessageKind.VAR_FUNCTION_TYPE_PARAMETER, |
1427 "A function type parameter can't be declared with 'var'.", | 1433 "A function type parameter can't be declared with 'var'.", |
1428 howToFix: "Try removing 'var'.", | 1434 howToFix: "Try removing 'var'.", |
1429 examples: const [""" | 1435 examples: const [ |
| 1436 """ |
1430 foo(var int x(int a)) {} | 1437 foo(var int x(int a)) {} |
1431 main() => foo((y) => 42); | 1438 main() => foo((y) => 42); |
1432 """, """ | 1439 """, |
| 1440 """ |
1433 foo({var int x(int a)}) {} | 1441 foo({var int x(int a)}) {} |
1434 main() => foo((y) => 42); | 1442 main() => foo((y) => 42); |
1435 """, """ | 1443 """, |
| 1444 """ |
1436 foo([var int x(int a)]) {} | 1445 foo([var int x(int a)]) {} |
1437 main() => foo((y) => 42); | 1446 main() => foo((y) => 42); |
1438 """]), | 1447 """ |
1439 | 1448 ]), |
1440 MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE: | 1449 |
1441 const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE, | 1450 MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE: const MessageTemplate( |
| 1451 MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE, |
1442 "Cannot instantiate type variable '#{typeVariableName}'."), | 1452 "Cannot instantiate type variable '#{typeVariableName}'."), |
1443 | 1453 |
1444 MessageKind.CYCLIC_TYPE_VARIABLE: | 1454 MessageKind.CYCLIC_TYPE_VARIABLE: const MessageTemplate( |
1445 const MessageTemplate(MessageKind.CYCLIC_TYPE_VARIABLE, | 1455 MessageKind.CYCLIC_TYPE_VARIABLE, |
1446 "Type variable '#{typeVariableName}' is a supertype of itself."), | 1456 "Type variable '#{typeVariableName}' is a supertype of itself."), |
1447 | 1457 |
1448 MessageKind.CYCLIC_TYPEDEF: | 1458 MessageKind.CYCLIC_TYPEDEF: const MessageTemplate( |
1449 const MessageTemplate(MessageKind.CYCLIC_TYPEDEF, | 1459 MessageKind.CYCLIC_TYPEDEF, "A typedef can't refer to itself.", |
1450 "A typedef can't refer to itself.", | |
1451 howToFix: "Try removing all references to '#{typedefName}' " | 1460 howToFix: "Try removing all references to '#{typedefName}' " |
1452 "in the definition of '#{typedefName}'.", | 1461 "in the definition of '#{typedefName}'.", |
1453 examples: const [""" | 1462 examples: const [ |
| 1463 """ |
1454 typedef F F(); // The return type 'F' is a self-reference. | 1464 typedef F F(); // The return type 'F' is a self-reference. |
1455 main() { F f = null; }"""]), | 1465 main() { F f = null; }""" |
1456 | 1466 ]), |
1457 MessageKind.CYCLIC_TYPEDEF_ONE: | 1467 |
1458 const MessageTemplate(MessageKind.CYCLIC_TYPEDEF_ONE, | 1468 MessageKind.CYCLIC_TYPEDEF_ONE: const MessageTemplate( |
| 1469 MessageKind.CYCLIC_TYPEDEF_ONE, |
1459 "A typedef can't refer to itself through another typedef.", | 1470 "A typedef can't refer to itself through another typedef.", |
1460 howToFix: | 1471 howToFix: "Try removing all references to " |
1461 "Try removing all references to " | 1472 "'#{otherTypedefName}' in the definition of '#{typedefName}'.", |
1462 "'#{otherTypedefName}' in the definition of '#{typedefName}'.", | 1473 examples: const [ |
1463 examples: const [""" | 1474 """ |
1464 typedef G F(); // The return type 'G' is a self-reference through typedef 'G'. | 1475 typedef G F(); // The return type 'G' is a self-reference through typedef 'G'. |
1465 typedef F G(); // The return type 'F' is a self-reference through typedef 'F'. | 1476 typedef F G(); // The return type 'F' is a self-reference through typedef 'F'. |
1466 main() { F f = null; }""", | 1477 main() { F f = null; }""", |
1467 """ | 1478 """ |
1468 typedef G F(); // The return type 'G' creates a self-reference. | 1479 typedef G F(); // The return type 'G' creates a self-reference. |
1469 typedef H G(); // The return type 'H' creates a self-reference. | 1480 typedef H G(); // The return type 'H' creates a self-reference. |
1470 typedef H(F f); // The argument type 'F' creates a self-reference. | 1481 typedef H(F f); // The argument type 'F' creates a self-reference. |
1471 main() { F f = null; }"""]), | 1482 main() { F f = null; }""" |
1472 | 1483 ]), |
1473 MessageKind.CLASS_NAME_EXPECTED: | 1484 |
1474 const MessageTemplate(MessageKind.CLASS_NAME_EXPECTED, | 1485 MessageKind.CLASS_NAME_EXPECTED: const MessageTemplate( |
1475 "Class name expected."), | 1486 MessageKind.CLASS_NAME_EXPECTED, "Class name expected."), |
1476 | 1487 |
1477 MessageKind.CANNOT_EXTEND: | 1488 MessageKind.CANNOT_EXTEND: const MessageTemplate( |
1478 const MessageTemplate(MessageKind.CANNOT_EXTEND, | 1489 MessageKind.CANNOT_EXTEND, "'#{type}' cannot be extended."), |
1479 "'#{type}' cannot be extended."), | 1490 |
1480 | 1491 MessageKind.CANNOT_IMPLEMENT: const MessageTemplate( |
1481 MessageKind.CANNOT_IMPLEMENT: | 1492 MessageKind.CANNOT_IMPLEMENT, "'#{type}' cannot be implemented."), |
1482 const MessageTemplate(MessageKind.CANNOT_IMPLEMENT, | |
1483 "'#{type}' cannot be implemented."), | |
1484 | 1493 |
1485 // TODO(johnnwinther): Split messages into reasons for malformedness. | 1494 // TODO(johnnwinther): Split messages into reasons for malformedness. |
1486 MessageKind.CANNOT_EXTEND_MALFORMED: | 1495 MessageKind.CANNOT_EXTEND_MALFORMED: const MessageTemplate( |
1487 const MessageTemplate(MessageKind.CANNOT_EXTEND_MALFORMED, | 1496 MessageKind.CANNOT_EXTEND_MALFORMED, |
1488 "Class '#{className}' can't extend the type '#{malformedType}' " | 1497 "Class '#{className}' can't extend the type '#{malformedType}' " |
1489 "because it is malformed.", | 1498 "because it is malformed.", |
1490 howToFix: | 1499 howToFix: |
1491 "Try correcting the malformed type annotation or removing the " | 1500 "Try correcting the malformed type annotation or removing the " |
1492 "'extends' clause.", | 1501 "'extends' clause.", |
1493 examples: const [""" | 1502 examples: const [ |
| 1503 """ |
1494 class A extends Malformed {} | 1504 class A extends Malformed {} |
1495 main() => new A();"""]), | 1505 main() => new A();""" |
1496 | 1506 ]), |
1497 MessageKind.CANNOT_IMPLEMENT_MALFORMED: | 1507 |
1498 const MessageTemplate(MessageKind.CANNOT_IMPLEMENT_MALFORMED, | 1508 MessageKind.CANNOT_IMPLEMENT_MALFORMED: const MessageTemplate( |
| 1509 MessageKind.CANNOT_IMPLEMENT_MALFORMED, |
1499 "Class '#{className}' can't implement the type '#{malformedType}' " | 1510 "Class '#{className}' can't implement the type '#{malformedType}' " |
1500 "because it is malformed.", | 1511 "because it is malformed.", |
1501 howToFix: | 1512 howToFix: |
1502 "Try correcting the malformed type annotation or removing the " | 1513 "Try correcting the malformed type annotation or removing the " |
1503 "type from the 'implements' clause.", | 1514 "type from the 'implements' clause.", |
1504 examples: const [""" | 1515 examples: const [ |
| 1516 """ |
1505 class A implements Malformed {} | 1517 class A implements Malformed {} |
1506 main() => new A();"""]), | 1518 main() => new A();""" |
1507 | 1519 ]), |
1508 MessageKind.CANNOT_MIXIN_MALFORMED: | 1520 |
1509 const MessageTemplate(MessageKind.CANNOT_MIXIN_MALFORMED, | 1521 MessageKind.CANNOT_MIXIN_MALFORMED: const MessageTemplate( |
| 1522 MessageKind.CANNOT_MIXIN_MALFORMED, |
1510 "Class '#{className}' can't mixin the type '#{malformedType}' " | 1523 "Class '#{className}' can't mixin the type '#{malformedType}' " |
1511 "because it is malformed.", | 1524 "because it is malformed.", |
1512 howToFix: | 1525 howToFix: |
1513 "Try correcting the malformed type annotation or removing the " | 1526 "Try correcting the malformed type annotation or removing the " |
1514 "type from the 'with' clause.", | 1527 "type from the 'with' clause.", |
1515 examples: const [""" | 1528 examples: const [ |
| 1529 """ |
1516 class A extends Object with Malformed {} | 1530 class A extends Object with Malformed {} |
1517 main() => new A();"""]), | 1531 main() => new A();""" |
1518 | 1532 ]), |
1519 MessageKind.CANNOT_MIXIN: | 1533 |
1520 const MessageTemplate(MessageKind.CANNOT_MIXIN, | 1534 MessageKind.CANNOT_MIXIN: const MessageTemplate( |
1521 "The type '#{type}' can't be mixed in.", | 1535 MessageKind.CANNOT_MIXIN, "The type '#{type}' can't be mixed in.", |
1522 howToFix: "Try removing '#{type}' from the 'with' clause.", | 1536 howToFix: "Try removing '#{type}' from the 'with' clause.", |
1523 examples: const [""" | 1537 examples: const [ |
| 1538 """ |
1524 class C extends Object with String {} | 1539 class C extends Object with String {} |
1525 | 1540 |
1526 main() => new C(); | 1541 main() => new C(); |
1527 """, """ | 1542 """, |
| 1543 """ |
1528 typedef C = Object with String; | 1544 typedef C = Object with String; |
1529 | 1545 |
1530 main() => new C(); | 1546 main() => new C(); |
1531 """]), | 1547 """ |
1532 | 1548 ]), |
1533 MessageKind.CANNOT_EXTEND_ENUM: | 1549 |
1534 const MessageTemplate(MessageKind.CANNOT_EXTEND_ENUM, | 1550 MessageKind.CANNOT_EXTEND_ENUM: const MessageTemplate( |
| 1551 MessageKind.CANNOT_EXTEND_ENUM, |
1535 "Class '#{className}' can't extend the type '#{enumType}' because " | 1552 "Class '#{className}' can't extend the type '#{enumType}' because " |
1536 "it is declared by an enum.", | 1553 "it is declared by an enum.", |
1537 howToFix: "Try making '#{enumType}' a normal class or removing the " | 1554 howToFix: "Try making '#{enumType}' a normal class or removing the " |
1538 "'extends' clause.", | 1555 "'extends' clause.", |
1539 examples: const [""" | 1556 examples: const [ |
| 1557 """ |
1540 enum Enum { A } | 1558 enum Enum { A } |
1541 class B extends Enum {} | 1559 class B extends Enum {} |
1542 main() => new B();"""]), | 1560 main() => new B();""" |
1543 | 1561 ]), |
1544 MessageKind.CANNOT_IMPLEMENT_ENUM: | 1562 |
1545 const MessageTemplate(MessageKind.CANNOT_IMPLEMENT_ENUM, | 1563 MessageKind.CANNOT_IMPLEMENT_ENUM: const MessageTemplate( |
| 1564 MessageKind.CANNOT_IMPLEMENT_ENUM, |
1546 "Class '#{className}' can't implement the type '#{enumType}' " | 1565 "Class '#{className}' can't implement the type '#{enumType}' " |
1547 "because it is declared by an enum.", | 1566 "because it is declared by an enum.", |
1548 howToFix: "Try making '#{enumType}' a normal class or removing the " | 1567 howToFix: "Try making '#{enumType}' a normal class or removing the " |
1549 "type from the 'implements' clause.", | 1568 "type from the 'implements' clause.", |
1550 examples: const [""" | 1569 examples: const [ |
| 1570 """ |
1551 enum Enum { A } | 1571 enum Enum { A } |
1552 class B implements Enum {} | 1572 class B implements Enum {} |
1553 main() => new B();"""]), | 1573 main() => new B();""" |
1554 | 1574 ]), |
1555 MessageKind.CANNOT_MIXIN_ENUM: | 1575 |
1556 const MessageTemplate(MessageKind.CANNOT_MIXIN_ENUM, | 1576 MessageKind.CANNOT_MIXIN_ENUM: const MessageTemplate( |
| 1577 MessageKind.CANNOT_MIXIN_ENUM, |
1557 "Class '#{className}' can't mixin the type '#{enumType}' because it " | 1578 "Class '#{className}' can't mixin the type '#{enumType}' because it " |
1558 "is declared by an enum.", | 1579 "is declared by an enum.", |
1559 howToFix: "Try making '#{enumType}' a normal class or removing the " | 1580 howToFix: "Try making '#{enumType}' a normal class or removing the " |
1560 "type from the 'with' clause.", | 1581 "type from the 'with' clause.", |
1561 examples: const [""" | 1582 examples: const [ |
| 1583 """ |
1562 enum Enum { A } | 1584 enum Enum { A } |
1563 class B extends Object with Enum {} | 1585 class B extends Object with Enum {} |
1564 main() => new B();"""]), | 1586 main() => new B();""" |
1565 | 1587 ]), |
1566 MessageKind.CANNOT_INSTANTIATE_ENUM: | 1588 |
1567 const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_ENUM, | 1589 MessageKind.CANNOT_INSTANTIATE_ENUM: const MessageTemplate( |
| 1590 MessageKind.CANNOT_INSTANTIATE_ENUM, |
1568 "Enum type '#{enumName}' cannot be instantiated.", | 1591 "Enum type '#{enumName}' cannot be instantiated.", |
1569 howToFix: "Try making '#{enumType}' a normal class or use an enum " | 1592 howToFix: "Try making '#{enumType}' a normal class or use an enum " |
1570 "constant.", | 1593 "constant.", |
1571 examples: const [""" | 1594 examples: const [ |
| 1595 """ |
1572 enum Enum { A } | 1596 enum Enum { A } |
1573 main() => new Enum(0);""", """ | 1597 main() => new Enum(0);""", |
| 1598 """ |
1574 enum Enum { A } | 1599 enum Enum { A } |
1575 main() => const Enum(0);"""]), | 1600 main() => const Enum(0);""" |
1576 | 1601 ]), |
1577 MessageKind.EMPTY_ENUM_DECLARATION: | 1602 |
1578 const MessageTemplate(MessageKind.EMPTY_ENUM_DECLARATION, | 1603 MessageKind.EMPTY_ENUM_DECLARATION: const MessageTemplate( |
| 1604 MessageKind.EMPTY_ENUM_DECLARATION, |
1579 "Enum '#{enumName}' must contain at least one value.", | 1605 "Enum '#{enumName}' must contain at least one value.", |
1580 howToFix: "Try adding an enum constant or making #{enumName} a " | 1606 howToFix: "Try adding an enum constant or making #{enumName} a " |
1581 "normal class.", | 1607 "normal class.", |
1582 examples: const [""" | 1608 examples: const [ |
| 1609 """ |
1583 enum Enum {} | 1610 enum Enum {} |
1584 main() { Enum e; }"""]), | 1611 main() { Enum e; }""" |
1585 | 1612 ]), |
1586 MessageKind.MISSING_ENUM_CASES: | 1613 |
1587 const MessageTemplate(MessageKind.MISSING_ENUM_CASES, | 1614 MessageKind.MISSING_ENUM_CASES: const MessageTemplate( |
| 1615 MessageKind.MISSING_ENUM_CASES, |
1588 "Missing enum constants in switch statement: #{enumValues}.", | 1616 "Missing enum constants in switch statement: #{enumValues}.", |
1589 howToFix: "Try adding the missing constants or a default case.", | 1617 howToFix: "Try adding the missing constants or a default case.", |
1590 examples: const [""" | 1618 examples: const [ |
| 1619 """ |
1591 enum Enum { A, B } | 1620 enum Enum { A, B } |
1592 main() { | 1621 main() { |
1593 switch (Enum.A) { | 1622 switch (Enum.A) { |
1594 case Enum.B: break; | 1623 case Enum.B: break; |
1595 } | 1624 } |
1596 }""", """ | 1625 }""", |
| 1626 """ |
1597 enum Enum { A, B, C } | 1627 enum Enum { A, B, C } |
1598 main() { | 1628 main() { |
1599 switch (Enum.A) { | 1629 switch (Enum.A) { |
1600 case Enum.B: break; | 1630 case Enum.B: break; |
1601 } | 1631 } |
1602 }"""]), | 1632 }""" |
1603 | 1633 ]), |
1604 MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS: | 1634 |
1605 const MessageTemplate(MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS, | 1635 MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS: const MessageTemplate( |
| 1636 MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS, |
1606 "'#{type}' can not be both extended and implemented."), | 1637 "'#{type}' can not be both extended and implemented."), |
1607 | 1638 |
1608 MessageKind.DUPLICATE_IMPLEMENTS: | 1639 MessageKind.DUPLICATE_IMPLEMENTS: const MessageTemplate( |
1609 const MessageTemplate(MessageKind.DUPLICATE_IMPLEMENTS, | 1640 MessageKind.DUPLICATE_IMPLEMENTS, |
1610 "'#{type}' must not occur more than once " | 1641 "'#{type}' must not occur more than once " |
1611 "in the implements clause."), | 1642 "in the implements clause."), |
1612 | 1643 |
1613 MessageKind.MULTI_INHERITANCE: | 1644 MessageKind.MULTI_INHERITANCE: const MessageTemplate( |
1614 const MessageTemplate(MessageKind.MULTI_INHERITANCE, | 1645 MessageKind.MULTI_INHERITANCE, |
1615 "Dart2js does not currently support inheritance of the same class " | 1646 "Dart2js does not currently support inheritance of the same class " |
1616 "with different type arguments: Both #{firstType} and #{secondType} " | 1647 "with different type arguments: Both #{firstType} and #{secondType} " |
1617 "are supertypes of #{thisType}."), | 1648 "are supertypes of #{thisType}."), |
1618 | 1649 |
1619 MessageKind.ILLEGAL_SUPER_SEND: | 1650 MessageKind.ILLEGAL_SUPER_SEND: const MessageTemplate( |
1620 const MessageTemplate(MessageKind.ILLEGAL_SUPER_SEND, | 1651 MessageKind.ILLEGAL_SUPER_SEND, |
1621 "'#{name}' cannot be called on super."), | 1652 "'#{name}' cannot be called on super."), |
1622 | 1653 |
1623 MessageKind.ADDITIONAL_TYPE_ARGUMENT: | 1654 MessageKind.ADDITIONAL_TYPE_ARGUMENT: const MessageTemplate( |
1624 const MessageTemplate(MessageKind.ADDITIONAL_TYPE_ARGUMENT, | 1655 MessageKind.ADDITIONAL_TYPE_ARGUMENT, "Additional type argument."), |
1625 "Additional type argument."), | 1656 |
1626 | 1657 MessageKind.MISSING_TYPE_ARGUMENT: const MessageTemplate( |
1627 MessageKind.MISSING_TYPE_ARGUMENT: | 1658 MessageKind.MISSING_TYPE_ARGUMENT, "Missing type argument."), |
1628 const MessageTemplate(MessageKind.MISSING_TYPE_ARGUMENT, | |
1629 "Missing type argument."), | |
1630 | 1659 |
1631 // TODO(johnniwinther): Use ADDITIONAL_TYPE_ARGUMENT or | 1660 // TODO(johnniwinther): Use ADDITIONAL_TYPE_ARGUMENT or |
1632 // MISSING_TYPE_ARGUMENT instead. | 1661 // MISSING_TYPE_ARGUMENT instead. |
1633 MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH: | 1662 MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH: const MessageTemplate( |
1634 const MessageTemplate(MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH, | 1663 MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH, |
1635 "Incorrect number of type arguments on '#{type}'."), | 1664 "Incorrect number of type arguments on '#{type}'."), |
1636 | 1665 |
1637 MessageKind.GETTER_MISMATCH: | 1666 MessageKind.GETTER_MISMATCH: const MessageTemplate( |
1638 const MessageTemplate(MessageKind.GETTER_MISMATCH, | 1667 MessageKind.GETTER_MISMATCH, "Setter disagrees on: '#{modifiers}'."), |
1639 "Setter disagrees on: '#{modifiers}'."), | 1668 |
1640 | 1669 MessageKind.SETTER_MISMATCH: const MessageTemplate( |
1641 MessageKind.SETTER_MISMATCH: | 1670 MessageKind.SETTER_MISMATCH, "Getter disagrees on: '#{modifiers}'."), |
1642 const MessageTemplate(MessageKind.SETTER_MISMATCH, | 1671 |
1643 "Getter disagrees on: '#{modifiers}'."), | 1672 MessageKind.ILLEGAL_SETTER_FORMALS: const MessageTemplate( |
1644 | 1673 MessageKind.ILLEGAL_SETTER_FORMALS, |
1645 MessageKind.ILLEGAL_SETTER_FORMALS: | |
1646 const MessageTemplate(MessageKind.ILLEGAL_SETTER_FORMALS, | |
1647 "A setter must have exactly one argument."), | 1674 "A setter must have exactly one argument."), |
1648 | 1675 |
1649 MessageKind.NO_STATIC_OVERRIDE: | 1676 MessageKind.NO_STATIC_OVERRIDE: const MessageTemplate( |
1650 const MessageTemplate(MessageKind.NO_STATIC_OVERRIDE, | 1677 MessageKind.NO_STATIC_OVERRIDE, |
1651 "Static member cannot override instance member '#{memberName}' of " | 1678 "Static member cannot override instance member '#{memberName}' of " |
1652 "'#{className}'."), | 1679 "'#{className}'."), |
1653 | 1680 |
1654 MessageKind.NO_STATIC_OVERRIDE_CONT: | 1681 MessageKind.NO_STATIC_OVERRIDE_CONT: const MessageTemplate( |
1655 const MessageTemplate(MessageKind.NO_STATIC_OVERRIDE_CONT, | 1682 MessageKind.NO_STATIC_OVERRIDE_CONT, |
1656 "This is the instance member that cannot be overridden " | 1683 "This is the instance member that cannot be overridden " |
1657 "by a static member."), | 1684 "by a static member."), |
1658 | 1685 |
1659 MessageKind.INSTANCE_STATIC_SAME_NAME: | 1686 MessageKind.INSTANCE_STATIC_SAME_NAME: const MessageTemplate( |
1660 const MessageTemplate(MessageKind.INSTANCE_STATIC_SAME_NAME, | 1687 MessageKind.INSTANCE_STATIC_SAME_NAME, |
1661 "Instance member '#{memberName}' and static member of " | 1688 "Instance member '#{memberName}' and static member of " |
1662 "superclass '#{className}' have the same name."), | 1689 "superclass '#{className}' have the same name."), |
1663 | 1690 |
1664 MessageKind.INSTANCE_STATIC_SAME_NAME_CONT: | 1691 MessageKind.INSTANCE_STATIC_SAME_NAME_CONT: const MessageTemplate( |
1665 const MessageTemplate(MessageKind.INSTANCE_STATIC_SAME_NAME_CONT, | 1692 MessageKind.INSTANCE_STATIC_SAME_NAME_CONT, |
1666 "This is the static member with the same name."), | 1693 "This is the static member with the same name."), |
1667 | 1694 |
1668 MessageKind.INVALID_OVERRIDE_METHOD: | 1695 MessageKind.INVALID_OVERRIDE_METHOD: const MessageTemplate( |
1669 const MessageTemplate(MessageKind.INVALID_OVERRIDE_METHOD, | 1696 MessageKind.INVALID_OVERRIDE_METHOD, |
1670 "The type '#{declaredType}' of method '#{name}' declared in " | 1697 "The type '#{declaredType}' of method '#{name}' declared in " |
1671 "'#{class}' is not a subtype of the overridden method type " | 1698 "'#{class}' is not a subtype of the overridden method type " |
1672 "'#{inheritedType}' inherited from '#{inheritedClass}'."), | 1699 "'#{inheritedType}' inherited from '#{inheritedClass}'."), |
1673 | 1700 |
1674 MessageKind.INVALID_OVERRIDDEN_METHOD: | 1701 MessageKind.INVALID_OVERRIDDEN_METHOD: const MessageTemplate( |
1675 const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_METHOD, | 1702 MessageKind.INVALID_OVERRIDDEN_METHOD, |
1676 "This is the overridden method '#{name}' declared in class " | 1703 "This is the overridden method '#{name}' declared in class " |
1677 "'#{class}'."), | 1704 "'#{class}'."), |
1678 | 1705 |
1679 MessageKind.INVALID_OVERRIDE_GETTER: | 1706 MessageKind.INVALID_OVERRIDE_GETTER: const MessageTemplate( |
1680 const MessageTemplate(MessageKind.INVALID_OVERRIDE_GETTER, | 1707 MessageKind.INVALID_OVERRIDE_GETTER, |
1681 "The type '#{declaredType}' of getter '#{name}' declared in " | 1708 "The type '#{declaredType}' of getter '#{name}' declared in " |
1682 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1709 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1683 "overridden getter inherited from '#{inheritedClass}'."), | 1710 "overridden getter inherited from '#{inheritedClass}'."), |
1684 | 1711 |
1685 MessageKind.INVALID_OVERRIDDEN_GETTER: | 1712 MessageKind.INVALID_OVERRIDDEN_GETTER: const MessageTemplate( |
1686 const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_GETTER, | 1713 MessageKind.INVALID_OVERRIDDEN_GETTER, |
1687 "This is the overridden getter '#{name}' declared in class " | 1714 "This is the overridden getter '#{name}' declared in class " |
1688 "'#{class}'."), | 1715 "'#{class}'."), |
1689 | 1716 |
1690 MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD: | 1717 MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD: const MessageTemplate( |
1691 const MessageTemplate(MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, | 1718 MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, |
1692 "The type '#{declaredType}' of field '#{name}' declared in " | 1719 "The type '#{declaredType}' of field '#{name}' declared in " |
1693 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1720 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1694 "overridden getter inherited from '#{inheritedClass}'."), | 1721 "overridden getter inherited from '#{inheritedClass}'."), |
1695 | 1722 |
1696 MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER: | 1723 MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER: const MessageTemplate( |
1697 const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, | 1724 MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, |
1698 "The type '#{declaredType}' of getter '#{name}' declared in " | 1725 "The type '#{declaredType}' of getter '#{name}' declared in " |
1699 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1726 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1700 "overridden field inherited from '#{inheritedClass}'."), | 1727 "overridden field inherited from '#{inheritedClass}'."), |
1701 | 1728 |
1702 MessageKind.INVALID_OVERRIDE_SETTER: | 1729 MessageKind.INVALID_OVERRIDE_SETTER: const MessageTemplate( |
1703 const MessageTemplate(MessageKind.INVALID_OVERRIDE_SETTER, | 1730 MessageKind.INVALID_OVERRIDE_SETTER, |
1704 "The type '#{declaredType}' of setter '#{name}' declared in " | 1731 "The type '#{declaredType}' of setter '#{name}' declared in " |
1705 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1732 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1706 "overridden setter inherited from '#{inheritedClass}'."), | 1733 "overridden setter inherited from '#{inheritedClass}'."), |
1707 | 1734 |
1708 MessageKind.INVALID_OVERRIDDEN_SETTER: | 1735 MessageKind.INVALID_OVERRIDDEN_SETTER: const MessageTemplate( |
1709 const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_SETTER, | 1736 MessageKind.INVALID_OVERRIDDEN_SETTER, |
1710 "This is the overridden setter '#{name}' declared in class " | 1737 "This is the overridden setter '#{name}' declared in class " |
1711 "'#{class}'."), | 1738 "'#{class}'."), |
1712 | 1739 |
1713 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD: | 1740 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD: const MessageTemplate( |
1714 const MessageTemplate(MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD, | 1741 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD, |
1715 "The type '#{declaredType}' of field '#{name}' declared in " | 1742 "The type '#{declaredType}' of field '#{name}' declared in " |
1716 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1743 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1717 "overridden setter inherited from '#{inheritedClass}'."), | 1744 "overridden setter inherited from '#{inheritedClass}'."), |
1718 | 1745 |
1719 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER: | 1746 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER: const MessageTemplate( |
1720 const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER, | 1747 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER, |
1721 "The type '#{declaredType}' of setter '#{name}' declared in " | 1748 "The type '#{declaredType}' of setter '#{name}' declared in " |
1722 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1749 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1723 "overridden field inherited from '#{inheritedClass}'."), | 1750 "overridden field inherited from '#{inheritedClass}'."), |
1724 | 1751 |
1725 MessageKind.INVALID_OVERRIDE_FIELD: | 1752 MessageKind.INVALID_OVERRIDE_FIELD: const MessageTemplate( |
1726 const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD, | 1753 MessageKind.INVALID_OVERRIDE_FIELD, |
1727 "The type '#{declaredType}' of field '#{name}' declared in " | 1754 "The type '#{declaredType}' of field '#{name}' declared in " |
1728 "'#{class}' is not assignable to the type '#{inheritedType}' of the " | 1755 "'#{class}' is not assignable to the type '#{inheritedType}' of the " |
1729 "overridden field inherited from '#{inheritedClass}'."), | 1756 "overridden field inherited from '#{inheritedClass}'."), |
1730 | 1757 |
1731 MessageKind.INVALID_OVERRIDDEN_FIELD: | 1758 MessageKind.INVALID_OVERRIDDEN_FIELD: const MessageTemplate( |
1732 const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_FIELD, | 1759 MessageKind.INVALID_OVERRIDDEN_FIELD, |
1733 "This is the overridden field '#{name}' declared in class " | 1760 "This is the overridden field '#{name}' declared in class " |
1734 "'#{class}'."), | 1761 "'#{class}'."), |
1735 | 1762 |
1736 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD: | 1763 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD: const MessageTemplate( |
1737 const MessageTemplate(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, | 1764 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, |
1738 "Method '#{name}' in '#{class}' can't override field from " | 1765 "Method '#{name}' in '#{class}' can't override field from " |
1739 "'#{inheritedClass}'."), | 1766 "'#{inheritedClass}'."), |
1740 | 1767 |
1741 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT: | 1768 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT: const MessageTemplate( |
1742 const MessageTemplate( | |
1743 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT, | 1769 MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT, |
1744 "This is the field that cannot be overridden by a method."), | 1770 "This is the field that cannot be overridden by a method."), |
1745 | 1771 |
1746 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD: | 1772 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD: const MessageTemplate( |
1747 const MessageTemplate( | |
1748 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD, | 1773 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD, |
1749 "Field '#{name}' in '#{class}' can't override method from " | 1774 "Field '#{name}' in '#{class}' can't override method from " |
1750 "'#{inheritedClass}'."), | 1775 "'#{inheritedClass}'."), |
1751 | 1776 |
1752 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT: | 1777 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT: const MessageTemplate( |
1753 const MessageTemplate( | |
1754 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT, | 1778 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT, |
1755 "This is the method that cannot be overridden by a field."), | 1779 "This is the method that cannot be overridden by a field."), |
1756 | 1780 |
1757 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD: | 1781 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD: const MessageTemplate( |
1758 const MessageTemplate(MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, | 1782 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, |
1759 "Method '#{name}' in '#{class}' can't override getter from " | 1783 "Method '#{name}' in '#{class}' can't override getter from " |
1760 "'#{inheritedClass}'."), | 1784 "'#{inheritedClass}'."), |
1761 | 1785 |
1762 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT: | 1786 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT: |
1763 const MessageTemplate( | 1787 const MessageTemplate( |
1764 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT, | 1788 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT, |
1765 "This is the getter that cannot be overridden by a method."), | 1789 "This is the getter that cannot be overridden by a method."), |
1766 | 1790 |
1767 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER: | 1791 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER: const MessageTemplate( |
1768 const MessageTemplate(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, | 1792 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, |
1769 "Getter '#{name}' in '#{class}' can't override method from " | 1793 "Getter '#{name}' in '#{class}' can't override method from " |
1770 "'#{inheritedClass}'."), | 1794 "'#{inheritedClass}'."), |
1771 | 1795 |
1772 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT: | 1796 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT: |
1773 const MessageTemplate( | 1797 const MessageTemplate( |
1774 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT, | 1798 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT, |
1775 "This is the method that cannot be overridden by a getter."), | 1799 "This is the method that cannot be overridden by a getter."), |
1776 | 1800 |
1777 MessageKind.MISSING_FORMALS: | 1801 MessageKind.MISSING_FORMALS: const MessageTemplate( |
1778 const MessageTemplate(MessageKind.MISSING_FORMALS, | 1802 MessageKind.MISSING_FORMALS, "Formal parameters are missing."), |
1779 "Formal parameters are missing."), | 1803 |
1780 | 1804 MessageKind.EXTRA_FORMALS: const MessageTemplate( |
1781 MessageKind.EXTRA_FORMALS: | 1805 MessageKind.EXTRA_FORMALS, "Formal parameters are not allowed here."), |
1782 const MessageTemplate(MessageKind.EXTRA_FORMALS, | 1806 |
1783 "Formal parameters are not allowed here."), | 1807 MessageKind.UNARY_OPERATOR_BAD_ARITY: const MessageTemplate( |
1784 | 1808 MessageKind.UNARY_OPERATOR_BAD_ARITY, |
1785 MessageKind.UNARY_OPERATOR_BAD_ARITY: | |
1786 const MessageTemplate(MessageKind.UNARY_OPERATOR_BAD_ARITY, | |
1787 "Operator '#{operatorName}' must have no parameters."), | 1809 "Operator '#{operatorName}' must have no parameters."), |
1788 | 1810 |
1789 MessageKind.MINUS_OPERATOR_BAD_ARITY: | 1811 MessageKind.MINUS_OPERATOR_BAD_ARITY: const MessageTemplate( |
1790 const MessageTemplate(MessageKind.MINUS_OPERATOR_BAD_ARITY, | 1812 MessageKind.MINUS_OPERATOR_BAD_ARITY, |
1791 "Operator '-' must have 0 or 1 parameters."), | 1813 "Operator '-' must have 0 or 1 parameters."), |
1792 | 1814 |
1793 MessageKind.BINARY_OPERATOR_BAD_ARITY: | 1815 MessageKind.BINARY_OPERATOR_BAD_ARITY: const MessageTemplate( |
1794 const MessageTemplate(MessageKind.BINARY_OPERATOR_BAD_ARITY, | 1816 MessageKind.BINARY_OPERATOR_BAD_ARITY, |
1795 "Operator '#{operatorName}' must have exactly 1 parameter."), | 1817 "Operator '#{operatorName}' must have exactly 1 parameter."), |
1796 | 1818 |
1797 MessageKind.TERNARY_OPERATOR_BAD_ARITY: | 1819 MessageKind.TERNARY_OPERATOR_BAD_ARITY: const MessageTemplate( |
1798 const MessageTemplate(MessageKind.TERNARY_OPERATOR_BAD_ARITY, | 1820 MessageKind.TERNARY_OPERATOR_BAD_ARITY, |
1799 "Operator '#{operatorName}' must have exactly 2 parameters."), | 1821 "Operator '#{operatorName}' must have exactly 2 parameters."), |
1800 | 1822 |
1801 MessageKind.OPERATOR_OPTIONAL_PARAMETERS: | 1823 MessageKind.OPERATOR_OPTIONAL_PARAMETERS: const MessageTemplate( |
1802 const MessageTemplate(MessageKind.OPERATOR_OPTIONAL_PARAMETERS, | 1824 MessageKind.OPERATOR_OPTIONAL_PARAMETERS, |
1803 "Operator '#{operatorName}' cannot have optional parameters."), | 1825 "Operator '#{operatorName}' cannot have optional parameters."), |
1804 | 1826 |
1805 MessageKind.OPERATOR_NAMED_PARAMETERS: | 1827 MessageKind.OPERATOR_NAMED_PARAMETERS: const MessageTemplate( |
1806 const MessageTemplate(MessageKind.OPERATOR_NAMED_PARAMETERS, | 1828 MessageKind.OPERATOR_NAMED_PARAMETERS, |
1807 "Operator '#{operatorName}' cannot have named parameters."), | 1829 "Operator '#{operatorName}' cannot have named parameters."), |
1808 | 1830 |
1809 MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER: | 1831 MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER: const MessageTemplate( |
1810 const MessageTemplate(MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER, | 1832 MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER, |
1811 "Cannot have final modifier on method."), | 1833 "Cannot have final modifier on method."), |
1812 | 1834 |
1813 MessageKind.ILLEGAL_CONST_FIELD_MODIFIER: | 1835 MessageKind.ILLEGAL_CONST_FIELD_MODIFIER: const MessageTemplate( |
1814 const MessageTemplate(MessageKind.ILLEGAL_CONST_FIELD_MODIFIER, | 1836 MessageKind.ILLEGAL_CONST_FIELD_MODIFIER, |
1815 "Cannot have const modifier on non-static field.", | 1837 "Cannot have const modifier on non-static field.", |
1816 howToFix: | 1838 howToFix: |
1817 "Try adding a static modifier, or removing the const modifier.", | 1839 "Try adding a static modifier, or removing the const modifier.", |
1818 examples: const [""" | 1840 examples: const [ |
| 1841 """ |
1819 class C { | 1842 class C { |
1820 const int a = 1; | 1843 const int a = 1; |
1821 } | 1844 } |
1822 | 1845 |
1823 main() => new C();"""]), | 1846 main() => new C();""" |
1824 | 1847 ]), |
1825 MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS: | 1848 |
1826 const MessageTemplate(MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS, | 1849 MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS: const MessageTemplate( |
| 1850 MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS, |
1827 "Illegal constructor modifiers: '#{modifiers}'."), | 1851 "Illegal constructor modifiers: '#{modifiers}'."), |
1828 | 1852 |
1829 MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS: | 1853 MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS: const MessageTemplate( |
1830 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS, | 1854 MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS, |
1831 "Illegal mixin application modifiers: '#{modifiers}'."), | 1855 "Illegal mixin application modifiers: '#{modifiers}'."), |
1832 | 1856 |
1833 MessageKind.ILLEGAL_MIXIN_SUPERCLASS: | 1857 MessageKind.ILLEGAL_MIXIN_SUPERCLASS: const MessageTemplate( |
1834 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_SUPERCLASS, | 1858 MessageKind.ILLEGAL_MIXIN_SUPERCLASS, |
1835 "Class used as mixin must have Object as superclass."), | 1859 "Class used as mixin must have Object as superclass."), |
1836 | 1860 |
1837 MessageKind.ILLEGAL_MIXIN_OBJECT: | 1861 MessageKind.ILLEGAL_MIXIN_OBJECT: const MessageTemplate( |
1838 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_OBJECT, | 1862 MessageKind.ILLEGAL_MIXIN_OBJECT, "Cannot use Object as mixin."), |
1839 "Cannot use Object as mixin."), | 1863 |
1840 | 1864 MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR: const MessageTemplate( |
1841 MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR: | 1865 MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR, |
1842 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR, | |
1843 "Class used as mixin cannot have non-factory constructor."), | 1866 "Class used as mixin cannot have non-factory constructor."), |
1844 | 1867 |
1845 MessageKind.ILLEGAL_MIXIN_CYCLE: | 1868 MessageKind.ILLEGAL_MIXIN_CYCLE: const MessageTemplate( |
1846 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_CYCLE, | 1869 MessageKind.ILLEGAL_MIXIN_CYCLE, |
1847 "Class used as mixin introduces mixin cycle: " | 1870 "Class used as mixin introduces mixin cycle: " |
1848 "'#{mixinName1}' <-> '#{mixinName2}'."), | 1871 "'#{mixinName1}' <-> '#{mixinName2}'."), |
1849 | 1872 |
1850 MessageKind.ILLEGAL_MIXIN_WITH_SUPER: | 1873 MessageKind.ILLEGAL_MIXIN_WITH_SUPER: const MessageTemplate( |
1851 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_WITH_SUPER, | 1874 MessageKind.ILLEGAL_MIXIN_WITH_SUPER, |
1852 "Cannot use class '#{className}' as a mixin because it uses " | 1875 "Cannot use class '#{className}' as a mixin because it uses " |
1853 "'super'."), | 1876 "'super'."), |
1854 | 1877 |
1855 MessageKind.ILLEGAL_MIXIN_SUPER_USE: | 1878 MessageKind.ILLEGAL_MIXIN_SUPER_USE: const MessageTemplate( |
1856 const MessageTemplate(MessageKind.ILLEGAL_MIXIN_SUPER_USE, | 1879 MessageKind.ILLEGAL_MIXIN_SUPER_USE, |
1857 "Use of 'super' in class used as mixin."), | 1880 "Use of 'super' in class used as mixin."), |
1858 | 1881 |
1859 MessageKind.PARAMETER_NAME_EXPECTED: | 1882 MessageKind.PARAMETER_NAME_EXPECTED: const MessageTemplate( |
1860 const MessageTemplate(MessageKind.PARAMETER_NAME_EXPECTED, | 1883 MessageKind.PARAMETER_NAME_EXPECTED, "parameter name expected."), |
1861 "parameter name expected."), | 1884 |
1862 | 1885 MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER: const MessageTemplate( |
1863 MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER: | 1886 MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, |
1864 const MessageTemplate(MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, | |
1865 "Cannot resolve setter."), | 1887 "Cannot resolve setter."), |
1866 | 1888 |
1867 MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER: | 1889 MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER: const MessageTemplate( |
1868 const MessageTemplate(MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER, | 1890 MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER, |
1869 "Cannot assign a value to final field '#{name}' " | 1891 "Cannot assign a value to final field '#{name}' " |
1870 "in superclass '#{superclassName}'."), | 1892 "in superclass '#{superclassName}'."), |
1871 | 1893 |
1872 MessageKind.ASSIGNING_METHOD: | 1894 MessageKind.ASSIGNING_METHOD: const MessageTemplate( |
1873 const MessageTemplate(MessageKind.ASSIGNING_METHOD, | 1895 MessageKind.ASSIGNING_METHOD, "Cannot assign a value to a method."), |
1874 "Cannot assign a value to a method."), | 1896 |
1875 | 1897 MessageKind.ASSIGNING_METHOD_IN_SUPER: const MessageTemplate( |
1876 MessageKind.ASSIGNING_METHOD_IN_SUPER: | 1898 MessageKind.ASSIGNING_METHOD_IN_SUPER, |
1877 const MessageTemplate(MessageKind.ASSIGNING_METHOD_IN_SUPER, | |
1878 "Cannot assign a value to method '#{name}' " | 1899 "Cannot assign a value to method '#{name}' " |
1879 "in superclass '#{superclassName}'."), | 1900 "in superclass '#{superclassName}'."), |
1880 | 1901 |
1881 MessageKind.ASSIGNING_TYPE: | 1902 MessageKind.ASSIGNING_TYPE: const MessageTemplate( |
1882 const MessageTemplate(MessageKind.ASSIGNING_TYPE, | 1903 MessageKind.ASSIGNING_TYPE, "Cannot assign a value to a type."), |
1883 "Cannot assign a value to a type."), | 1904 |
1884 | 1905 MessageKind.IF_NULL_ASSIGNING_TYPE: const MessageTemplate( |
1885 MessageKind.IF_NULL_ASSIGNING_TYPE: | 1906 MessageKind.IF_NULL_ASSIGNING_TYPE, |
1886 const MessageTemplate(MessageKind.IF_NULL_ASSIGNING_TYPE, | |
1887 "Cannot assign a value to a type. Note that types are never null, " | 1907 "Cannot assign a value to a type. Note that types are never null, " |
1888 "so this ??= assignment has no effect.", | 1908 "so this ??= assignment has no effect.", |
1889 howToFix: "Try removing the '??=' assignment.", | 1909 howToFix: "Try removing the '??=' assignment.", |
1890 examples: const [ | 1910 examples: const ["class A {} main() { print(A ??= 3);}",]), |
1891 "class A {} main() { print(A ??= 3);}", | 1911 |
1892 ]), | 1912 MessageKind.VOID_NOT_ALLOWED: const MessageTemplate( |
1893 | 1913 MessageKind.VOID_NOT_ALLOWED, |
1894 MessageKind.VOID_NOT_ALLOWED: | |
1895 const MessageTemplate(MessageKind.VOID_NOT_ALLOWED, | |
1896 "Type 'void' can't be used here because it isn't a return type.", | 1914 "Type 'void' can't be used here because it isn't a return type.", |
1897 howToFix: | 1915 howToFix: |
1898 "Try removing 'void' keyword or replace it with 'var', 'final', " | 1916 "Try removing 'void' keyword or replace it with 'var', 'final', " |
1899 "or a type.", | 1917 "or a type.", |
1900 examples: const [ | 1918 examples: const [ |
1901 "void x; main() {}", | 1919 "void x; main() {}", |
1902 "foo(void x) {} main() { foo(null); }", | 1920 "foo(void x) {} main() { foo(null); }", |
1903 ]), | 1921 ]), |
1904 | 1922 |
1905 MessageKind.NULL_NOT_ALLOWED: | 1923 MessageKind.NULL_NOT_ALLOWED: const MessageTemplate( |
1906 const MessageTemplate(MessageKind.NULL_NOT_ALLOWED, | 1924 MessageKind.NULL_NOT_ALLOWED, "`null` can't be used here."), |
1907 "`null` can't be used here."), | 1925 |
1908 | 1926 MessageKind.BEFORE_TOP_LEVEL: const MessageTemplate( |
1909 MessageKind.BEFORE_TOP_LEVEL: | 1927 MessageKind.BEFORE_TOP_LEVEL, |
1910 const MessageTemplate(MessageKind.BEFORE_TOP_LEVEL, | |
1911 "Part header must come before top-level definitions."), | 1928 "Part header must come before top-level definitions."), |
1912 | 1929 |
1913 MessageKind.IMPORT_PART_OF: | 1930 MessageKind.IMPORT_PART_OF: const MessageTemplate( |
1914 const MessageTemplate(MessageKind.IMPORT_PART_OF, | 1931 MessageKind.IMPORT_PART_OF, |
1915 "The imported library must not have a 'part-of' directive.", | 1932 "The imported library must not have a 'part-of' directive.", |
1916 howToFix: "Try removing the 'part-of' directive or replacing the " | 1933 howToFix: "Try removing the 'part-of' directive or replacing the " |
1917 "import of the library with a 'part' directive.", | 1934 "import of the library with a 'part' directive.", |
1918 examples: const [const { | 1935 examples: const [ |
1919 'main.dart': """ | 1936 const { |
| 1937 'main.dart': """ |
1920 library library; | 1938 library library; |
1921 | 1939 |
1922 import 'part.dart'; | 1940 import 'part.dart'; |
1923 | 1941 |
1924 main() {} | 1942 main() {} |
1925 """, | 1943 """, |
1926 | 1944 'part.dart': """ |
1927 'part.dart': """ | |
1928 part of library; | 1945 part of library; |
1929 """}]), | 1946 """ |
1930 | 1947 } |
1931 MessageKind.IMPORT_PART_OF_HERE: | 1948 ]), |
1932 const MessageTemplate(MessageKind.IMPORT_PART_OF_HERE, | 1949 |
1933 "The library is imported here."), | 1950 MessageKind.IMPORT_PART_OF_HERE: const MessageTemplate( |
1934 | 1951 MessageKind.IMPORT_PART_OF_HERE, "The library is imported here."), |
1935 MessageKind.MAIN_HAS_PART_OF: | 1952 |
1936 const MessageTemplate(MessageKind.MAIN_HAS_PART_OF, | 1953 MessageKind.MAIN_HAS_PART_OF: const MessageTemplate( |
| 1954 MessageKind.MAIN_HAS_PART_OF, |
1937 "The main application file must not have a 'part-of' directive.", | 1955 "The main application file must not have a 'part-of' directive.", |
1938 howToFix: "Try removing the 'part-of' directive or starting " | 1956 howToFix: "Try removing the 'part-of' directive or starting " |
1939 "compilation from another file.", | 1957 "compilation from another file.", |
1940 examples: const [const { | 1958 examples: const [ |
1941 'main.dart': """ | 1959 const { |
| 1960 'main.dart': """ |
1942 part of library; | 1961 part of library; |
1943 | 1962 |
1944 main() {} | 1963 main() {} |
1945 """}]), | 1964 """ |
1946 | 1965 } |
1947 MessageKind.LIBRARY_NAME_MISMATCH: | 1966 ]), |
1948 const MessageTemplate(MessageKind.LIBRARY_NAME_MISMATCH, | 1967 |
| 1968 MessageKind.LIBRARY_NAME_MISMATCH: const MessageTemplate( |
| 1969 MessageKind.LIBRARY_NAME_MISMATCH, |
1949 "Expected part of library name '#{libraryName}'.", | 1970 "Expected part of library name '#{libraryName}'.", |
1950 howToFix: "Try changing the directive to 'part of #{libraryName};'.", | 1971 howToFix: "Try changing the directive to 'part of #{libraryName};'.", |
1951 examples: const [const { | 1972 examples: const [ |
1952 'main.dart': """ | 1973 const { |
| 1974 'main.dart': """ |
1953 library lib.foo; | 1975 library lib.foo; |
1954 | 1976 |
1955 part 'part.dart'; | 1977 part 'part.dart'; |
1956 | 1978 |
1957 main() {} | 1979 main() {} |
1958 """, | 1980 """, |
1959 | 1981 'part.dart': """ |
1960 'part.dart': """ | |
1961 part of lib.bar; | 1982 part of lib.bar; |
1962 """}]), | 1983 """ |
1963 | 1984 } |
1964 MessageKind.MISSING_LIBRARY_NAME: | 1985 ]), |
1965 const MessageTemplate(MessageKind.MISSING_LIBRARY_NAME, | 1986 |
| 1987 MessageKind.MISSING_LIBRARY_NAME: const MessageTemplate( |
| 1988 MessageKind.MISSING_LIBRARY_NAME, |
1966 "Library has no name. Part directive expected library name " | 1989 "Library has no name. Part directive expected library name " |
1967 "to be '#{libraryName}'.", | 1990 "to be '#{libraryName}'.", |
1968 howToFix: "Try adding 'library #{libraryName};' to the library.", | 1991 howToFix: "Try adding 'library #{libraryName};' to the library.", |
1969 examples: const [const { | 1992 examples: const [ |
1970 'main.dart': """ | 1993 const { |
| 1994 'main.dart': """ |
1971 part 'part.dart'; | 1995 part 'part.dart'; |
1972 | 1996 |
1973 main() {} | 1997 main() {} |
1974 """, | 1998 """, |
1975 | 1999 'part.dart': """ |
1976 'part.dart': """ | |
1977 part of lib.foo; | 2000 part of lib.foo; |
1978 """}]), | 2001 """ |
1979 | 2002 } |
1980 MessageKind.THIS_IS_THE_PART_OF_TAG: | 2003 ]), |
1981 const MessageTemplate(MessageKind.THIS_IS_THE_PART_OF_TAG, | 2004 |
| 2005 MessageKind.THIS_IS_THE_PART_OF_TAG: const MessageTemplate( |
| 2006 MessageKind.THIS_IS_THE_PART_OF_TAG, |
1982 "This is the part of directive."), | 2007 "This is the part of directive."), |
1983 | 2008 |
1984 MessageKind.MISSING_PART_OF_TAG: | 2009 MessageKind.MISSING_PART_OF_TAG: const MessageTemplate( |
1985 const MessageTemplate(MessageKind.MISSING_PART_OF_TAG, | 2010 MessageKind.MISSING_PART_OF_TAG, |
1986 "This file has no part-of tag, but it is being used as a part."), | 2011 "This file has no part-of tag, but it is being used as a part."), |
1987 | 2012 |
1988 MessageKind.DUPLICATED_PART_OF: | 2013 MessageKind.DUPLICATED_PART_OF: const MessageTemplate( |
1989 const MessageTemplate(MessageKind.DUPLICATED_PART_OF, | 2014 MessageKind.DUPLICATED_PART_OF, "Duplicated part-of directive."), |
1990 "Duplicated part-of directive."), | 2015 |
1991 | 2016 MessageKind.DUPLICATED_LIBRARY_NAME: const MessageTemplate( |
1992 MessageKind.DUPLICATED_LIBRARY_NAME: | 2017 MessageKind.DUPLICATED_LIBRARY_NAME, |
1993 const MessageTemplate(MessageKind.DUPLICATED_LIBRARY_NAME, | |
1994 "Duplicated library name '#{libraryName}'."), | 2018 "Duplicated library name '#{libraryName}'."), |
1995 | 2019 |
1996 MessageKind.DUPLICATED_RESOURCE: | 2020 MessageKind.DUPLICATED_RESOURCE: const MessageTemplate( |
1997 const MessageTemplate(MessageKind.DUPLICATED_RESOURCE, | 2021 MessageKind.DUPLICATED_RESOURCE, |
1998 "The resource '#{resourceUri}' is loaded through both " | 2022 "The resource '#{resourceUri}' is loaded through both " |
1999 "'#{canonicalUri1}' and '#{canonicalUri2}'."), | 2023 "'#{canonicalUri1}' and '#{canonicalUri2}'."), |
2000 | 2024 |
2001 MessageKind.DUPLICATED_LIBRARY_RESOURCE: | 2025 MessageKind.DUPLICATED_LIBRARY_RESOURCE: const MessageTemplate( |
2002 const MessageTemplate(MessageKind.DUPLICATED_LIBRARY_RESOURCE, | 2026 MessageKind.DUPLICATED_LIBRARY_RESOURCE, |
2003 "The library '#{libraryName}' in '#{resourceUri}' is loaded through " | 2027 "The library '#{libraryName}' in '#{resourceUri}' is loaded through " |
2004 "both '#{canonicalUri1}' and '#{canonicalUri2}'."), | 2028 "both '#{canonicalUri1}' and '#{canonicalUri2}'."), |
2005 | 2029 |
2006 // This is used as an exception. | 2030 // This is used as an exception. |
2007 MessageKind.INVALID_SOURCE_FILE_LOCATION: | 2031 MessageKind.INVALID_SOURCE_FILE_LOCATION: const MessageTemplate( |
2008 const MessageTemplate(MessageKind.INVALID_SOURCE_FILE_LOCATION, ''' | 2032 MessageKind.INVALID_SOURCE_FILE_LOCATION, |
| 2033 ''' |
2009 Invalid offset (#{offset}) in source map. | 2034 Invalid offset (#{offset}) in source map. |
2010 File: #{fileName} | 2035 File: #{fileName} |
2011 Length: #{length}'''), | 2036 Length: #{length}'''), |
2012 | 2037 |
2013 MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC: | 2038 MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC: const MessageTemplate( |
2014 const MessageTemplate(MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC, | 2039 MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC, |
2015 "Top-level variable cannot be declared static."), | 2040 "Top-level variable cannot be declared static."), |
2016 | 2041 |
2017 MessageKind.REFERENCE_IN_INITIALIZATION: | 2042 MessageKind.REFERENCE_IN_INITIALIZATION: const MessageTemplate( |
2018 const MessageTemplate(MessageKind.REFERENCE_IN_INITIALIZATION, | 2043 MessageKind.REFERENCE_IN_INITIALIZATION, |
2019 "Variable '#{variableName}' is referenced during its " | 2044 "Variable '#{variableName}' is referenced during its " |
2020 "initialization.", | 2045 "initialization.", |
2021 howToFix: | 2046 howToFix: |
2022 "If you are trying to reference a shadowed variable, rename " | 2047 "If you are trying to reference a shadowed variable, rename " |
2023 "one of the variables.", | 2048 "one of the variables.", |
2024 examples: const [""" | 2049 examples: const [ |
| 2050 """ |
2025 foo(t) { | 2051 foo(t) { |
2026 var t = t; | 2052 var t = t; |
2027 return t; | 2053 return t; |
2028 } | 2054 } |
2029 | 2055 |
2030 main() => foo(1); | 2056 main() => foo(1); |
2031 """]), | 2057 """ |
2032 | 2058 ]), |
2033 MessageKind.CONST_WITHOUT_INITIALIZER: | 2059 |
2034 const MessageTemplate(MessageKind.CONST_WITHOUT_INITIALIZER, | 2060 MessageKind.CONST_WITHOUT_INITIALIZER: const MessageTemplate( |
| 2061 MessageKind.CONST_WITHOUT_INITIALIZER, |
2035 "A constant variable must be initialized.", | 2062 "A constant variable must be initialized.", |
2036 howToFix: "Try adding an initializer or " | 2063 howToFix: "Try adding an initializer or " |
2037 "removing the 'const' modifier.", | 2064 "removing the 'const' modifier.", |
2038 examples: const [""" | 2065 examples: const [ |
| 2066 """ |
2039 void main() { | 2067 void main() { |
2040 const c; // This constant variable must be initialized. | 2068 const c; // This constant variable must be initialized. |
2041 }"""]), | 2069 }""" |
2042 | 2070 ]), |
2043 MessageKind.FINAL_WITHOUT_INITIALIZER: | 2071 |
2044 const MessageTemplate(MessageKind.FINAL_WITHOUT_INITIALIZER, | 2072 MessageKind.FINAL_WITHOUT_INITIALIZER: const MessageTemplate( |
| 2073 MessageKind.FINAL_WITHOUT_INITIALIZER, |
2045 "A final variable must be initialized.", | 2074 "A final variable must be initialized.", |
2046 howToFix: "Try adding an initializer or " | 2075 howToFix: "Try adding an initializer or " |
2047 "removing the 'final' modifier.", | 2076 "removing the 'final' modifier.", |
2048 examples: const [ | 2077 examples: const [ |
2049 "class C { static final field; } main() => C.field;"]), | 2078 "class C { static final field; } main() => C.field;" |
2050 | 2079 ]), |
2051 MessageKind.CONST_LOOP_VARIABLE: | 2080 |
2052 const MessageTemplate(MessageKind.CONST_LOOP_VARIABLE, | 2081 MessageKind.CONST_LOOP_VARIABLE: const MessageTemplate( |
| 2082 MessageKind.CONST_LOOP_VARIABLE, |
2053 "A loop variable cannot be constant.", | 2083 "A loop variable cannot be constant.", |
2054 howToFix: "Try remove the 'const' modifier or " | 2084 howToFix: "Try remove the 'const' modifier or " |
2055 "replacing it with a 'final' modifier.", | 2085 "replacing it with a 'final' modifier.", |
2056 examples: const [""" | 2086 examples: const [ |
| 2087 """ |
2057 void main() { | 2088 void main() { |
2058 for (const c in []) {} | 2089 for (const c in []) {} |
2059 }"""]), | 2090 }""" |
2060 | 2091 ]), |
2061 MessageKind.MEMBER_USES_CLASS_NAME: | 2092 |
2062 const MessageTemplate(MessageKind.MEMBER_USES_CLASS_NAME, | 2093 MessageKind.MEMBER_USES_CLASS_NAME: const MessageTemplate( |
| 2094 MessageKind.MEMBER_USES_CLASS_NAME, |
2063 "Member variable can't have the same name as the class it is " | 2095 "Member variable can't have the same name as the class it is " |
2064 "declared in.", | 2096 "declared in.", |
2065 howToFix: "Try renaming the variable.", | 2097 howToFix: "Try renaming the variable.", |
2066 examples: const [""" | 2098 examples: const [ |
| 2099 """ |
2067 class A { var A; } | 2100 class A { var A; } |
2068 main() { | 2101 main() { |
2069 var a = new A(); | 2102 var a = new A(); |
2070 a.A = 1; | 2103 a.A = 1; |
2071 } | 2104 } |
2072 """, """ | 2105 """, |
| 2106 """ |
2073 class A { static var A; } | 2107 class A { static var A; } |
2074 main() => A.A = 1; | 2108 main() => A.A = 1; |
2075 """]), | 2109 """ |
2076 | 2110 ]), |
2077 MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT: | 2111 |
2078 const MessageTemplate( | 2112 MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT: const MessageTemplate( |
2079 MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT, | 2113 MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT, |
2080 "Wrong number of arguments to assert. Should be 1, but given " | 2114 "Wrong number of arguments to assert. Should be 1, but given " |
2081 "#{argumentCount}."), | 2115 "#{argumentCount}."), |
2082 | 2116 |
2083 MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS: | 2117 MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS: const MessageTemplate( |
2084 const MessageTemplate(MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS, | 2118 MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS, |
2085 "'assert' takes no named arguments, but given #{argumentCount}."), | 2119 "'assert' takes no named arguments, but given #{argumentCount}."), |
2086 | 2120 |
2087 MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY: | 2121 MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY: const MessageTemplate( |
2088 const MessageTemplate(MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY, | 2122 MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY, |
2089 "Factory redirection only allowed in factories."), | 2123 "Factory redirection only allowed in factories."), |
2090 | 2124 |
2091 MessageKind.MISSING_FACTORY_KEYWORD: | 2125 MessageKind.MISSING_FACTORY_KEYWORD: const MessageTemplate( |
2092 const MessageTemplate(MessageKind.MISSING_FACTORY_KEYWORD, | 2126 MessageKind.MISSING_FACTORY_KEYWORD, |
2093 "Did you forget a factory keyword here?"), | 2127 "Did you forget a factory keyword here?"), |
2094 | 2128 |
2095 MessageKind.NO_SUCH_METHOD_IN_NATIVE: | 2129 MessageKind.NO_SUCH_METHOD_IN_NATIVE: const MessageTemplate( |
2096 const MessageTemplate(MessageKind.NO_SUCH_METHOD_IN_NATIVE, | 2130 MessageKind.NO_SUCH_METHOD_IN_NATIVE, |
2097 "'NoSuchMethod' is not supported for classes that extend native " | 2131 "'NoSuchMethod' is not supported for classes that extend native " |
2098 "classes."), | 2132 "classes."), |
2099 | 2133 |
2100 MessageKind.DEFERRED_LIBRARY_DART_2_DART: | 2134 MessageKind.DEFERRED_LIBRARY_DART_2_DART: const MessageTemplate( |
2101 const MessageTemplate(MessageKind.DEFERRED_LIBRARY_DART_2_DART, | 2135 MessageKind.DEFERRED_LIBRARY_DART_2_DART, |
2102 "Deferred loading is not supported by the dart backend yet. " | 2136 "Deferred loading is not supported by the dart backend yet. " |
2103 "The output will not be split."), | 2137 "The output will not be split."), |
2104 | 2138 |
2105 MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX: | 2139 MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX: const MessageTemplate( |
2106 const MessageTemplate(MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX, | 2140 MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX, |
2107 "This import is deferred but there is no prefix keyword.", | 2141 "This import is deferred but there is no prefix keyword.", |
2108 howToFix: "Try adding a prefix to the import."), | 2142 howToFix: "Try adding a prefix to the import."), |
2109 | 2143 |
2110 MessageKind.DEFERRED_OLD_SYNTAX: | 2144 MessageKind.DEFERRED_OLD_SYNTAX: const MessageTemplate( |
2111 const MessageTemplate(MessageKind.DEFERRED_OLD_SYNTAX, | 2145 MessageKind.DEFERRED_OLD_SYNTAX, |
2112 "The DeferredLibrary annotation is obsolete.", | 2146 "The DeferredLibrary annotation is obsolete.", |
2113 howToFix: | 2147 howToFix: |
2114 "Use the \"import 'lib.dart' deferred as prefix\" syntax instead."), | 2148 "Use the \"import 'lib.dart' deferred as prefix\" syntax instead."
), |
2115 | 2149 |
2116 MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX: | 2150 MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX: const MessageTemplate( |
2117 const MessageTemplate(MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX, | 2151 MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX, |
2118 "The prefix of this deferred import is not unique.", | 2152 "The prefix of this deferred import is not unique.", |
2119 howToFix: "Try changing the import prefix."), | 2153 howToFix: "Try changing the import prefix."), |
2120 | 2154 |
2121 MessageKind.DEFERRED_TYPE_ANNOTATION: | 2155 MessageKind.DEFERRED_TYPE_ANNOTATION: const MessageTemplate( |
2122 const MessageTemplate(MessageKind.DEFERRED_TYPE_ANNOTATION, | 2156 MessageKind.DEFERRED_TYPE_ANNOTATION, |
2123 "The type #{node} is deferred. " | 2157 "The type #{node} is deferred. " |
2124 "Deferred types are not valid as type annotations.", | 2158 "Deferred types are not valid as type annotations.", |
2125 howToFix: | 2159 howToFix: "Try using a non-deferred abstract class as an interface."), |
2126 "Try using a non-deferred abstract class as an interface."), | 2160 |
2127 | 2161 MessageKind.ILLEGAL_STATIC: const MessageTemplate( |
2128 MessageKind.ILLEGAL_STATIC: | 2162 MessageKind.ILLEGAL_STATIC, |
2129 const MessageTemplate(MessageKind.ILLEGAL_STATIC, | |
2130 "Modifier static is only allowed on functions declared in " | 2163 "Modifier static is only allowed on functions declared in " |
2131 "a class."), | 2164 "a class."), |
2132 | 2165 |
2133 MessageKind.STATIC_FUNCTION_BLOAT: | 2166 MessageKind.STATIC_FUNCTION_BLOAT: const MessageTemplate( |
2134 const MessageTemplate(MessageKind.STATIC_FUNCTION_BLOAT, | 2167 MessageKind.STATIC_FUNCTION_BLOAT, |
2135 "Using '#{class}.#{name}' may lead to unnecessarily large " | 2168 "Using '#{class}.#{name}' may lead to unnecessarily large " |
2136 "generated code.", | 2169 "generated code.", |
2137 howToFix: | 2170 howToFix: "Try adding '@MirrorsUsed(...)' as described at " |
2138 "Try adding '@MirrorsUsed(...)' as described at " | |
2139 "https://goo.gl/Akrrog."), | 2171 "https://goo.gl/Akrrog."), |
2140 | 2172 |
2141 MessageKind.NON_CONST_BLOAT: | 2173 MessageKind.NON_CONST_BLOAT: const MessageTemplate( |
2142 const MessageTemplate(MessageKind.NON_CONST_BLOAT, | 2174 MessageKind.NON_CONST_BLOAT, |
2143 "Using 'new #{name}' may lead to unnecessarily large generated " | 2175 "Using 'new #{name}' may lead to unnecessarily large generated " |
2144 "code.", | 2176 "code.", |
2145 howToFix: | 2177 howToFix: |
2146 "Try using 'const #{name}' or adding '@MirrorsUsed(...)' as " | 2178 "Try using 'const #{name}' or adding '@MirrorsUsed(...)' as " |
2147 "described at https://goo.gl/Akrrog."), | 2179 "described at https://goo.gl/Akrrog."), |
2148 | 2180 |
2149 MessageKind.STRING_EXPECTED: | 2181 MessageKind.STRING_EXPECTED: const MessageTemplate( |
2150 const MessageTemplate(MessageKind.STRING_EXPECTED, | 2182 MessageKind.STRING_EXPECTED, |
2151 "Expected a 'String', but got an instance of '#{type}'."), | 2183 "Expected a 'String', but got an instance of '#{type}'."), |
2152 | 2184 |
2153 MessageKind.PRIVATE_IDENTIFIER: | 2185 MessageKind.PRIVATE_IDENTIFIER: const MessageTemplate( |
2154 const MessageTemplate(MessageKind.PRIVATE_IDENTIFIER, | 2186 MessageKind.PRIVATE_IDENTIFIER, |
2155 "'#{value}' is not a valid Symbol name because it starts with " | 2187 "'#{value}' is not a valid Symbol name because it starts with " |
2156 "'_'."), | 2188 "'_'."), |
2157 | 2189 |
2158 MessageKind.PRIVATE_NAMED_PARAMETER: | 2190 MessageKind.PRIVATE_NAMED_PARAMETER: const MessageTemplate( |
2159 const MessageTemplate(MessageKind.PRIVATE_NAMED_PARAMETER, | 2191 MessageKind.PRIVATE_NAMED_PARAMETER, |
2160 "Named optional parameter can't have a library private name.", | 2192 "Named optional parameter can't have a library private name.", |
2161 howToFix: | 2193 howToFix: |
2162 "Try removing the '_' or making the parameter positional or " | 2194 "Try removing the '_' or making the parameter positional or " |
2163 "required.", | 2195 "required.", |
2164 examples: const ["""foo({int _p}) {} main() => foo();"""]), | 2196 examples: const ["""foo({int _p}) {} main() => foo();"""]), |
2165 | 2197 |
2166 MessageKind.UNSUPPORTED_LITERAL_SYMBOL: | 2198 MessageKind.UNSUPPORTED_LITERAL_SYMBOL: const MessageTemplate( |
2167 const MessageTemplate(MessageKind.UNSUPPORTED_LITERAL_SYMBOL, | 2199 MessageKind.UNSUPPORTED_LITERAL_SYMBOL, |
2168 "Symbol literal '##{value}' is currently unsupported by dart2js."), | 2200 "Symbol literal '##{value}' is currently unsupported by dart2js."), |
2169 | 2201 |
2170 MessageKind.INVALID_SYMBOL: | 2202 MessageKind.INVALID_SYMBOL: const MessageTemplate( |
2171 const MessageTemplate(MessageKind.INVALID_SYMBOL, ''' | 2203 MessageKind.INVALID_SYMBOL, |
| 2204 ''' |
2172 '#{value}' is not a valid Symbol name because is not: | 2205 '#{value}' is not a valid Symbol name because is not: |
2173 * an empty String, | 2206 * an empty String, |
2174 * a user defined operator, | 2207 * a user defined operator, |
2175 * a qualified non-private identifier optionally followed by '=', or | 2208 * a qualified non-private identifier optionally followed by '=', or |
2176 * a qualified non-private identifier followed by '.' and a user-defined ''' | 2209 * a qualified non-private identifier followed by '.' and a user-defined ''' |
2177 "operator."), | 2210 "operator."), |
2178 | 2211 |
2179 MessageKind.AMBIGUOUS_REEXPORT: | 2212 MessageKind.AMBIGUOUS_REEXPORT: const MessageTemplate( |
2180 const MessageTemplate(MessageKind.AMBIGUOUS_REEXPORT, | 2213 MessageKind.AMBIGUOUS_REEXPORT, |
2181 "'#{name}' is (re)exported by multiple libraries."), | 2214 "'#{name}' is (re)exported by multiple libraries."), |
2182 | 2215 |
2183 MessageKind.AMBIGUOUS_LOCATION: | 2216 MessageKind.AMBIGUOUS_LOCATION: const MessageTemplate( |
2184 const MessageTemplate(MessageKind.AMBIGUOUS_LOCATION, | 2217 MessageKind.AMBIGUOUS_LOCATION, "'#{name}' is defined here."), |
2185 "'#{name}' is defined here."), | 2218 |
2186 | 2219 MessageKind.IMPORTED_HERE: const MessageTemplate( |
2187 MessageKind.IMPORTED_HERE: | 2220 MessageKind.IMPORTED_HERE, "'#{name}' is imported here."), |
2188 const MessageTemplate(MessageKind.IMPORTED_HERE, | 2221 |
2189 "'#{name}' is imported here."), | 2222 MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE: const MessageTemplate( |
2190 | 2223 MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE, |
2191 MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE: | |
2192 const MessageTemplate(MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE, | |
2193 "The class '#{class}' overrides 'operator==', " | 2224 "The class '#{class}' overrides 'operator==', " |
2194 "but not 'get hashCode'."), | 2225 "but not 'get hashCode'."), |
2195 | 2226 |
2196 MessageKind.INTERNAL_LIBRARY_FROM: | 2227 MessageKind.INTERNAL_LIBRARY_FROM: const MessageTemplate( |
2197 const MessageTemplate(MessageKind.INTERNAL_LIBRARY_FROM, | 2228 MessageKind.INTERNAL_LIBRARY_FROM, |
2198 "Internal library '#{resolvedUri}' is not accessible from " | 2229 "Internal library '#{resolvedUri}' is not accessible from " |
2199 "'#{importingUri}'."), | 2230 "'#{importingUri}'."), |
2200 | 2231 |
2201 MessageKind.INTERNAL_LIBRARY: | 2232 MessageKind.INTERNAL_LIBRARY: const MessageTemplate( |
2202 const MessageTemplate(MessageKind.INTERNAL_LIBRARY, | 2233 MessageKind.INTERNAL_LIBRARY, |
2203 "Internal library '#{resolvedUri}' is not accessible."), | 2234 "Internal library '#{resolvedUri}' is not accessible."), |
2204 | 2235 |
2205 MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS: | 2236 MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS: |
2206 const MessageTemplate( | 2237 const MessageTemplate( |
2207 MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS, | 2238 MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS, |
2208 "Js-interop class '#{cls}' cannot extend from the non js-interop " | 2239 "Js-interop class '#{cls}' cannot extend from the non js-interop " |
2209 "class '#{superclass}'.", | 2240 "class '#{superclass}'.", |
2210 howToFix: "Annotate the superclass with @JS.", | 2241 howToFix: "Annotate the superclass with @JS.", |
2211 examples: const [ | 2242 examples: const [ |
2212 """ | 2243 """ |
2213 import 'package:js/js.dart'; | 2244 import 'package:js/js.dart'; |
2214 | 2245 |
2215 class Foo { } | 2246 class Foo { } |
2216 | 2247 |
2217 @JS() | 2248 @JS() |
2218 class Bar extends Foo { } | 2249 class Bar extends Foo { } |
2219 | 2250 |
2220 main() { | 2251 main() { |
2221 new Bar(); | 2252 new Bar(); |
2222 } | 2253 } |
2223 """]), | 2254 """ |
| 2255 ]), |
2224 | 2256 |
2225 MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER: | 2257 MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER: const MessageTemplate( |
2226 const MessageTemplate( | |
2227 MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER, | 2258 MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER, |
2228 "Member '#{member}' in js-interop class '#{cls}' is not external.", | 2259 "Member '#{member}' in js-interop class '#{cls}' is not external.", |
2229 howToFix: "Mark all interop methods external", | 2260 howToFix: "Mark all interop methods external", |
2230 examples: const [ | 2261 examples: const [ |
2231 """ | 2262 """ |
2232 import 'package:js/js.dart'; | 2263 import 'package:js/js.dart'; |
2233 | 2264 |
2234 @JS() | 2265 @JS() |
2235 class Foo { | 2266 class Foo { |
2236 bar() {} | 2267 bar() {} |
2237 } | 2268 } |
2238 | 2269 |
2239 main() { | 2270 main() { |
2240 new Foo().bar(); | 2271 new Foo().bar(); |
2241 } | 2272 } |
2242 """]), | 2273 """ |
| 2274 ]), |
2243 | 2275 |
2244 MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS: | 2276 MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS: const MessageTemplate( |
2245 const MessageTemplate( | |
2246 MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS, | 2277 MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS, |
2247 "Js-interop method '#{method}' has named arguments but is not " | 2278 "Js-interop method '#{method}' has named arguments but is not " |
2248 "a factory constructor of an @anonymous @JS class.", | 2279 "a factory constructor of an @anonymous @JS class.", |
2249 howToFix: "Remove all named arguments from js-interop method or " | 2280 howToFix: "Remove all named arguments from js-interop method or " |
2250 "in the case of a factory constructor annotate the class " | 2281 "in the case of a factory constructor annotate the class " |
2251 "as @anonymous.", | 2282 "as @anonymous.", |
2252 examples: const [ | 2283 examples: const [ |
2253 """ | 2284 """ |
2254 import 'package:js/js.dart'; | 2285 import 'package:js/js.dart'; |
2255 | 2286 |
2256 @JS() | 2287 @JS() |
2257 class Foo { | 2288 class Foo { |
2258 external bar(foo, {baz}); | 2289 external bar(foo, {baz}); |
2259 } | 2290 } |
2260 | 2291 |
2261 main() { | 2292 main() { |
2262 new Foo().bar(4, baz: 5); | 2293 new Foo().bar(4, baz: 5); |
2263 } | 2294 } |
2264 """]), | 2295 """ |
2265 MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED: | 2296 ]), |
2266 const MessageTemplate( | 2297 MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED: const MessageTemplate( |
2267 MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED, | 2298 MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED, |
2268 "Js-interop does not support [] and []= operator methods.", | 2299 "Js-interop does not support [] and []= operator methods.", |
2269 howToFix: "Try replacing [] and []= operator methods with normal " | 2300 howToFix: "Try replacing [] and []= operator methods with normal " |
2270 "methods.", | 2301 "methods.", |
2271 examples: const [ | 2302 examples: const [ |
2272 """ | 2303 """ |
2273 import 'package:js/js.dart'; | 2304 import 'package:js/js.dart'; |
2274 | 2305 |
2275 @JS() | 2306 @JS() |
2276 class Foo { | 2307 class Foo { |
2277 external operator [](arg); | 2308 external operator [](arg); |
2278 } | 2309 } |
2279 | 2310 |
2280 main() { | 2311 main() { |
2281 new Foo()[0]; | 2312 new Foo()[0]; |
2282 } | 2313 } |
2283 """, """ | 2314 """, |
| 2315 """ |
2284 import 'package:js/js.dart'; | 2316 import 'package:js/js.dart'; |
2285 | 2317 |
2286 @JS() | 2318 @JS() |
2287 class Foo { | 2319 class Foo { |
2288 external operator []=(arg, value); | 2320 external operator []=(arg, value); |
2289 } | 2321 } |
2290 | 2322 |
2291 main() { | 2323 main() { |
2292 new Foo()[0] = 1; | 2324 new Foo()[0] = 1; |
2293 } | 2325 } |
2294 """]), | 2326 """ |
| 2327 ]), |
2295 | 2328 |
2296 MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS: | 2329 MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS: |
2297 const MessageTemplate( | 2330 const MessageTemplate( |
2298 MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS, | 2331 MessageKind |
2299 "Parameter '#{parameter}' in anonymous js-interop class '#{cls}' " | 2332 .JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS, |
2300 "object literal constructor is positional instead of named." | 2333 "Parameter '#{parameter}' in anonymous js-interop class '#{cls}' " |
2301 ".", | 2334 "object literal constructor is positional instead of named." |
2302 howToFix: "Make all arguments in external factory object literal " | 2335 ".", |
2303 "constructors named.", | 2336 howToFix: "Make all arguments in external factory object literal " |
2304 examples: const [ | 2337 "constructors named.", |
2305 """ | 2338 examples: const [ |
| 2339 """ |
2306 import 'package:js/js.dart'; | 2340 import 'package:js/js.dart'; |
2307 | 2341 |
2308 @anonymous | 2342 @anonymous |
2309 @JS() | 2343 @JS() |
2310 class Foo { | 2344 class Foo { |
2311 external factory Foo(foo, {baz}); | 2345 external factory Foo(foo, {baz}); |
2312 } | 2346 } |
2313 | 2347 |
2314 main() { | 2348 main() { |
2315 new Foo(5, baz: 5); | 2349 new Foo(5, baz: 5); |
2316 } | 2350 } |
2317 """]), | 2351 """ |
| 2352 ]), |
2318 | 2353 |
2319 MessageKind.LIBRARY_NOT_FOUND: | 2354 MessageKind.LIBRARY_NOT_FOUND: const MessageTemplate( |
2320 const MessageTemplate(MessageKind.LIBRARY_NOT_FOUND, | 2355 MessageKind.LIBRARY_NOT_FOUND, "Library not found '#{resolvedUri}'."), |
2321 "Library not found '#{resolvedUri}'."), | |
2322 | 2356 |
2323 MessageKind.LIBRARY_NOT_SUPPORTED: | 2357 MessageKind.LIBRARY_NOT_SUPPORTED: const MessageTemplate( |
2324 const MessageTemplate(MessageKind.LIBRARY_NOT_SUPPORTED, | 2358 MessageKind.LIBRARY_NOT_SUPPORTED, |
2325 "Library not supported '#{resolvedUri}'.", | 2359 "Library not supported '#{resolvedUri}'.", |
2326 howToFix: "Try removing the dependency or enabling support using " | 2360 howToFix: "Try removing the dependency or enabling support using " |
2327 "the '--categories' option.", | 2361 "the '--categories' option.", |
2328 examples: const [/* | 2362 examples: const [ |
| 2363 /* |
2329 """ | 2364 """ |
2330 import 'dart:io'; | 2365 import 'dart:io'; |
2331 main() {} | 2366 main() {} |
2332 """ | 2367 """ |
2333 */]), | 2368 */ |
2334 // TODO(johnniwinther): Enable example when message_kind_test.dart | 2369 ]), |
2335 // supports library loader callbacks. | 2370 // TODO(johnniwinther): Enable example when message_kind_test.dart |
| 2371 // supports library loader callbacks. |
2336 | 2372 |
2337 MessageKind.UNSUPPORTED_EQ_EQ_EQ: | 2373 MessageKind.UNSUPPORTED_EQ_EQ_EQ: const MessageTemplate( |
2338 const MessageTemplate(MessageKind.UNSUPPORTED_EQ_EQ_EQ, | 2374 MessageKind.UNSUPPORTED_EQ_EQ_EQ, |
2339 "'===' is not an operator. " | 2375 "'===' is not an operator. " |
2340 "Did you mean '#{lhs} == #{rhs}' or 'identical(#{lhs}, #{rhs})'?"), | 2376 "Did you mean '#{lhs} == #{rhs}' or 'identical(#{lhs}, #{rhs})'?"), |
2341 | 2377 |
2342 MessageKind.UNSUPPORTED_BANG_EQ_EQ: | 2378 MessageKind.UNSUPPORTED_BANG_EQ_EQ: const MessageTemplate( |
2343 const MessageTemplate(MessageKind.UNSUPPORTED_BANG_EQ_EQ, | 2379 MessageKind.UNSUPPORTED_BANG_EQ_EQ, |
2344 "'!==' is not an operator. " | 2380 "'!==' is not an operator. " |
2345 "Did you mean '#{lhs} != #{rhs}' or '!identical(#{lhs}, #{rhs})'?"), | 2381 "Did you mean '#{lhs} != #{rhs}' or '!identical(#{lhs}, #{rhs})'?"), |
2346 | 2382 |
2347 MessageKind.UNSUPPORTED_PREFIX_PLUS: | 2383 MessageKind.UNSUPPORTED_PREFIX_PLUS: const MessageTemplate( |
2348 const MessageTemplate(MessageKind.UNSUPPORTED_PREFIX_PLUS, | 2384 MessageKind.UNSUPPORTED_PREFIX_PLUS, "'+' is not a prefix operator. ", |
2349 "'+' is not a prefix operator. ", | |
2350 howToFix: "Try removing '+'.", | 2385 howToFix: "Try removing '+'.", |
2351 examples: const [ | 2386 examples: const [ |
2352 "main() => +2; // No longer a valid way to write '2'" | 2387 "main() => +2; // No longer a valid way to write '2'" |
2353 ]), | 2388 ]), |
2354 | 2389 |
2355 MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX: | 2390 MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX: const MessageTemplate( |
2356 const MessageTemplate(MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX, | 2391 MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX, |
2357 "'typedef' not allowed here. ", | 2392 "'typedef' not allowed here. ", |
2358 howToFix: "Try replacing 'typedef' with 'class'.", | 2393 howToFix: "Try replacing 'typedef' with 'class'.", |
2359 examples: const [ | 2394 examples: const [ |
2360 """ | 2395 """ |
2361 class B { } | 2396 class B { } |
2362 class M1 { } | 2397 class M1 { } |
2363 typedef C = B with M1; // Need to replace 'typedef' with 'class'. | 2398 typedef C = B with M1; // Need to replace 'typedef' with 'class'. |
2364 main() { new C(); } | 2399 main() { new C(); } |
2365 """]), | 2400 """ |
| 2401 ]), |
2366 | 2402 |
2367 MessageKind.MIRRORS_EXPECTED_STRING: | 2403 MessageKind.MIRRORS_EXPECTED_STRING: const MessageTemplate( |
2368 const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING, | 2404 MessageKind.MIRRORS_EXPECTED_STRING, |
2369 "Can't use '#{name}' here because it's an instance of '#{type}' " | 2405 "Can't use '#{name}' here because it's an instance of '#{type}' " |
2370 "and a 'String' value is expected.", | 2406 "and a 'String' value is expected.", |
2371 howToFix: "Did you forget to add quotes?", | 2407 howToFix: "Did you forget to add quotes?", |
2372 examples: const [ | 2408 examples: const [ |
2373 """ | 2409 """ |
2374 // 'Foo' is a type literal, not a string. | 2410 // 'Foo' is a type literal, not a string. |
2375 @MirrorsUsed(symbols: const [Foo]) | 2411 @MirrorsUsed(symbols: const [Foo]) |
2376 import 'dart:mirrors'; | 2412 import 'dart:mirrors'; |
2377 | 2413 |
2378 class Foo {} | 2414 class Foo {} |
2379 | 2415 |
2380 main() {} | 2416 main() {} |
2381 """]), | 2417 """ |
| 2418 ]), |
2382 | 2419 |
2383 MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE: | 2420 MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE: const MessageTemplate( |
2384 const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE, | 2421 MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE, |
2385 "Can't use '#{name}' here because it's an instance of '#{type}' " | 2422 "Can't use '#{name}' here because it's an instance of '#{type}' " |
2386 "and a 'String' or 'Type' value is expected.", | 2423 "and a 'String' or 'Type' value is expected.", |
2387 howToFix: "Did you forget to add quotes?", | 2424 howToFix: "Did you forget to add quotes?", |
2388 examples: const [ | 2425 examples: const [ |
2389 """ | 2426 """ |
2390 // 'main' is a method, not a class. | 2427 // 'main' is a method, not a class. |
2391 @MirrorsUsed(targets: const [main]) | 2428 @MirrorsUsed(targets: const [main]) |
2392 import 'dart:mirrors'; | 2429 import 'dart:mirrors'; |
2393 | 2430 |
2394 main() {} | 2431 main() {} |
2395 """]), | 2432 """ |
| 2433 ]), |
2396 | 2434 |
2397 MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST: | 2435 MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST: const MessageTemplate( |
2398 const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST, | 2436 MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST, |
2399 "Can't use '#{name}' here because it's an instance of '#{type}' " | 2437 "Can't use '#{name}' here because it's an instance of '#{type}' " |
2400 "and a 'String' or 'List' value is expected.", | 2438 "and a 'String' or 'List' value is expected.", |
2401 howToFix: "Did you forget to add quotes?", | 2439 howToFix: "Did you forget to add quotes?", |
2402 examples: const [ | 2440 examples: const [ |
2403 """ | 2441 """ |
2404 // 'Foo' is not a string. | 2442 // 'Foo' is not a string. |
2405 @MirrorsUsed(symbols: Foo) | 2443 @MirrorsUsed(symbols: Foo) |
2406 import 'dart:mirrors'; | 2444 import 'dart:mirrors'; |
2407 | 2445 |
2408 class Foo {} | 2446 class Foo {} |
2409 | 2447 |
2410 main() {} | 2448 main() {} |
2411 """]), | 2449 """ |
| 2450 ]), |
2412 | 2451 |
2413 MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST: | 2452 MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST: const MessageTemplate( |
2414 const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST, | 2453 MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST, |
2415 "Can't use '#{name}' here because it's an instance of '#{type}' " | 2454 "Can't use '#{name}' here because it's an instance of '#{type}' " |
2416 "but a 'String', 'Type', or 'List' value is expected.", | 2455 "but a 'String', 'Type', or 'List' value is expected.", |
2417 howToFix: "Did you forget to add quotes?", | 2456 howToFix: "Did you forget to add quotes?", |
2418 examples: const [ | 2457 examples: const [ |
2419 """ | 2458 """ |
2420 // '1' is not a string. | 2459 // '1' is not a string. |
2421 @MirrorsUsed(targets: 1) | 2460 @MirrorsUsed(targets: 1) |
2422 import 'dart:mirrors'; | 2461 import 'dart:mirrors'; |
2423 | 2462 |
2424 main() {} | 2463 main() {} |
2425 """]), | 2464 """ |
| 2465 ]), |
2426 | 2466 |
2427 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY: | 2467 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY: const MessageTempla
te( |
2428 const MessageTemplate( | |
2429 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY, | 2468 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY, |
2430 "Can't find '#{name}' in the current library.", | 2469 "Can't find '#{name}' in the current library.", |
2431 // TODO(ahe): The closest identifiers in edit distance would be nice. | 2470 // TODO(ahe): The closest identifiers in edit distance would be nice. |
2432 howToFix: "Did you forget to add an import?", | 2471 howToFix: "Did you forget to add an import?", |
2433 examples: const [ | 2472 examples: const [ |
2434 """ | 2473 """ |
2435 // 'window' is not in scope because dart:html isn't imported. | 2474 // 'window' is not in scope because dart:html isn't imported. |
2436 @MirrorsUsed(targets: 'window') | 2475 @MirrorsUsed(targets: 'window') |
2437 import 'dart:mirrors'; | 2476 import 'dart:mirrors'; |
2438 | 2477 |
2439 main() {} | 2478 main() {} |
2440 """]), | 2479 """ |
| 2480 ]), |
2441 | 2481 |
2442 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY: | 2482 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY: const MessageTemplate( |
2443 const MessageTemplate(MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY, | 2483 MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY, |
2444 "Can't find '#{name}' in the library '#{library}'.", | 2484 "Can't find '#{name}' in the library '#{library}'.", |
2445 // TODO(ahe): The closest identifiers in edit distance would be nice. | 2485 // TODO(ahe): The closest identifiers in edit distance would be nice. |
2446 howToFix: "Is '#{name}' spelled right?", | 2486 howToFix: "Is '#{name}' spelled right?", |
2447 examples: const [ | 2487 examples: const [ |
2448 """ | 2488 """ |
2449 // 'List' is misspelled. | 2489 // 'List' is misspelled. |
2450 @MirrorsUsed(targets: 'dart.core.Lsit') | 2490 @MirrorsUsed(targets: 'dart.core.Lsit') |
2451 import 'dart:mirrors'; | 2491 import 'dart:mirrors'; |
2452 | 2492 |
2453 main() {} | 2493 main() {} |
2454 """]), | 2494 """ |
| 2495 ]), |
2455 | 2496 |
2456 MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT: | 2497 MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT: const MessageTemplate( |
2457 const MessageTemplate(MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT, | 2498 MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT, |
2458 "Can't find '#{name}' in '#{element}'.", | 2499 "Can't find '#{name}' in '#{element}'.", |
2459 // TODO(ahe): The closest identifiers in edit distance would be nice. | 2500 // TODO(ahe): The closest identifiers in edit distance would be nice. |
2460 howToFix: "Is '#{name}' spelled right?", | 2501 howToFix: "Is '#{name}' spelled right?", |
2461 examples: const [ | 2502 examples: const [ |
2462 """ | 2503 """ |
2463 // 'addAll' is misspelled. | 2504 // 'addAll' is misspelled. |
2464 @MirrorsUsed(targets: 'dart.core.List.addAl') | 2505 @MirrorsUsed(targets: 'dart.core.List.addAl') |
2465 import 'dart:mirrors'; | 2506 import 'dart:mirrors'; |
2466 | 2507 |
2467 main() {} | 2508 main() {} |
2468 """]), | 2509 """ |
| 2510 ]), |
2469 | 2511 |
2470 MessageKind.INVALID_URI: | 2512 MessageKind.INVALID_URI: const MessageTemplate( |
2471 const MessageTemplate(MessageKind.INVALID_URI, | 2513 MessageKind.INVALID_URI, "'#{uri}' is not a valid URI.", |
2472 "'#{uri}' is not a valid URI.", | |
2473 howToFix: DONT_KNOW_HOW_TO_FIX, | 2514 howToFix: DONT_KNOW_HOW_TO_FIX, |
2474 examples: const [ | 2515 examples: const [ |
2475 """ | 2516 """ |
2476 // can't have a '[' in a URI | 2517 // can't have a '[' in a URI |
2477 import '../../Udyn[mic ils/expect.dart'; | 2518 import '../../Udyn[mic ils/expect.dart'; |
2478 | 2519 |
2479 main() {} | 2520 main() {} |
2480 """]), | 2521 """ |
| 2522 ]), |
2481 | 2523 |
2482 MessageKind.INVALID_PACKAGE_CONFIG: | 2524 MessageKind.INVALID_PACKAGE_CONFIG: const MessageTemplate( |
2483 const MessageTemplate(MessageKind.INVALID_PACKAGE_CONFIG, | 2525 MessageKind.INVALID_PACKAGE_CONFIG, |
2484 """Package config file '#{uri}' is invalid. | 2526 """Package config file '#{uri}' is invalid. |
2485 #{exception}""", | 2527 #{exception}""", |
2486 howToFix: DONT_KNOW_HOW_TO_FIX | 2528 howToFix: DONT_KNOW_HOW_TO_FIX), |
2487 ), | |
2488 | 2529 |
2489 MessageKind.INVALID_PACKAGE_URI: | 2530 MessageKind.INVALID_PACKAGE_URI: const MessageTemplate( |
2490 const MessageTemplate(MessageKind.INVALID_PACKAGE_URI, | 2531 MessageKind.INVALID_PACKAGE_URI, |
2491 "'#{uri}' is not a valid package URI (#{exception}).", | 2532 "'#{uri}' is not a valid package URI (#{exception}).", |
2492 howToFix: DONT_KNOW_HOW_TO_FIX, | 2533 howToFix: DONT_KNOW_HOW_TO_FIX, |
2493 examples: const [ | 2534 examples: const [ |
2494 """ | 2535 """ |
2495 // can't have a 'top level' package URI | 2536 // can't have a 'top level' package URI |
2496 import 'package:foo.dart'; | 2537 import 'package:foo.dart'; |
2497 | 2538 |
2498 main() {} | 2539 main() {} |
2499 """, """ | 2540 """, |
| 2541 """ |
2500 // can't have 2 slashes | 2542 // can't have 2 slashes |
2501 import 'package://foo/foo.dart'; | 2543 import 'package://foo/foo.dart'; |
2502 | 2544 |
2503 main() {} | 2545 main() {} |
2504 """, """ | 2546 """, |
| 2547 """ |
2505 // package name must be valid | 2548 // package name must be valid |
2506 import 'package:not\valid/foo.dart'; | 2549 import 'package:not\valid/foo.dart'; |
2507 | 2550 |
2508 main() {} | 2551 main() {} |
2509 """]), | 2552 """ |
| 2553 ]), |
2510 | 2554 |
2511 MessageKind.READ_SCRIPT_ERROR: | 2555 MessageKind.READ_SCRIPT_ERROR: const MessageTemplate( |
2512 const MessageTemplate(MessageKind.READ_SCRIPT_ERROR, | 2556 MessageKind.READ_SCRIPT_ERROR, "Can't read '#{uri}' (#{exception}).", |
2513 "Can't read '#{uri}' (#{exception}).", | |
2514 // Don't know how to fix since the underlying error is unknown. | 2557 // Don't know how to fix since the underlying error is unknown. |
2515 howToFix: DONT_KNOW_HOW_TO_FIX, | 2558 howToFix: DONT_KNOW_HOW_TO_FIX, |
2516 examples: const [ | 2559 examples: const [ |
2517 """ | 2560 """ |
2518 // 'foo.dart' does not exist. | 2561 // 'foo.dart' does not exist. |
2519 import 'foo.dart'; | 2562 import 'foo.dart'; |
2520 | 2563 |
2521 main() {} | 2564 main() {} |
2522 """]), | 2565 """ |
| 2566 ]), |
2523 | 2567 |
2524 MessageKind.READ_SELF_ERROR: | 2568 MessageKind.READ_SELF_ERROR: |
2525 const MessageTemplate(MessageKind.READ_SELF_ERROR, | 2569 const MessageTemplate(MessageKind.READ_SELF_ERROR, "#{exception}", |
2526 "#{exception}", | 2570 // Don't know how to fix since the underlying error is unknown. |
2527 // Don't know how to fix since the underlying error is unknown. | 2571 howToFix: DONT_KNOW_HOW_TO_FIX), |
2528 howToFix: DONT_KNOW_HOW_TO_FIX), | |
2529 | 2572 |
2530 MessageKind.ABSTRACT_CLASS_INSTANTIATION: | 2573 MessageKind.ABSTRACT_CLASS_INSTANTIATION: const MessageTemplate( |
2531 const MessageTemplate(MessageKind.ABSTRACT_CLASS_INSTANTIATION, | 2574 MessageKind.ABSTRACT_CLASS_INSTANTIATION, |
2532 "Can't instantiate abstract class.", | 2575 "Can't instantiate abstract class.", |
2533 howToFix: DONT_KNOW_HOW_TO_FIX, | 2576 howToFix: DONT_KNOW_HOW_TO_FIX, |
2534 examples: const ["abstract class A {} main() { new A(); }"]), | 2577 examples: const ["abstract class A {} main() { new A(); }"]), |
2535 | 2578 |
2536 MessageKind.BODY_EXPECTED: | 2579 MessageKind.BODY_EXPECTED: const MessageTemplate( |
2537 const MessageTemplate(MessageKind.BODY_EXPECTED, | 2580 MessageKind.BODY_EXPECTED, "Expected a function body or '=>'.", |
2538 "Expected a function body or '=>'.", | |
2539 // TODO(ahe): In some scenarios, we can suggest removing the 'static' | 2581 // TODO(ahe): In some scenarios, we can suggest removing the 'static' |
2540 // keyword. | 2582 // keyword. |
2541 howToFix: "Try adding {}.", | 2583 howToFix: "Try adding {}.", |
2542 examples: const [ | 2584 examples: const ["main();"]), |
2543 "main();"]), | |
2544 | 2585 |
2545 MessageKind.MIRROR_BLOAT: | 2586 MessageKind.MIRROR_BLOAT: const MessageTemplate( |
2546 const MessageTemplate(MessageKind.MIRROR_BLOAT, | 2587 MessageKind.MIRROR_BLOAT, |
2547 "#{count} methods retained for use by dart:mirrors out of #{total}" | 2588 "#{count} methods retained for use by dart:mirrors out of #{total}" |
2548 " total methods (#{percentage}%)."), | 2589 " total methods (#{percentage}%)."), |
2549 | 2590 |
2550 MessageKind.MIRROR_IMPORT: | 2591 MessageKind.MIRROR_IMPORT: const MessageTemplate( |
2551 const MessageTemplate(MessageKind.MIRROR_IMPORT, | 2592 MessageKind.MIRROR_IMPORT, "Import of 'dart:mirrors'."), |
2552 "Import of 'dart:mirrors'."), | |
2553 | 2593 |
2554 MessageKind.MIRROR_IMPORT_NO_USAGE: | 2594 MessageKind.MIRROR_IMPORT_NO_USAGE: const MessageTemplate( |
2555 const MessageTemplate(MessageKind.MIRROR_IMPORT_NO_USAGE, | 2595 MessageKind.MIRROR_IMPORT_NO_USAGE, |
2556 "This import is not annotated with @MirrorsUsed, which may lead to " | 2596 "This import is not annotated with @MirrorsUsed, which may lead to " |
2557 "unnecessarily large generated code.", | 2597 "unnecessarily large generated code.", |
2558 howToFix: | 2598 howToFix: "Try adding '@MirrorsUsed(...)' as described at " |
2559 "Try adding '@MirrorsUsed(...)' as described at " | |
2560 "https://goo.gl/Akrrog."), | 2599 "https://goo.gl/Akrrog."), |
2561 | 2600 |
2562 MessageKind.JS_PLACEHOLDER_CAPTURE: | 2601 MessageKind.JS_PLACEHOLDER_CAPTURE: const MessageTemplate( |
2563 const MessageTemplate( | 2602 MessageKind.JS_PLACEHOLDER_CAPTURE, |
2564 MessageKind.JS_PLACEHOLDER_CAPTURE, | 2603 "JS code must not use '#' placeholders inside functions.", |
2565 "JS code must not use '#' placeholders inside functions.", | 2604 howToFix: |
2566 howToFix: | 2605 "Use an immediately called JavaScript function to capture the" |
2567 "Use an immediately called JavaScript function to capture the" | 2606 " the placeholder values as JavaScript function parameters."), |
2568 " the placeholder values as JavaScript function parameters."), | |
2569 | 2607 |
2570 MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT: | 2608 MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT: |
2571 const MessageTemplate( | 2609 const MessageTemplate( |
2572 MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT, | 2610 MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT, |
2573 "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant."), | 2611 "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant.")
, |
2574 | 2612 |
2575 MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD: | 2613 MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD: const MessageTemplate( |
2576 const MessageTemplate(MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD, | 2614 MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD, |
2577 "'#{keyword}' is a reserved word and can't be used here.", | 2615 "'#{keyword}' is a reserved word and can't be used here.", |
2578 howToFix: "Try using a different name.", | 2616 howToFix: "Try using a different name.", |
2579 examples: const ["do() {} main() {}"]), | 2617 examples: const ["do() {} main() {}"]), |
2580 | 2618 |
2581 MessageKind. NAMED_FUNCTION_EXPRESSION: | 2619 MessageKind.NAMED_FUNCTION_EXPRESSION: const MessageTemplate( |
2582 const MessageTemplate(MessageKind.NAMED_FUNCTION_EXPRESSION, | 2620 MessageKind.NAMED_FUNCTION_EXPRESSION, |
2583 "Function expression '#{name}' cannot be named.", | 2621 "Function expression '#{name}' cannot be named.", |
2584 howToFix: "Try removing the name.", | 2622 howToFix: "Try removing the name.", |
2585 examples: const ["main() { var f = func() {}; }"]), | 2623 examples: const ["main() { var f = func() {}; }"]), |
2586 | 2624 |
2587 MessageKind.UNUSED_METHOD: | 2625 MessageKind.UNUSED_METHOD: const MessageTemplate( |
2588 const MessageTemplate(MessageKind.UNUSED_METHOD, | 2626 MessageKind.UNUSED_METHOD, "The method '#{name}' is never called.", |
2589 "The method '#{name}' is never called.", | |
2590 howToFix: "Consider deleting it.", | 2627 howToFix: "Consider deleting it.", |
2591 examples: const ["deadCode() {} main() {}"]), | 2628 examples: const ["deadCode() {} main() {}"]), |
2592 | 2629 |
2593 MessageKind.UNUSED_CLASS: | 2630 MessageKind.UNUSED_CLASS: const MessageTemplate( |
2594 const MessageTemplate(MessageKind.UNUSED_CLASS, | 2631 MessageKind.UNUSED_CLASS, "The class '#{name}' is never used.", |
2595 "The class '#{name}' is never used.", | |
2596 howToFix: "Consider deleting it.", | 2632 howToFix: "Consider deleting it.", |
2597 examples: const ["class DeadCode {} main() {}"]), | 2633 examples: const ["class DeadCode {} main() {}"]), |
2598 | 2634 |
2599 MessageKind.UNUSED_TYPEDEF: | 2635 MessageKind.UNUSED_TYPEDEF: const MessageTemplate( |
2600 const MessageTemplate(MessageKind.UNUSED_TYPEDEF, | 2636 MessageKind.UNUSED_TYPEDEF, "The typedef '#{name}' is never used.", |
2601 "The typedef '#{name}' is never used.", | |
2602 howToFix: "Consider deleting it.", | 2637 howToFix: "Consider deleting it.", |
2603 examples: const ["typedef DeadCode(); main() {}"]), | 2638 examples: const ["typedef DeadCode(); main() {}"]), |
2604 | 2639 |
2605 MessageKind.ABSTRACT_METHOD: | 2640 MessageKind.ABSTRACT_METHOD: const MessageTemplate( |
2606 const MessageTemplate(MessageKind.ABSTRACT_METHOD, | 2641 MessageKind.ABSTRACT_METHOD, |
2607 "The method '#{name}' has no implementation in " | 2642 "The method '#{name}' has no implementation in " |
2608 "class '#{class}'.", | 2643 "class '#{class}'.", |
2609 howToFix: "Try adding a body to '#{name}' or declaring " | 2644 howToFix: "Try adding a body to '#{name}' or declaring " |
2610 "'#{class}' to be 'abstract'.", | 2645 "'#{class}' to be 'abstract'.", |
2611 examples: const [""" | 2646 examples: const [ |
| 2647 """ |
2612 class Class { | 2648 class Class { |
2613 method(); | 2649 method(); |
2614 } | 2650 } |
2615 main() => new Class().method(); | 2651 main() => new Class().method(); |
2616 """]), | 2652 """ |
| 2653 ]), |
2617 | 2654 |
2618 MessageKind.ABSTRACT_GETTER: | 2655 MessageKind.ABSTRACT_GETTER: const MessageTemplate( |
2619 const MessageTemplate(MessageKind.ABSTRACT_GETTER, | 2656 MessageKind.ABSTRACT_GETTER, |
2620 "The getter '#{name}' has no implementation in " | 2657 "The getter '#{name}' has no implementation in " |
2621 "class '#{class}'.", | 2658 "class '#{class}'.", |
2622 howToFix: "Try adding a body to '#{name}' or declaring " | 2659 howToFix: "Try adding a body to '#{name}' or declaring " |
2623 "'#{class}' to be 'abstract'.", | 2660 "'#{class}' to be 'abstract'.", |
2624 examples: const [""" | 2661 examples: const [ |
| 2662 """ |
2625 class Class { | 2663 class Class { |
2626 get getter; | 2664 get getter; |
2627 } | 2665 } |
2628 main() => new Class(); | 2666 main() => new Class(); |
2629 """]), | 2667 """ |
| 2668 ]), |
2630 | 2669 |
2631 MessageKind.ABSTRACT_SETTER: | 2670 MessageKind.ABSTRACT_SETTER: const MessageTemplate( |
2632 const MessageTemplate(MessageKind.ABSTRACT_SETTER, | 2671 MessageKind.ABSTRACT_SETTER, |
2633 "The setter '#{name}' has no implementation in " | 2672 "The setter '#{name}' has no implementation in " |
2634 "class '#{class}'.", | 2673 "class '#{class}'.", |
2635 howToFix: "Try adding a body to '#{name}' or declaring " | 2674 howToFix: "Try adding a body to '#{name}' or declaring " |
2636 "'#{class}' to be 'abstract'.", | 2675 "'#{class}' to be 'abstract'.", |
2637 examples: const [""" | 2676 examples: const [ |
| 2677 """ |
2638 class Class { | 2678 class Class { |
2639 set setter(_); | 2679 set setter(_); |
2640 } | 2680 } |
2641 main() => new Class(); | 2681 main() => new Class(); |
2642 """]), | 2682 """ |
| 2683 ]), |
2643 | 2684 |
2644 MessageKind.INHERIT_GETTER_AND_METHOD: | 2685 MessageKind.INHERIT_GETTER_AND_METHOD: const MessageTemplate( |
2645 const MessageTemplate(MessageKind.INHERIT_GETTER_AND_METHOD, | 2686 MessageKind.INHERIT_GETTER_AND_METHOD, |
2646 "The class '#{class}' can't inherit both getters and methods " | 2687 "The class '#{class}' can't inherit both getters and methods " |
2647 "by the named '#{name}'.", | 2688 "by the named '#{name}'.", |
2648 howToFix: DONT_KNOW_HOW_TO_FIX, | 2689 howToFix: DONT_KNOW_HOW_TO_FIX, |
2649 examples: const [""" | 2690 examples: const [ |
| 2691 """ |
2650 class A { | 2692 class A { |
2651 get member => null; | 2693 get member => null; |
2652 } | 2694 } |
2653 class B { | 2695 class B { |
2654 member() {} | 2696 member() {} |
2655 } | 2697 } |
2656 class Class implements A, B { | 2698 class Class implements A, B { |
2657 } | 2699 } |
2658 main() => new Class(); | 2700 main() => new Class(); |
2659 """]), | 2701 """ |
| 2702 ]), |
2660 | 2703 |
2661 MessageKind.INHERITED_METHOD: | 2704 MessageKind.INHERITED_METHOD: const MessageTemplate( |
2662 const MessageTemplate(MessageKind.INHERITED_METHOD, | 2705 MessageKind.INHERITED_METHOD, |
2663 "The inherited method '#{name}' is declared here in class " | 2706 "The inherited method '#{name}' is declared here in class " |
2664 "'#{class}'."), | 2707 "'#{class}'."), |
2665 | 2708 |
2666 MessageKind.INHERITED_EXPLICIT_GETTER: | 2709 MessageKind.INHERITED_EXPLICIT_GETTER: const MessageTemplate( |
2667 const MessageTemplate(MessageKind.INHERITED_EXPLICIT_GETTER, | 2710 MessageKind.INHERITED_EXPLICIT_GETTER, |
2668 "The inherited getter '#{name}' is declared here in class " | 2711 "The inherited getter '#{name}' is declared here in class " |
2669 "'#{class}'."), | 2712 "'#{class}'."), |
2670 | 2713 |
2671 MessageKind.INHERITED_IMPLICIT_GETTER: | 2714 MessageKind.INHERITED_IMPLICIT_GETTER: const MessageTemplate( |
2672 const MessageTemplate(MessageKind.INHERITED_IMPLICIT_GETTER, | 2715 MessageKind.INHERITED_IMPLICIT_GETTER, |
2673 "The inherited getter '#{name}' is implicitly declared by this " | 2716 "The inherited getter '#{name}' is implicitly declared by this " |
2674 "field in class '#{class}'."), | 2717 "field in class '#{class}'."), |
2675 | 2718 |
2676 MessageKind.UNIMPLEMENTED_METHOD_ONE: | 2719 MessageKind.UNIMPLEMENTED_METHOD_ONE: const MessageTemplate( |
2677 const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD_ONE, | 2720 MessageKind.UNIMPLEMENTED_METHOD_ONE, |
2678 "'#{class}' doesn't implement '#{method}' " | 2721 "'#{class}' doesn't implement '#{method}' " |
2679 "declared in '#{declarer}'.", | 2722 "declared in '#{declarer}'.", |
2680 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2723 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2681 "'#{class}' to be 'abstract'.", | 2724 "'#{class}' to be 'abstract'.", |
2682 examples: const [""" | 2725 examples: const [ |
| 2726 """ |
2683 abstract class I { | 2727 abstract class I { |
2684 m(); | 2728 m(); |
2685 } | 2729 } |
2686 class C implements I {} | 2730 class C implements I {} |
2687 main() => new C(); | 2731 main() => new C(); |
2688 """, """ | 2732 """, |
| 2733 """ |
2689 abstract class I { | 2734 abstract class I { |
2690 m(); | 2735 m(); |
2691 } | 2736 } |
2692 class C extends I {} | 2737 class C extends I {} |
2693 main() => new C(); | 2738 main() => new C(); |
2694 """]), | 2739 """ |
| 2740 ]), |
2695 | 2741 |
2696 MessageKind.UNIMPLEMENTED_METHOD: | 2742 MessageKind.UNIMPLEMENTED_METHOD: const MessageTemplate( |
2697 const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD, | 2743 MessageKind.UNIMPLEMENTED_METHOD, |
2698 "'#{class}' doesn't implement '#{method}'.", | 2744 "'#{class}' doesn't implement '#{method}'.", |
2699 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2745 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2700 "'#{class}' to be 'abstract'.", | 2746 "'#{class}' to be 'abstract'.", |
2701 examples: const [""" | 2747 examples: const [ |
| 2748 """ |
2702 abstract class I { | 2749 abstract class I { |
2703 m(); | 2750 m(); |
2704 } | 2751 } |
2705 | 2752 |
2706 abstract class J { | 2753 abstract class J { |
2707 m(); | 2754 m(); |
2708 } | 2755 } |
2709 | 2756 |
2710 class C implements I, J {} | 2757 class C implements I, J {} |
2711 | 2758 |
2712 main() { | 2759 main() { |
2713 new C(); | 2760 new C(); |
2714 } | 2761 } |
2715 """, """ | 2762 """, |
| 2763 """ |
2716 abstract class I { | 2764 abstract class I { |
2717 m(); | 2765 m(); |
2718 } | 2766 } |
2719 | 2767 |
2720 abstract class J { | 2768 abstract class J { |
2721 m(); | 2769 m(); |
2722 } | 2770 } |
2723 | 2771 |
2724 class C extends I implements J {} | 2772 class C extends I implements J {} |
2725 | 2773 |
2726 main() { | 2774 main() { |
2727 new C(); | 2775 new C(); |
2728 } | 2776 } |
2729 """]), | 2777 """ |
| 2778 ]), |
2730 | 2779 |
2731 MessageKind.UNIMPLEMENTED_METHOD_CONT: | 2780 MessageKind.UNIMPLEMENTED_METHOD_CONT: const MessageTemplate( |
2732 const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD_CONT, | 2781 MessageKind.UNIMPLEMENTED_METHOD_CONT, |
2733 "The method '#{name}' is declared here in class '#{class}'."), | 2782 "The method '#{name}' is declared here in class '#{class}'."), |
2734 | 2783 |
2735 MessageKind.UNIMPLEMENTED_SETTER_ONE: | 2784 MessageKind.UNIMPLEMENTED_SETTER_ONE: const MessageTemplate( |
2736 const MessageTemplate(MessageKind.UNIMPLEMENTED_SETTER_ONE, | 2785 MessageKind.UNIMPLEMENTED_SETTER_ONE, |
2737 "'#{class}' doesn't implement the setter '#{name}' " | 2786 "'#{class}' doesn't implement the setter '#{name}' " |
2738 "declared in '#{declarer}'.", | 2787 "declared in '#{declarer}'.", |
2739 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2788 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2740 "'#{class}' to be 'abstract'.", | 2789 "'#{class}' to be 'abstract'.", |
2741 examples: const [""" | 2790 examples: const [ |
| 2791 """ |
2742 abstract class I { | 2792 abstract class I { |
2743 set m(_); | 2793 set m(_); |
2744 } | 2794 } |
2745 class C implements I {} | 2795 class C implements I {} |
2746 class D implements I { | 2796 class D implements I { |
2747 set m(_) {} | 2797 set m(_) {} |
2748 } | 2798 } |
2749 main() { | 2799 main() { |
2750 new D().m = 0; | 2800 new D().m = 0; |
2751 new C(); | 2801 new C(); |
2752 } | 2802 } |
2753 """]), | 2803 """ |
| 2804 ]), |
2754 | 2805 |
2755 MessageKind.UNIMPLEMENTED_SETTER: | 2806 MessageKind.UNIMPLEMENTED_SETTER: const MessageTemplate( |
2756 const MessageTemplate(MessageKind.UNIMPLEMENTED_SETTER, | 2807 MessageKind.UNIMPLEMENTED_SETTER, |
2757 "'#{class}' doesn't implement the setter '#{name}'.", | 2808 "'#{class}' doesn't implement the setter '#{name}'.", |
2758 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2809 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2759 "'#{class}' to be 'abstract'.", | 2810 "'#{class}' to be 'abstract'.", |
2760 examples: const [""" | 2811 examples: const [ |
| 2812 """ |
2761 abstract class I { | 2813 abstract class I { |
2762 set m(_); | 2814 set m(_); |
2763 } | 2815 } |
2764 abstract class J { | 2816 abstract class J { |
2765 set m(_); | 2817 set m(_); |
2766 } | 2818 } |
2767 class C implements I, J {} | 2819 class C implements I, J {} |
2768 main() => new C(); | 2820 main() => new C(); |
2769 """, """ | 2821 """, |
| 2822 """ |
2770 abstract class I { | 2823 abstract class I { |
2771 set m(_); | 2824 set m(_); |
2772 } | 2825 } |
2773 abstract class J { | 2826 abstract class J { |
2774 set m(_); | 2827 set m(_); |
2775 } | 2828 } |
2776 class C extends I implements J {} | 2829 class C extends I implements J {} |
2777 main() => new C(); | 2830 main() => new C(); |
2778 """]), | 2831 """ |
| 2832 ]), |
2779 | 2833 |
2780 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER: | 2834 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER: const MessageTemplate( |
2781 const MessageTemplate(MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, | 2835 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, |
2782 "The setter '#{name}' is declared here in class '#{class}'."), | 2836 "The setter '#{name}' is declared here in class '#{class}'."), |
2783 | 2837 |
2784 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER: | 2838 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER: const MessageTemplate( |
2785 const MessageTemplate(MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER, | 2839 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER, |
2786 "The setter '#{name}' is implicitly declared by this field " | 2840 "The setter '#{name}' is implicitly declared by this field " |
2787 "in class '#{class}'."), | 2841 "in class '#{class}'."), |
2788 | 2842 |
2789 MessageKind.UNIMPLEMENTED_GETTER_ONE: | 2843 MessageKind.UNIMPLEMENTED_GETTER_ONE: const MessageTemplate( |
2790 const MessageTemplate(MessageKind.UNIMPLEMENTED_GETTER_ONE, | 2844 MessageKind.UNIMPLEMENTED_GETTER_ONE, |
2791 "'#{class}' doesn't implement the getter '#{name}' " | 2845 "'#{class}' doesn't implement the getter '#{name}' " |
2792 "declared in '#{declarer}'.", | 2846 "declared in '#{declarer}'.", |
2793 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2847 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2794 "'#{class}' to be 'abstract'.", | 2848 "'#{class}' to be 'abstract'.", |
2795 examples: const [""" | 2849 examples: const [ |
| 2850 """ |
2796 abstract class I { | 2851 abstract class I { |
2797 get m; | 2852 get m; |
2798 } | 2853 } |
2799 class C implements I {} | 2854 class C implements I {} |
2800 main() => new C(); | 2855 main() => new C(); |
2801 """, """ | 2856 """, |
| 2857 """ |
2802 abstract class I { | 2858 abstract class I { |
2803 get m; | 2859 get m; |
2804 } | 2860 } |
2805 class C extends I {} | 2861 class C extends I {} |
2806 main() => new C(); | 2862 main() => new C(); |
2807 """]), | 2863 """ |
| 2864 ]), |
2808 | 2865 |
2809 MessageKind.UNIMPLEMENTED_GETTER: | 2866 MessageKind.UNIMPLEMENTED_GETTER: const MessageTemplate( |
2810 const MessageTemplate(MessageKind.UNIMPLEMENTED_GETTER, | 2867 MessageKind.UNIMPLEMENTED_GETTER, |
2811 "'#{class}' doesn't implement the getter '#{name}'.", | 2868 "'#{class}' doesn't implement the getter '#{name}'.", |
2812 howToFix: "Try adding an implementation of '#{name}' or declaring " | 2869 howToFix: "Try adding an implementation of '#{name}' or declaring " |
2813 "'#{class}' to be 'abstract'.", | 2870 "'#{class}' to be 'abstract'.", |
2814 examples: const [""" | 2871 examples: const [ |
| 2872 """ |
2815 abstract class I { | 2873 abstract class I { |
2816 get m; | 2874 get m; |
2817 } | 2875 } |
2818 abstract class J { | 2876 abstract class J { |
2819 get m; | 2877 get m; |
2820 } | 2878 } |
2821 class C implements I, J {} | 2879 class C implements I, J {} |
2822 main() => new C(); | 2880 main() => new C(); |
2823 """, """ | 2881 """, |
| 2882 """ |
2824 abstract class I { | 2883 abstract class I { |
2825 get m; | 2884 get m; |
2826 } | 2885 } |
2827 abstract class J { | 2886 abstract class J { |
2828 get m; | 2887 get m; |
2829 } | 2888 } |
2830 class C extends I implements J {} | 2889 class C extends I implements J {} |
2831 main() => new C(); | 2890 main() => new C(); |
2832 """]), | 2891 """ |
2833 | 2892 ]), |
2834 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER: | 2893 |
2835 const MessageTemplate(MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, | 2894 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER: const MessageTemplate( |
| 2895 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, |
2836 "The getter '#{name}' is declared here in class '#{class}'."), | 2896 "The getter '#{name}' is declared here in class '#{class}'."), |
2837 | 2897 |
2838 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER: | 2898 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER: const MessageTemplate( |
2839 const MessageTemplate(MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, | 2899 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, |
2840 "The getter '#{name}' is implicitly declared by this field " | 2900 "The getter '#{name}' is implicitly declared by this field " |
2841 "in class '#{class}'."), | 2901 "in class '#{class}'."), |
2842 | 2902 |
2843 MessageKind.INVALID_METADATA: | 2903 MessageKind.INVALID_METADATA: const MessageTemplate( |
2844 const MessageTemplate(MessageKind.INVALID_METADATA, | 2904 MessageKind.INVALID_METADATA, |
2845 "A metadata annotation must be either a reference to a compile-time " | 2905 "A metadata annotation must be either a reference to a compile-time " |
2846 "constant variable or a call to a constant constructor.", | 2906 "constant variable or a call to a constant constructor.", |
2847 howToFix: | 2907 howToFix: |
2848 "Try using a different constant value or referencing it through a " | 2908 "Try using a different constant value or referencing it through a
" |
2849 "constant variable.", | 2909 "constant variable.", |
2850 examples: const [ | 2910 examples: const ['@Object main() {}', '@print main() {}']), |
2851 '@Object main() {}', | 2911 |
2852 '@print main() {}']), | 2912 MessageKind.INVALID_METADATA_GENERIC: const MessageTemplate( |
2853 | 2913 MessageKind.INVALID_METADATA_GENERIC, |
2854 MessageKind.INVALID_METADATA_GENERIC: | |
2855 const MessageTemplate(MessageKind.INVALID_METADATA_GENERIC, | |
2856 "A metadata annotation using a constant constructor cannot use type " | 2914 "A metadata annotation using a constant constructor cannot use type " |
2857 "arguments.", | 2915 "arguments.", |
2858 howToFix: | 2916 howToFix: |
2859 "Try removing the type arguments or referencing the constant " | 2917 "Try removing the type arguments or referencing the constant " |
2860 "through a constant variable.", | 2918 "through a constant variable.", |
2861 examples: const [''' | 2919 examples: const [ |
| 2920 ''' |
2862 class C<T> { | 2921 class C<T> { |
2863 const C(); | 2922 const C(); |
2864 } | 2923 } |
2865 @C<int>() main() {} | 2924 @C<int>() main() {} |
2866 ''']), | 2925 ''' |
2867 | 2926 ]), |
2868 MessageKind.EQUAL_MAP_ENTRY_KEY: | 2927 |
2869 const MessageTemplate(MessageKind.EQUAL_MAP_ENTRY_KEY, | 2928 MessageKind.EQUAL_MAP_ENTRY_KEY: const MessageTemplate( |
| 2929 MessageKind.EQUAL_MAP_ENTRY_KEY, |
2870 "An entry with the same key already exists in the map.", | 2930 "An entry with the same key already exists in the map.", |
2871 howToFix: | 2931 howToFix: |
2872 "Try removing the previous entry or changing the key in one " | 2932 "Try removing the previous entry or changing the key in one " |
2873 "of the entries.", | 2933 "of the entries.", |
2874 examples: const [""" | 2934 examples: const [ |
| 2935 """ |
2875 main() { | 2936 main() { |
2876 var m = const {'foo': 1, 'foo': 2}; | 2937 var m = const {'foo': 1, 'foo': 2}; |
2877 }"""]), | 2938 }""" |
2878 | 2939 ]), |
2879 MessageKind.BAD_INPUT_CHARACTER: | 2940 |
2880 const MessageTemplate(MessageKind.BAD_INPUT_CHARACTER, | 2941 MessageKind.BAD_INPUT_CHARACTER: const MessageTemplate( |
| 2942 MessageKind.BAD_INPUT_CHARACTER, |
2881 "Character U+#{characterHex} isn't allowed here.", | 2943 "Character U+#{characterHex} isn't allowed here.", |
2882 howToFix: DONT_KNOW_HOW_TO_FIX, | 2944 howToFix: DONT_KNOW_HOW_TO_FIX, |
2883 examples: const [""" | 2945 examples: const [ |
| 2946 """ |
2884 main() { | 2947 main() { |
2885 String x = ç; | 2948 String x = ç; |
2886 } | 2949 } |
2887 """]), | 2950 """ |
2888 | 2951 ]), |
2889 MessageKind.UNTERMINATED_STRING: | 2952 |
2890 const MessageTemplate(MessageKind.UNTERMINATED_STRING, | 2953 MessageKind.UNTERMINATED_STRING: const MessageTemplate( |
2891 "String must end with #{quote}.", | 2954 MessageKind.UNTERMINATED_STRING, "String must end with #{quote}.", |
2892 howToFix: DONT_KNOW_HOW_TO_FIX, | 2955 howToFix: DONT_KNOW_HOW_TO_FIX, |
2893 examples: const [""" | 2956 examples: const [ |
| 2957 """ |
2894 main() { | 2958 main() { |
2895 return ' | 2959 return ' |
2896 ; | 2960 ; |
2897 } | 2961 } |
2898 """, | 2962 """, |
2899 """ | 2963 """ |
2900 main() { | 2964 main() { |
2901 return \" | 2965 return \" |
2902 ; | 2966 ; |
2903 } | 2967 } |
2904 """, | 2968 """, |
2905 """ | 2969 """ |
2906 main() { | 2970 main() { |
2907 return r' | 2971 return r' |
2908 ; | 2972 ; |
2909 } | 2973 } |
2910 """, | 2974 """, |
2911 """ | 2975 """ |
2912 main() { | 2976 main() { |
2913 return r\" | 2977 return r\" |
2914 ; | 2978 ; |
2915 } | 2979 } |
2916 """, | 2980 """, |
2917 """ | 2981 """ |
2918 main() => ''' | 2982 main() => ''' |
2919 """, | 2983 """, |
2920 """ | 2984 """ |
2921 main() => \"\"\" | 2985 main() => \"\"\" |
2922 """, | 2986 """, |
2923 """ | 2987 """ |
2924 main() => r''' | 2988 main() => r''' |
2925 """, | 2989 """, |
2926 """ | 2990 """ |
2927 main() => r\"\"\" | 2991 main() => r\"\"\" |
2928 """]), | 2992 """ |
2929 | 2993 ]), |
2930 MessageKind.UNMATCHED_TOKEN: | 2994 |
2931 const MessageTemplate(MessageKind.UNMATCHED_TOKEN, | 2995 MessageKind.UNMATCHED_TOKEN: const MessageTemplate( |
| 2996 MessageKind.UNMATCHED_TOKEN, |
2932 "Can't find '#{end}' to match '#{begin}'.", | 2997 "Can't find '#{end}' to match '#{begin}'.", |
2933 howToFix: DONT_KNOW_HOW_TO_FIX, | 2998 howToFix: DONT_KNOW_HOW_TO_FIX, |
2934 examples: const[ | 2999 examples: const ["main(", "main(){", "main(){]}",]), |
2935 "main(", | 3000 |
2936 "main(){", | 3001 MessageKind.UNTERMINATED_TOKEN: const MessageTemplate( |
2937 "main(){]}", | 3002 MessageKind.UNTERMINATED_TOKEN, |
2938 ]), | |
2939 | |
2940 MessageKind.UNTERMINATED_TOKEN: | |
2941 const MessageTemplate(MessageKind.UNTERMINATED_TOKEN, | |
2942 // This is a fall-back message that shouldn't happen. | 3003 // This is a fall-back message that shouldn't happen. |
2943 "Incomplete token."), | 3004 "Incomplete token."), |
2944 | 3005 |
2945 MessageKind.EXPONENT_MISSING: | 3006 MessageKind.EXPONENT_MISSING: const MessageTemplate( |
2946 const MessageTemplate(MessageKind.EXPONENT_MISSING, | 3007 MessageKind.EXPONENT_MISSING, |
2947 "Numbers in exponential notation should always contain an exponent" | 3008 "Numbers in exponential notation should always contain an exponent" |
2948 " (an integer number with an optional sign).", | 3009 " (an integer number with an optional sign).", |
2949 howToFix: | 3010 howToFix: "Make sure there is an exponent, and remove any whitespace " |
2950 "Make sure there is an exponent, and remove any whitespace " | 3011 "before it.", |
2951 "before it.", | 3012 examples: const [ |
2952 examples: const [""" | 3013 """ |
2953 main() { | 3014 main() { |
2954 var i = 1e; | 3015 var i = 1e; |
2955 } | 3016 } |
2956 """]), | 3017 """ |
2957 | 3018 ]), |
2958 MessageKind.HEX_DIGIT_EXPECTED: | 3019 |
2959 const MessageTemplate(MessageKind.HEX_DIGIT_EXPECTED, | 3020 MessageKind.HEX_DIGIT_EXPECTED: const MessageTemplate( |
| 3021 MessageKind.HEX_DIGIT_EXPECTED, |
2960 "A hex digit (0-9 or A-F) must follow '0x'.", | 3022 "A hex digit (0-9 or A-F) must follow '0x'.", |
2961 howToFix: | 3023 howToFix: |
2962 DONT_KNOW_HOW_TO_FIX, // Seems obvious from the error message. | 3024 DONT_KNOW_HOW_TO_FIX, // Seems obvious from the error message. |
2963 examples: const [""" | 3025 examples: const [ |
| 3026 """ |
2964 main() { | 3027 main() { |
2965 var i = 0x; | 3028 var i = 0x; |
2966 } | 3029 } |
2967 """]), | 3030 """ |
2968 | 3031 ]), |
2969 MessageKind.MALFORMED_STRING_LITERAL: | 3032 |
2970 const MessageTemplate(MessageKind.MALFORMED_STRING_LITERAL, | 3033 MessageKind.MALFORMED_STRING_LITERAL: const MessageTemplate( |
| 3034 MessageKind.MALFORMED_STRING_LITERAL, |
2971 r"A '$' has special meaning inside a string, and must be followed by " | 3035 r"A '$' has special meaning inside a string, and must be followed by " |
2972 "an identifier or an expression in curly braces ({}).", | 3036 "an identifier or an expression in curly braces ({}).", |
2973 howToFix: r"Try adding a backslash (\) to escape the '$'.", | 3037 howToFix: r"Try adding a backslash (\) to escape the '$'.", |
2974 examples: const [r""" | 3038 examples: const [ |
| 3039 r""" |
2975 main() { | 3040 main() { |
2976 return '$'; | 3041 return '$'; |
2977 } | 3042 } |
2978 """, | 3043 """, |
2979 r''' | 3044 r''' |
2980 main() { | 3045 main() { |
2981 return "$"; | 3046 return "$"; |
2982 } | 3047 } |
2983 ''', | 3048 ''', |
2984 r""" | 3049 r""" |
2985 main() { | 3050 main() { |
2986 return '''$'''; | 3051 return '''$'''; |
2987 } | 3052 } |
2988 """, | 3053 """, |
2989 r''' | 3054 r''' |
2990 main() { | 3055 main() { |
2991 return """$"""; | 3056 return """$"""; |
2992 } | 3057 } |
2993 ''']), | 3058 ''' |
2994 | 3059 ]), |
2995 MessageKind.UNTERMINATED_COMMENT: | 3060 |
2996 const MessageTemplate(MessageKind.UNTERMINATED_COMMENT, | 3061 MessageKind.UNTERMINATED_COMMENT: const MessageTemplate( |
| 3062 MessageKind.UNTERMINATED_COMMENT, |
2997 "Comment starting with '/*' must end with '*/'.", | 3063 "Comment starting with '/*' must end with '*/'.", |
2998 howToFix: DONT_KNOW_HOW_TO_FIX, | 3064 howToFix: DONT_KNOW_HOW_TO_FIX, |
2999 examples: const [r""" | 3065 examples: const [ |
3000 main() { | 3066 r""" |
3001 } | 3067 main() { |
3002 /*"""]), | 3068 } |
3003 | 3069 /*""" |
3004 MessageKind.MISSING_TOKEN_BEFORE_THIS: | 3070 ]), |
3005 const MessageTemplate(MessageKind.MISSING_TOKEN_BEFORE_THIS, | 3071 |
| 3072 MessageKind.MISSING_TOKEN_BEFORE_THIS: const MessageTemplate( |
| 3073 MessageKind.MISSING_TOKEN_BEFORE_THIS, |
3006 "Expected '#{token}' before this.", | 3074 "Expected '#{token}' before this.", |
3007 // Consider the second example below: the parser expects a ')' before | 3075 // Consider the second example below: the parser expects a ')' before |
3008 // 'y', but a ',' would also have worked. We don't have enough | 3076 // 'y', but a ',' would also have worked. We don't have enough |
3009 // information to give a good suggestion. | 3077 // information to give a good suggestion. |
3010 howToFix: DONT_KNOW_HOW_TO_FIX, | 3078 howToFix: DONT_KNOW_HOW_TO_FIX, |
3011 examples: const [ | 3079 examples: const [ |
3012 "main() => true ? 1;", | 3080 "main() => true ? 1;", |
3013 "main() => foo(x: 1 y: 2);", | 3081 "main() => foo(x: 1 y: 2);", |
3014 ]), | 3082 ]), |
3015 | 3083 |
3016 MessageKind.MISSING_TOKEN_AFTER_THIS: | 3084 MessageKind.MISSING_TOKEN_AFTER_THIS: const MessageTemplate( |
3017 const MessageTemplate(MessageKind.MISSING_TOKEN_AFTER_THIS, | 3085 MessageKind.MISSING_TOKEN_AFTER_THIS, |
3018 "Expected '#{token}' after this.", | 3086 "Expected '#{token}' after this.", |
3019 // See [MISSING_TOKEN_BEFORE_THIS], we don't have enough information | 3087 // See [MISSING_TOKEN_BEFORE_THIS], we don't have enough information |
3020 // to give a good suggestion. | 3088 // to give a good suggestion. |
3021 howToFix: DONT_KNOW_HOW_TO_FIX, | 3089 howToFix: DONT_KNOW_HOW_TO_FIX, |
3022 examples: const [ | 3090 examples: const [ |
3023 "main(x) {x}", | 3091 "main(x) {x}", |
3024 """ | 3092 """ |
3025 class S1 {} | 3093 class S1 {} |
3026 class S2 {} | 3094 class S2 {} |
3027 class S3 {} | 3095 class S3 {} |
3028 class A = S1 with S2, S3 | 3096 class A = S1 with S2, S3 |
3029 main() => new A(); | 3097 main() => new A(); |
3030 """ | 3098 """ |
3031 ]), | 3099 ]), |
3032 | 3100 |
3033 MessageKind.CONSIDER_ANALYZE_ALL: | 3101 MessageKind.CONSIDER_ANALYZE_ALL: const MessageTemplate( |
3034 const MessageTemplate(MessageKind.CONSIDER_ANALYZE_ALL, | 3102 MessageKind.CONSIDER_ANALYZE_ALL, |
3035 "Could not find '#{main}'. Nothing will be analyzed.", | 3103 "Could not find '#{main}'. Nothing will be analyzed.", |
3036 howToFix: "Try using '--analyze-all' to analyze everything.", | 3104 howToFix: "Try using '--analyze-all' to analyze everything.", |
3037 examples: const ['']), | 3105 examples: const ['']), |
3038 | 3106 |
3039 MessageKind.MISSING_MAIN: | 3107 MessageKind.MISSING_MAIN: const MessageTemplate( |
3040 const MessageTemplate(MessageKind.MISSING_MAIN, | 3108 MessageKind.MISSING_MAIN, "Could not find '#{main}'.", |
3041 "Could not find '#{main}'.", | |
3042 howToFix: "Try adding a method named '#{main}' to your program." | 3109 howToFix: "Try adding a method named '#{main}' to your program." |
3043 /* No example, test uses '--analyze-only' which will produce the above | 3110 /* No example, test uses '--analyze-only' which will produce the above |
3044 * message [CONSIDER_ANALYZE_ALL]. An example for a human operator | 3111 * message [CONSIDER_ANALYZE_ALL]. An example for a human operator |
3045 * would be an empty file.*/), | 3112 * would be an empty file.*/ |
3046 | 3113 ), |
3047 MessageKind.MAIN_NOT_A_FUNCTION: | 3114 |
3048 const MessageTemplate(MessageKind.MAIN_NOT_A_FUNCTION, | 3115 MessageKind.MAIN_NOT_A_FUNCTION: const MessageTemplate( |
3049 "'#{main}' is not a function.", | 3116 MessageKind.MAIN_NOT_A_FUNCTION, "'#{main}' is not a function.", |
3050 howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */ | 3117 howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */ |
3051 examples: const ['var main;']), | 3118 examples: const ['var main;']), |
3052 | 3119 |
3053 MessageKind.MAIN_WITH_EXTRA_PARAMETER: | 3120 MessageKind.MAIN_WITH_EXTRA_PARAMETER: const MessageTemplate( |
3054 const MessageTemplate(MessageKind.MAIN_WITH_EXTRA_PARAMETER, | 3121 MessageKind.MAIN_WITH_EXTRA_PARAMETER, |
3055 "'#{main}' cannot have more than two parameters.", | 3122 "'#{main}' cannot have more than two parameters.", |
3056 howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */ | 3123 howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */ |
3057 examples: const ['main(a, b, c) {}']), | 3124 examples: const ['main(a, b, c) {}']), |
3058 | 3125 |
3059 MessageKind.COMPILER_CRASHED: | 3126 MessageKind.COMPILER_CRASHED: const MessageTemplate( |
3060 const MessageTemplate(MessageKind.COMPILER_CRASHED, | 3127 MessageKind.COMPILER_CRASHED, |
3061 "The compiler crashed when compiling this element."), | 3128 "The compiler crashed when compiling this element."), |
3062 | 3129 |
3063 MessageKind.PLEASE_REPORT_THE_CRASH: | 3130 MessageKind.PLEASE_REPORT_THE_CRASH: const MessageTemplate( |
3064 const MessageTemplate(MessageKind.PLEASE_REPORT_THE_CRASH, ''' | 3131 MessageKind.PLEASE_REPORT_THE_CRASH, |
| 3132 ''' |
3065 The compiler is broken. | 3133 The compiler is broken. |
3066 | 3134 |
3067 When compiling the above element, the compiler crashed. It is not | 3135 When compiling the above element, the compiler crashed. It is not |
3068 possible to tell if this is caused by a problem in your program or | 3136 possible to tell if this is caused by a problem in your program or |
3069 not. Regardless, the compiler should not crash. | 3137 not. Regardless, the compiler should not crash. |
3070 | 3138 |
3071 The Dart team would greatly appreciate if you would take a moment to | 3139 The Dart team would greatly appreciate if you would take a moment to |
3072 report this problem at http://dartbug.com/new. | 3140 report this problem at http://dartbug.com/new. |
3073 | 3141 |
3074 Please include the following information: | 3142 Please include the following information: |
3075 | 3143 |
3076 * the name and version of your operating system, | 3144 * the name and version of your operating system, |
3077 | 3145 |
3078 * the Dart SDK build number (#{buildId}), and | 3146 * the Dart SDK build number (#{buildId}), and |
3079 | 3147 |
3080 * the entire message you see here (including the full stack trace | 3148 * the entire message you see here (including the full stack trace |
3081 below as well as the source location above). | 3149 below as well as the source location above). |
3082 '''), | 3150 '''), |
3083 | 3151 |
3084 MessageKind.POTENTIAL_MUTATION: | 3152 MessageKind.POTENTIAL_MUTATION: const MessageTemplate( |
3085 const MessageTemplate(MessageKind.POTENTIAL_MUTATION, | 3153 MessageKind.POTENTIAL_MUTATION, |
3086 "Variable '#{variableName}' is not known to be of type " | 3154 "Variable '#{variableName}' is not known to be of type " |
3087 "'#{shownType}' because it is potentially mutated in the scope for " | 3155 "'#{shownType}' because it is potentially mutated in the scope for " |
3088 "promotion."), | 3156 "promotion."), |
3089 | 3157 |
3090 MessageKind.POTENTIAL_MUTATION_HERE: | 3158 MessageKind.POTENTIAL_MUTATION_HERE: const MessageTemplate( |
3091 const MessageTemplate(MessageKind.POTENTIAL_MUTATION_HERE, | 3159 MessageKind.POTENTIAL_MUTATION_HERE, |
3092 "Variable '#{variableName}' is potentially mutated here."), | 3160 "Variable '#{variableName}' is potentially mutated here."), |
3093 | 3161 |
3094 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE: | 3162 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE: const MessageTemplate( |
3095 const MessageTemplate(MessageKind.POTENTIAL_MUTATION_IN_CLOSURE, | 3163 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE, |
3096 "Variable '#{variableName}' is not known to be of type " | 3164 "Variable '#{variableName}' is not known to be of type " |
3097 "'#{shownType}' because it is potentially mutated within a closure."), | 3165 "'#{shownType}' because it is potentially mutated within a closure."), |
3098 | 3166 |
3099 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE: | 3167 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE: const MessageTemplate( |
3100 const MessageTemplate(MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE, | 3168 MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE, |
3101 "Variable '#{variableName}' is potentially mutated in a " | 3169 "Variable '#{variableName}' is potentially mutated in a " |
3102 "closure here."), | 3170 "closure here."), |
3103 | 3171 |
3104 MessageKind.ACCESSED_IN_CLOSURE: | 3172 MessageKind.ACCESSED_IN_CLOSURE: const MessageTemplate( |
3105 const MessageTemplate(MessageKind.ACCESSED_IN_CLOSURE, | 3173 MessageKind.ACCESSED_IN_CLOSURE, |
3106 "Variable '#{variableName}' is not known to be of type " | 3174 "Variable '#{variableName}' is not known to be of type " |
3107 "'#{shownType}' because it is accessed by a closure in the scope for " | 3175 "'#{shownType}' because it is accessed by a closure in the scope for " |
3108 "promotion and potentially mutated in the scope of " | 3176 "promotion and potentially mutated in the scope of " |
3109 "'#{variableName}'."), | 3177 "'#{variableName}'."), |
3110 | 3178 |
3111 MessageKind.ACCESSED_IN_CLOSURE_HERE: | 3179 MessageKind.ACCESSED_IN_CLOSURE_HERE: const MessageTemplate( |
3112 const MessageTemplate(MessageKind.ACCESSED_IN_CLOSURE_HERE, | 3180 MessageKind.ACCESSED_IN_CLOSURE_HERE, |
3113 "Variable '#{variableName}' is accessed in a closure here."), | 3181 "Variable '#{variableName}' is accessed in a closure here."), |
3114 | 3182 |
3115 MessageKind.NOT_MORE_SPECIFIC: | 3183 MessageKind.NOT_MORE_SPECIFIC: const MessageTemplate( |
3116 const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC, | 3184 MessageKind.NOT_MORE_SPECIFIC, |
3117 "Variable '#{variableName}' is not shown to have type " | 3185 "Variable '#{variableName}' is not shown to have type " |
3118 "'#{shownType}' because '#{shownType}' is not more specific than the " | 3186 "'#{shownType}' because '#{shownType}' is not more specific than the " |
3119 "known type '#{knownType}' of '#{variableName}'."), | 3187 "known type '#{knownType}' of '#{variableName}'."), |
3120 | 3188 |
3121 MessageKind.NOT_MORE_SPECIFIC_SUBTYPE: | 3189 MessageKind.NOT_MORE_SPECIFIC_SUBTYPE: const MessageTemplate( |
3122 const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC_SUBTYPE, | 3190 MessageKind.NOT_MORE_SPECIFIC_SUBTYPE, |
3123 "Variable '#{variableName}' is not shown to have type " | 3191 "Variable '#{variableName}' is not shown to have type " |
3124 "'#{shownType}' because '#{shownType}' is not a subtype of the " | 3192 "'#{shownType}' because '#{shownType}' is not a subtype of the " |
3125 "known type '#{knownType}' of '#{variableName}'."), | 3193 "known type '#{knownType}' of '#{variableName}'."), |
3126 | 3194 |
3127 MessageKind.NOT_MORE_SPECIFIC_SUGGESTION: | 3195 MessageKind.NOT_MORE_SPECIFIC_SUGGESTION: const MessageTemplate( |
3128 const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC_SUGGESTION, | 3196 MessageKind.NOT_MORE_SPECIFIC_SUGGESTION, |
3129 "Variable '#{variableName}' is not shown to have type " | 3197 "Variable '#{variableName}' is not shown to have type " |
3130 "'#{shownType}' because '#{shownType}' is not more specific than the " | 3198 "'#{shownType}' because '#{shownType}' is not more specific than the " |
3131 "known type '#{knownType}' of '#{variableName}'.", | 3199 "known type '#{knownType}' of '#{variableName}'.", |
3132 howToFix: | 3200 howToFix: |
3133 "Try replacing '#{shownType}' with '#{shownTypeSuggestion}'."), | 3201 "Try replacing '#{shownType}' with '#{shownTypeSuggestion}'."), |
3134 | 3202 |
3135 MessageKind.NO_COMMON_SUBTYPES: | 3203 MessageKind.NO_COMMON_SUBTYPES: const MessageTemplate( |
3136 const MessageTemplate(MessageKind.NO_COMMON_SUBTYPES, | 3204 MessageKind.NO_COMMON_SUBTYPES, |
3137 "Types '#{left}' and '#{right}' have no common subtypes."), | 3205 "Types '#{left}' and '#{right}' have no common subtypes."), |
3138 | 3206 |
3139 MessageKind.HIDDEN_WARNINGS_HINTS: | 3207 MessageKind.HIDDEN_WARNINGS_HINTS: const MessageTemplate( |
3140 const MessageTemplate(MessageKind.HIDDEN_WARNINGS_HINTS, | 3208 MessageKind.HIDDEN_WARNINGS_HINTS, |
3141 "#{warnings} warning(s) and #{hints} hint(s) suppressed in #{uri}."), | 3209 "#{warnings} warning(s) and #{hints} hint(s) suppressed in #{uri}."), |
3142 | 3210 |
3143 MessageKind.HIDDEN_WARNINGS: | 3211 MessageKind.HIDDEN_WARNINGS: const MessageTemplate( |
3144 const MessageTemplate(MessageKind.HIDDEN_WARNINGS, | 3212 MessageKind.HIDDEN_WARNINGS, |
3145 "#{warnings} warning(s) suppressed in #{uri}."), | 3213 "#{warnings} warning(s) suppressed in #{uri}."), |
3146 | 3214 |
3147 MessageKind.HIDDEN_HINTS: | 3215 MessageKind.HIDDEN_HINTS: const MessageTemplate( |
3148 const MessageTemplate(MessageKind.HIDDEN_HINTS, | 3216 MessageKind.HIDDEN_HINTS, "#{hints} hint(s) suppressed in #{uri}."), |
3149 "#{hints} hint(s) suppressed in #{uri}."), | |
3150 | 3217 |
3151 MessageKind.PREAMBLE: | 3218 MessageKind.PREAMBLE: const MessageTemplate( |
3152 const MessageTemplate(MessageKind.PREAMBLE, | 3219 MessageKind.PREAMBLE, |
3153 "When run on the command-line, the compiled output might" | 3220 "When run on the command-line, the compiled output might" |
3154 " require a preamble file located in:\n" | 3221 " require a preamble file located in:\n" |
3155 " <sdk>/lib/_internal/js_runtime/lib/preambles."), | 3222 " <sdk>/lib/_internal/js_runtime/lib/preambles."), |
3156 | 3223 |
3157 MessageKind.INVALID_SYNC_MODIFIER: | 3224 MessageKind.INVALID_SYNC_MODIFIER: const MessageTemplate( |
3158 const MessageTemplate(MessageKind.INVALID_SYNC_MODIFIER, | 3225 MessageKind.INVALID_SYNC_MODIFIER, "Invalid modifier 'sync'.", |
3159 "Invalid modifier 'sync'.", | |
3160 howToFix: "Try replacing 'sync' with 'sync*'.", | 3226 howToFix: "Try replacing 'sync' with 'sync*'.", |
3161 examples: const [ | 3227 examples: const ["main() sync {}"]), |
3162 "main() sync {}" | |
3163 ]), | |
3164 | 3228 |
3165 MessageKind.INVALID_AWAIT_FOR: | 3229 MessageKind.INVALID_AWAIT_FOR: const MessageTemplate( |
3166 const MessageTemplate(MessageKind.INVALID_AWAIT_FOR, | 3230 MessageKind.INVALID_AWAIT_FOR, |
3167 "'await' is only supported on for-in loops.", | 3231 "'await' is only supported on for-in loops.", |
3168 howToFix: "Try rewriting the loop as a for-in loop or removing the " | 3232 howToFix: "Try rewriting the loop as a for-in loop or removing the " |
3169 "'await' keyword.", | 3233 "'await' keyword.", |
3170 examples: const [""" | 3234 examples: const [ |
| 3235 """ |
3171 main() async* { | 3236 main() async* { |
3172 await for (int i = 0; i < 10; i++) {} | 3237 await for (int i = 0; i < 10; i++) {} |
3173 } | 3238 } |
3174 """]), | 3239 """ |
| 3240 ]), |
3175 | 3241 |
3176 MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD: | 3242 MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD: const MessageTemplate( |
3177 const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD, | 3243 MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD, |
3178 "The modifier '#{modifier}' is not allowed on an abstract method.", | 3244 "The modifier '#{modifier}' is not allowed on an abstract method.", |
3179 options: const ['--enable-async'], | 3245 options: const ['--enable-async'], |
3180 howToFix: "Try removing the '#{modifier}' modifier or adding a " | 3246 howToFix: "Try removing the '#{modifier}' modifier or adding a " |
3181 "body to the method.", | 3247 "body to the method.", |
3182 examples: const [""" | 3248 examples: const [ |
| 3249 """ |
3183 abstract class A { | 3250 abstract class A { |
3184 method() async; | 3251 method() async; |
3185 } | 3252 } |
3186 class B extends A { | 3253 class B extends A { |
3187 method() {} | 3254 method() {} |
3188 } | 3255 } |
3189 main() { | 3256 main() { |
3190 A a = new B(); | 3257 A a = new B(); |
3191 a.method(); | 3258 a.method(); |
3192 } | 3259 } |
3193 """]), | 3260 """ |
3194 | 3261 ]), |
3195 MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR: | 3262 |
3196 const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR, | 3263 MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR: const MessageTemplate( |
3197 "The modifier '#{modifier}' is not allowed on constructors.", | 3264 MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR, |
3198 options: const ['--enable-async'], | 3265 "The modifier '#{modifier}' is not allowed on constructors.", |
3199 howToFix: "Try removing the '#{modifier}' modifier.", | 3266 options: const ['--enable-async'], |
3200 examples: const [""" | 3267 howToFix: "Try removing the '#{modifier}' modifier.", |
| 3268 examples: const [ |
| 3269 """ |
3201 class A { | 3270 class A { |
3202 A() async; | 3271 A() async; |
3203 } | 3272 } |
3204 main() => new A();""", | 3273 main() => new A();""", |
3205 | 3274 """ |
3206 """ | |
3207 class A { | 3275 class A { |
3208 A(); | 3276 A(); |
3209 factory A.a() async* {} | 3277 factory A.a() async* {} |
3210 } | 3278 } |
3211 main() => new A.a();"""]), | 3279 main() => new A.a();""" |
3212 | 3280 ]), |
3213 MessageKind.ASYNC_MODIFIER_ON_SETTER: | 3281 |
3214 const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_SETTER, | 3282 MessageKind.ASYNC_MODIFIER_ON_SETTER: const MessageTemplate( |
3215 "The modifier '#{modifier}' is not allowed on setters.", | 3283 MessageKind.ASYNC_MODIFIER_ON_SETTER, |
3216 options: const ['--enable-async'], | 3284 "The modifier '#{modifier}' is not allowed on setters.", |
3217 howToFix: "Try removing the '#{modifier}' modifier.", | 3285 options: const ['--enable-async'], |
3218 examples: const [""" | 3286 howToFix: "Try removing the '#{modifier}' modifier.", |
| 3287 examples: const [ |
| 3288 """ |
3219 class A { | 3289 class A { |
3220 set foo(v) async {} | 3290 set foo(v) async {} |
3221 } | 3291 } |
3222 main() => new A().foo = 0;"""]), | 3292 main() => new A().foo = 0;""" |
3223 | 3293 ]), |
3224 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY: | 3294 |
3225 const MessageTemplate(MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, | 3295 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY: const MessageTemplate( |
| 3296 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, |
3226 "The modifier '#{modifier}' is not allowed on methods implemented " | 3297 "The modifier '#{modifier}' is not allowed on methods implemented " |
3227 "using '=>'.", | 3298 "using '=>'.", |
3228 options: const ['--enable-async'], | 3299 options: const ['--enable-async'], |
3229 howToFix: "Try removing the '#{modifier}' modifier or implementing " | 3300 howToFix: "Try removing the '#{modifier}' modifier or implementing " |
3230 "the method body using a block: '{ ... }'.", | 3301 "the method body using a block: '{ ... }'.", |
3231 examples: const ["main() sync* => null;", "main() async* => null;"]), | 3302 examples: const ["main() sync* => null;", "main() async* => null;"]), |
3232 | 3303 |
3233 // TODO(johnniwinther): Check for 'async' as identifier. | 3304 // TODO(johnniwinther): Check for 'async' as identifier. |
3234 MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER: | 3305 MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER: const MessageTemplate( |
3235 const MessageTemplate(MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER, | 3306 MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER, |
3236 "'#{keyword}' cannot be used as an identifier in a function body " | 3307 "'#{keyword}' cannot be used as an identifier in a function body " |
3237 "marked with '#{modifier}'.", | 3308 "marked with '#{modifier}'.", |
3238 options: const ['--enable-async'], | 3309 options: const ['--enable-async'], |
3239 howToFix: "Try removing the '#{modifier}' modifier or renaming the " | 3310 howToFix: "Try removing the '#{modifier}' modifier or renaming the " |
3240 "identifier.", | 3311 "identifier.", |
3241 examples: const [""" | 3312 examples: const [ |
| 3313 """ |
3242 main() async { | 3314 main() async { |
3243 var await; | 3315 var await; |
3244 }""", | 3316 }""", |
3245 """ | 3317 """ |
3246 main() async* { | 3318 main() async* { |
3247 var yield; | 3319 var yield; |
3248 }""", | 3320 }""", |
3249 """ | 3321 """ |
3250 main() sync* { | 3322 main() sync* { |
3251 var yield; | 3323 var yield; |
3252 }"""]), | 3324 }""" |
3253 | 3325 ]), |
3254 MessageKind.NATIVE_NOT_SUPPORTED: | 3326 |
3255 const MessageTemplate(MessageKind.NATIVE_NOT_SUPPORTED, | 3327 MessageKind.NATIVE_NOT_SUPPORTED: const MessageTemplate( |
| 3328 MessageKind.NATIVE_NOT_SUPPORTED, |
3256 "'native' modifier is not supported.", | 3329 "'native' modifier is not supported.", |
3257 howToFix: "Try removing the 'native' implementation or analyzing the " | 3330 howToFix: "Try removing the 'native' implementation or analyzing the " |
3258 "code with the --allow-native-extensions option.", | 3331 "code with the --allow-native-extensions option.", |
3259 examples: const [""" | 3332 examples: const [ |
| 3333 """ |
3260 main() native "Main"; | 3334 main() native "Main"; |
3261 """]), | 3335 """ |
3262 | 3336 ]), |
3263 MessageKind.DART_EXT_NOT_SUPPORTED: | 3337 |
3264 const MessageTemplate(MessageKind.DART_EXT_NOT_SUPPORTED, | 3338 MessageKind.DART_EXT_NOT_SUPPORTED: const MessageTemplate( |
| 3339 MessageKind.DART_EXT_NOT_SUPPORTED, |
3265 "The 'dart-ext' scheme is not supported.", | 3340 "The 'dart-ext' scheme is not supported.", |
3266 howToFix: "Try analyzing the code with the --allow-native-extensions " | 3341 howToFix: "Try analyzing the code with the --allow-native-extensions " |
3267 "option.", | 3342 "option.", |
3268 examples: const [""" | 3343 examples: const [ |
| 3344 """ |
3269 import 'dart-ext:main'; | 3345 import 'dart-ext:main'; |
3270 | 3346 |
3271 main() {} | 3347 main() {} |
3272 """]), | 3348 """ |
3273 | 3349 ]), |
3274 MessageKind.LIBRARY_TAG_MUST_BE_FIRST: | 3350 |
3275 const MessageTemplate(MessageKind.LIBRARY_TAG_MUST_BE_FIRST, | 3351 MessageKind.LIBRARY_TAG_MUST_BE_FIRST: const MessageTemplate( |
| 3352 MessageKind.LIBRARY_TAG_MUST_BE_FIRST, |
3276 "The library declaration should come before other declarations.", | 3353 "The library declaration should come before other declarations.", |
3277 howToFix: "Try moving the declaration to the top of the file.", | 3354 howToFix: "Try moving the declaration to the top of the file.", |
3278 examples: const [ | 3355 examples: const [ |
3279 """ | 3356 """ |
3280 import 'dart:core'; | 3357 import 'dart:core'; |
3281 library foo; | 3358 library foo; |
3282 main() {} | 3359 main() {} |
3283 """, | 3360 """, |
3284 ]), | 3361 ]), |
3285 | 3362 |
3286 MessageKind.ONLY_ONE_LIBRARY_TAG: | 3363 MessageKind.ONLY_ONE_LIBRARY_TAG: const MessageTemplate( |
3287 const MessageTemplate(MessageKind.ONLY_ONE_LIBRARY_TAG, | 3364 MessageKind.ONLY_ONE_LIBRARY_TAG, |
3288 "There can only be one library declaration.", | 3365 "There can only be one library declaration.", |
3289 howToFix: "Try removing all other library declarations.", | 3366 howToFix: "Try removing all other library declarations.", |
3290 examples: const [ | 3367 examples: const [ |
3291 """ | 3368 """ |
3292 library foo; | 3369 library foo; |
3293 library bar; | 3370 library bar; |
3294 main() {} | 3371 main() {} |
3295 """, | 3372 """, |
3296 """ | 3373 """ |
3297 library foo; | 3374 library foo; |
3298 import 'dart:core'; | 3375 import 'dart:core'; |
3299 library bar; | 3376 library bar; |
3300 main() {} | 3377 main() {} |
3301 """, | 3378 """, |
3302 ]), | 3379 ]), |
3303 | 3380 |
3304 MessageKind.IMPORT_BEFORE_PARTS: | 3381 MessageKind.IMPORT_BEFORE_PARTS: const MessageTemplate( |
3305 const MessageTemplate(MessageKind.IMPORT_BEFORE_PARTS, | 3382 MessageKind.IMPORT_BEFORE_PARTS, |
3306 "Import declarations should come before parts.", | 3383 "Import declarations should come before parts.", |
3307 howToFix: "Try moving this import further up in the file.", | 3384 howToFix: "Try moving this import further up in the file.", |
3308 examples: const [ | 3385 examples: const [ |
3309 const <String, String>{ | 3386 const <String, String>{ |
3310 'main.dart': """ | 3387 'main.dart': """ |
3311 library test.main; | 3388 library test.main; |
3312 part 'part.dart'; | 3389 part 'part.dart'; |
3313 import 'dart:core'; | 3390 import 'dart:core'; |
3314 main() {} | 3391 main() {} |
3315 """, | 3392 """, |
3316 'part.dart': """ | 3393 'part.dart': """ |
3317 part of test.main; | 3394 part of test.main; |
3318 """, | 3395 """, |
3319 }]), | 3396 } |
3320 | 3397 ]), |
3321 MessageKind.EXPORT_BEFORE_PARTS: | 3398 |
3322 const MessageTemplate(MessageKind.EXPORT_BEFORE_PARTS, | 3399 MessageKind.EXPORT_BEFORE_PARTS: const MessageTemplate( |
| 3400 MessageKind.EXPORT_BEFORE_PARTS, |
3323 "Export declarations should come before parts.", | 3401 "Export declarations should come before parts.", |
3324 howToFix: "Try moving this export further up in the file.", | 3402 howToFix: "Try moving this export further up in the file.", |
3325 examples: const [ | 3403 examples: const [ |
3326 const <String, String>{ | 3404 const <String, String>{ |
3327 'main.dart': """ | 3405 'main.dart': """ |
3328 library test.main; | 3406 library test.main; |
3329 part 'part.dart'; | 3407 part 'part.dart'; |
3330 export 'dart:core'; | 3408 export 'dart:core'; |
3331 main() {} | 3409 main() {} |
3332 """, | 3410 """, |
3333 'part.dart': """ | 3411 'part.dart': """ |
3334 part of test.main; | 3412 part of test.main; |
3335 """, | 3413 """, |
3336 }]), | 3414 } |
3337 | 3415 ]), |
3338 ////////////////////////////////////////////////////////////////////////////// | 3416 |
3339 // Patch errors start. | 3417 //////////////////////////////////////////////////////////////////////////
//// |
3340 ////////////////////////////////////////////////////////////////////////////// | 3418 // Patch errors start. |
3341 | 3419 //////////////////////////////////////////////////////////////////////////
//// |
3342 MessageKind.PATCH_RETURN_TYPE_MISMATCH: | 3420 |
3343 const MessageTemplate(MessageKind.PATCH_RETURN_TYPE_MISMATCH, | 3421 MessageKind.PATCH_RETURN_TYPE_MISMATCH: const MessageTemplate( |
| 3422 MessageKind.PATCH_RETURN_TYPE_MISMATCH, |
3344 "Patch return type '#{patchReturnType}' does not match " | 3423 "Patch return type '#{patchReturnType}' does not match " |
3345 "'#{originReturnType}' on origin method '#{methodName}'."), | 3424 "'#{originReturnType}' on origin method '#{methodName}'."), |
3346 | 3425 |
3347 MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH: | 3426 MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH: const MessageTemplate
( |
3348 const MessageTemplate( | |
3349 MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH, | 3427 MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH, |
3350 "Required parameter count of patch method " | 3428 "Required parameter count of patch method " |
3351 "(#{patchParameterCount}) does not match parameter count on origin " | 3429 "(#{patchParameterCount}) does not match parameter count on origin " |
3352 "method '#{methodName}' (#{originParameterCount})."), | 3430 "method '#{methodName}' (#{originParameterCount})."), |
3353 | 3431 |
3354 MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH: | 3432 MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH: const MessageTemplate
( |
3355 const MessageTemplate( | |
3356 MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH, | 3433 MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH, |
3357 "Optional parameter count of patch method " | 3434 "Optional parameter count of patch method " |
3358 "(#{patchParameterCount}) does not match parameter count on origin " | 3435 "(#{patchParameterCount}) does not match parameter count on origin " |
3359 "method '#{methodName}' (#{originParameterCount})."), | 3436 "method '#{methodName}' (#{originParameterCount})."), |
3360 | 3437 |
3361 MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH: | 3438 MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH: |
3362 const MessageTemplate( | 3439 const MessageTemplate( |
3363 MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH, | 3440 MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH, |
3364 "Optional parameters of origin and patch method " | 3441 "Optional parameters of origin and patch method " |
3365 "'#{methodName}' must both be either named or positional."), | 3442 "'#{methodName}' must both be either named or positional."), |
3366 | 3443 |
3367 MessageKind.PATCH_PARAMETER_MISMATCH: | 3444 MessageKind.PATCH_PARAMETER_MISMATCH: const MessageTemplate( |
3368 const MessageTemplate(MessageKind.PATCH_PARAMETER_MISMATCH, | 3445 MessageKind.PATCH_PARAMETER_MISMATCH, |
3369 "Patch method parameter '#{patchParameter}' does not match " | 3446 "Patch method parameter '#{patchParameter}' does not match " |
3370 "'#{originParameter}' on origin method '#{methodName}'."), | 3447 "'#{originParameter}' on origin method '#{methodName}'."), |
3371 | 3448 |
3372 MessageKind.PATCH_PARAMETER_TYPE_MISMATCH: | 3449 MessageKind.PATCH_PARAMETER_TYPE_MISMATCH: const MessageTemplate( |
3373 const MessageTemplate(MessageKind.PATCH_PARAMETER_TYPE_MISMATCH, | 3450 MessageKind.PATCH_PARAMETER_TYPE_MISMATCH, |
3374 "Patch method parameter '#{parameterName}' type " | 3451 "Patch method parameter '#{parameterName}' type " |
3375 "'#{patchParameterType}' does not match '#{originParameterType}' on " | 3452 "'#{patchParameterType}' does not match '#{originParameterType}' on " |
3376 "origin method '#{methodName}'."), | 3453 "origin method '#{methodName}'."), |
3377 | 3454 |
3378 MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION: | 3455 MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION: const MessageTemplate( |
3379 const MessageTemplate(MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION, | 3456 MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION, |
3380 "External method without an implementation."), | 3457 "External method without an implementation."), |
3381 | 3458 |
3382 MessageKind.PATCH_POINT_TO_FUNCTION: | 3459 MessageKind.PATCH_POINT_TO_FUNCTION: const MessageTemplate( |
3383 const MessageTemplate(MessageKind.PATCH_POINT_TO_FUNCTION, | 3460 MessageKind.PATCH_POINT_TO_FUNCTION, |
3384 "This is the function patch '#{functionName}'."), | 3461 "This is the function patch '#{functionName}'."), |
3385 | 3462 |
3386 MessageKind.PATCH_POINT_TO_CLASS: | 3463 MessageKind.PATCH_POINT_TO_CLASS: const MessageTemplate( |
3387 const MessageTemplate(MessageKind.PATCH_POINT_TO_CLASS, | 3464 MessageKind.PATCH_POINT_TO_CLASS, |
3388 "This is the class patch '#{className}'."), | 3465 "This is the class patch '#{className}'."), |
3389 | 3466 |
3390 MessageKind.PATCH_POINT_TO_GETTER: | 3467 MessageKind.PATCH_POINT_TO_GETTER: const MessageTemplate( |
3391 const MessageTemplate(MessageKind.PATCH_POINT_TO_GETTER, | 3468 MessageKind.PATCH_POINT_TO_GETTER, |
3392 "This is the getter patch '#{getterName}'."), | 3469 "This is the getter patch '#{getterName}'."), |
3393 | 3470 |
3394 MessageKind.PATCH_POINT_TO_SETTER: | 3471 MessageKind.PATCH_POINT_TO_SETTER: const MessageTemplate( |
3395 const MessageTemplate(MessageKind.PATCH_POINT_TO_SETTER, | 3472 MessageKind.PATCH_POINT_TO_SETTER, |
3396 "This is the setter patch '#{setterName}'."), | 3473 "This is the setter patch '#{setterName}'."), |
3397 | 3474 |
3398 MessageKind.PATCH_POINT_TO_CONSTRUCTOR: | 3475 MessageKind.PATCH_POINT_TO_CONSTRUCTOR: const MessageTemplate( |
3399 const MessageTemplate(MessageKind.PATCH_POINT_TO_CONSTRUCTOR, | 3476 MessageKind.PATCH_POINT_TO_CONSTRUCTOR, |
3400 "This is the constructor patch '#{constructorName}'."), | 3477 "This is the constructor patch '#{constructorName}'."), |
3401 | 3478 |
3402 MessageKind.PATCH_POINT_TO_PARAMETER: | 3479 MessageKind.PATCH_POINT_TO_PARAMETER: const MessageTemplate( |
3403 const MessageTemplate(MessageKind.PATCH_POINT_TO_PARAMETER, | 3480 MessageKind.PATCH_POINT_TO_PARAMETER, |
3404 "This is the patch parameter '#{parameterName}'."), | 3481 "This is the patch parameter '#{parameterName}'."), |
3405 | 3482 |
3406 MessageKind.PATCH_NON_EXISTING: | 3483 MessageKind.PATCH_NON_EXISTING: const MessageTemplate( |
3407 const MessageTemplate(MessageKind.PATCH_NON_EXISTING, | 3484 MessageKind.PATCH_NON_EXISTING, |
3408 "Origin does not exist for patch '#{name}'."), | 3485 "Origin does not exist for patch '#{name}'."), |
3409 | 3486 |
3410 // TODO(ahe): Eventually, this error should be removed as it will be | 3487 // TODO(ahe): Eventually, this error should be removed as it will be |
3411 // handled by the regular parser. | 3488 // handled by the regular parser. |
3412 MessageKind.PATCH_NONPATCHABLE: | 3489 MessageKind.PATCH_NONPATCHABLE: const MessageTemplate( |
3413 const MessageTemplate(MessageKind.PATCH_NONPATCHABLE, | 3490 MessageKind.PATCH_NONPATCHABLE, |
3414 "Only classes and functions can be patched."), | 3491 "Only classes and functions can be patched."), |
3415 | 3492 |
3416 MessageKind.PATCH_NON_EXTERNAL: | 3493 MessageKind.PATCH_NON_EXTERNAL: const MessageTemplate( |
3417 const MessageTemplate(MessageKind.PATCH_NON_EXTERNAL, | 3494 MessageKind.PATCH_NON_EXTERNAL, |
3418 "Only external functions can be patched."), | 3495 "Only external functions can be patched."), |
3419 | 3496 |
3420 MessageKind.PATCH_NON_CLASS: | 3497 MessageKind.PATCH_NON_CLASS: const MessageTemplate( |
3421 const MessageTemplate(MessageKind.PATCH_NON_CLASS, | 3498 MessageKind.PATCH_NON_CLASS, |
3422 "Patching non-class with class patch '#{className}'."), | 3499 "Patching non-class with class patch '#{className}'."), |
3423 | 3500 |
3424 MessageKind.PATCH_NON_GETTER: | 3501 MessageKind.PATCH_NON_GETTER: const MessageTemplate( |
3425 const MessageTemplate(MessageKind.PATCH_NON_GETTER, | 3502 MessageKind.PATCH_NON_GETTER, |
3426 "Cannot patch non-getter '#{name}' with getter patch."), | 3503 "Cannot patch non-getter '#{name}' with getter patch."), |
3427 | 3504 |
3428 MessageKind.PATCH_NO_GETTER: | 3505 MessageKind.PATCH_NO_GETTER: const MessageTemplate( |
3429 const MessageTemplate(MessageKind.PATCH_NO_GETTER, | 3506 MessageKind.PATCH_NO_GETTER, |
3430 "No getter found for getter patch '#{getterName}'."), | 3507 "No getter found for getter patch '#{getterName}'."), |
3431 | 3508 |
3432 MessageKind.PATCH_NON_SETTER: | 3509 MessageKind.PATCH_NON_SETTER: const MessageTemplate( |
3433 const MessageTemplate(MessageKind.PATCH_NON_SETTER, | 3510 MessageKind.PATCH_NON_SETTER, |
3434 "Cannot patch non-setter '#{name}' with setter patch."), | 3511 "Cannot patch non-setter '#{name}' with setter patch."), |
3435 | 3512 |
3436 MessageKind.PATCH_NO_SETTER: | 3513 MessageKind.PATCH_NO_SETTER: const MessageTemplate( |
3437 const MessageTemplate(MessageKind.PATCH_NO_SETTER, | 3514 MessageKind.PATCH_NO_SETTER, |
3438 "No setter found for setter patch '#{setterName}'."), | 3515 "No setter found for setter patch '#{setterName}'."), |
3439 | 3516 |
3440 MessageKind.PATCH_NON_CONSTRUCTOR: | 3517 MessageKind.PATCH_NON_CONSTRUCTOR: const MessageTemplate( |
3441 const MessageTemplate(MessageKind.PATCH_NON_CONSTRUCTOR, | 3518 MessageKind.PATCH_NON_CONSTRUCTOR, |
3442 "Cannot patch non-constructor with constructor patch " | 3519 "Cannot patch non-constructor with constructor patch " |
3443 "'#{constructorName}'."), | 3520 "'#{constructorName}'."), |
3444 | 3521 |
3445 MessageKind.PATCH_NON_FUNCTION: | 3522 MessageKind.PATCH_NON_FUNCTION: const MessageTemplate( |
3446 const MessageTemplate(MessageKind.PATCH_NON_FUNCTION, | 3523 MessageKind.PATCH_NON_FUNCTION, |
3447 "Cannot patch non-function with function patch " | 3524 "Cannot patch non-function with function patch " |
3448 "'#{functionName}'."), | 3525 "'#{functionName}'."), |
3449 | 3526 |
3450 MessageKind.INJECTED_PUBLIC_MEMBER: | 3527 MessageKind.INJECTED_PUBLIC_MEMBER: const MessageTemplate( |
3451 const MessageTemplate(MessageKind.INJECTED_PUBLIC_MEMBER, | 3528 MessageKind.INJECTED_PUBLIC_MEMBER, |
3452 "Non-patch members in patch libraries must be private."), | 3529 "Non-patch members in patch libraries must be private."), |
3453 | 3530 |
3454 MessageKind.EXTERNAL_WITH_BODY: | 3531 MessageKind.EXTERNAL_WITH_BODY: const MessageTemplate( |
3455 const MessageTemplate(MessageKind.EXTERNAL_WITH_BODY, | 3532 MessageKind.EXTERNAL_WITH_BODY, |
3456 "External function '#{functionName}' cannot have a function body.", | 3533 "External function '#{functionName}' cannot have a function body.", |
3457 options: const ["--output-type=dart"], | 3534 options: const ["--output-type=dart"], |
3458 howToFix: | 3535 howToFix: |
3459 "Try removing the 'external' modifier or the function body.", | 3536 "Try removing the 'external' modifier or the function body.", |
3460 examples: const [""" | 3537 examples: const [ |
| 3538 """ |
3461 external foo() => 0; | 3539 external foo() => 0; |
3462 main() => foo(); | 3540 main() => foo(); |
3463 """, """ | 3541 """, |
| 3542 """ |
3464 external foo() {} | 3543 external foo() {} |
3465 main() => foo(); | 3544 main() => foo(); |
3466 """]), | 3545 """ |
3467 | 3546 ]), |
3468 ////////////////////////////////////////////////////////////////////////////// | 3547 |
3469 // Patch errors end. | 3548 //////////////////////////////////////////////////////////////////////////
//// |
3470 ////////////////////////////////////////////////////////////////////////////// | 3549 // Patch errors end. |
3471 | 3550 //////////////////////////////////////////////////////////////////////////
//// |
3472 MessageKind.EXPERIMENTAL_ASSERT_MESSAGE: | 3551 |
3473 const MessageTemplate(MessageKind.EXPERIMENTAL_ASSERT_MESSAGE, | 3552 MessageKind.EXPERIMENTAL_ASSERT_MESSAGE: const MessageTemplate( |
| 3553 MessageKind.EXPERIMENTAL_ASSERT_MESSAGE, |
3474 "Experimental language feature 'assertion with message'" | 3554 "Experimental language feature 'assertion with message'" |
3475 " is not supported.", | 3555 " is not supported.", |
3476 howToFix: | 3556 howToFix: |
3477 "Use option '--assert-message' to use assertions with messages.", | 3557 "Use option '--assert-message' to use assertions with messages.", |
3478 examples: const [r''' | 3558 examples: const [ |
| 3559 r''' |
3479 main() { | 3560 main() { |
3480 int n = -7; | 3561 int n = -7; |
3481 assert(n > 0, 'must be positive: $n'); | 3562 assert(n > 0, 'must be positive: $n'); |
3482 } | 3563 } |
3483 ''']), | 3564 ''' |
3484 | 3565 ]), |
3485 MessageKind.IMPORT_EXPERIMENTAL_MIRRORS: | 3566 |
3486 const MessageTemplate(MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, r''' | 3567 MessageKind.IMPORT_EXPERIMENTAL_MIRRORS: const MessageTemplate( |
| 3568 MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, |
| 3569 r''' |
3487 | 3570 |
3488 **************************************************************** | 3571 **************************************************************** |
3489 * WARNING: dart:mirrors support in dart2js is experimental, | 3572 * WARNING: dart:mirrors support in dart2js is experimental, |
3490 * and not recommended. | 3573 * and not recommended. |
3491 * This implementation of mirrors is incomplete, | 3574 * This implementation of mirrors is incomplete, |
3492 * and often greatly increases the size of the generated | 3575 * and often greatly increases the size of the generated |
3493 * JavaScript code. | 3576 * JavaScript code. |
3494 * | 3577 * |
3495 * Your app imports dart:mirrors via:'''''' | 3578 * Your app imports dart:mirrors via:''' |
| 3579 ''' |
3496 $IMPORT_EXPERIMENTAL_MIRRORS_PADDING#{importChain} | 3580 $IMPORT_EXPERIMENTAL_MIRRORS_PADDING#{importChain} |
3497 * | 3581 * |
3498 * You can disable this message by using the --enable-experimental-mirrors | 3582 * You can disable this message by using the --enable-experimental-mirrors |
3499 * command-line flag. | 3583 * command-line flag. |
3500 * | 3584 * |
3501 * To learn what to do next, please visit: | 3585 * To learn what to do next, please visit: |
3502 * http://dartlang.org/dart2js-reflection | 3586 * http://dartlang.org/dart2js-reflection |
3503 **************************************************************** | 3587 **************************************************************** |
3504 '''), | 3588 '''), |
3505 | 3589 |
3506 MessageKind.DISALLOWED_LIBRARY_IMPORT: | 3590 MessageKind.DISALLOWED_LIBRARY_IMPORT: const MessageTemplate( |
3507 const MessageTemplate(MessageKind.DISALLOWED_LIBRARY_IMPORT, ''' | 3591 MessageKind.DISALLOWED_LIBRARY_IMPORT, |
| 3592 ''' |
3508 Your app imports the unsupported library '#{uri}' via: | 3593 Your app imports the unsupported library '#{uri}' via: |
3509 '''''' | 3594 ''' |
| 3595 ''' |
3510 $DISALLOWED_LIBRARY_IMPORT_PADDING#{importChain} | 3596 $DISALLOWED_LIBRARY_IMPORT_PADDING#{importChain} |
3511 | 3597 |
3512 Use the --categories option to support import of '#{uri}'. | 3598 Use the --categories option to support import of '#{uri}'. |
3513 '''), | 3599 '''), |
3514 | 3600 |
3515 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND: | 3601 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND: const MessageTemplate( |
3516 const MessageTemplate( | |
3517 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND, | 3602 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND, |
3518 """ | 3603 """ |
3519 dart:mirrors library is not supported when using this backend. | 3604 dart:mirrors library is not supported when using this backend. |
3520 | 3605 |
3521 Your app imports dart:mirrors via:"""""" | 3606 Your app imports dart:mirrors via:""" |
| 3607 """ |
3522 $MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING#{importChain}"""), | 3608 $MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING#{importChain}"""), |
3523 | 3609 |
3524 MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS: | 3610 MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS: const MessageTemplate( |
3525 const MessageTemplate(MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS, | 3611 MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS, |
3526 "Non-supported 'call' member on a native class, or a " | 3612 "Non-supported 'call' member on a native class, or a " |
3527 "subclass of a native class."), | 3613 "subclass of a native class."), |
3528 | 3614 |
3529 MessageKind.DIRECTLY_THROWING_NSM: | 3615 MessageKind.DIRECTLY_THROWING_NSM: const MessageTemplate( |
3530 const MessageTemplate(MessageKind.DIRECTLY_THROWING_NSM, | 3616 MessageKind.DIRECTLY_THROWING_NSM, |
3531 "This 'noSuchMethod' implementation is guaranteed to throw an " | 3617 "This 'noSuchMethod' implementation is guaranteed to throw an " |
3532 "exception. The generated code will be smaller if it is " | 3618 "exception. The generated code will be smaller if it is " |
3533 "rewritten.", | 3619 "rewritten.", |
3534 howToFix: "Rewrite to " | 3620 howToFix: "Rewrite to " |
3535 "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."), | 3621 "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."), |
3536 | 3622 |
3537 MessageKind.COMPLEX_THROWING_NSM: | 3623 MessageKind.COMPLEX_THROWING_NSM: const MessageTemplate( |
3538 const MessageTemplate(MessageKind.COMPLEX_THROWING_NSM, | 3624 MessageKind.COMPLEX_THROWING_NSM, |
3539 "This 'noSuchMethod' implementation is guaranteed to throw an " | 3625 "This 'noSuchMethod' implementation is guaranteed to throw an " |
3540 "exception. The generated code will be smaller and the compiler " | 3626 "exception. The generated code will be smaller and the compiler " |
3541 "will be able to perform more optimizations if it is rewritten.", | 3627 "will be able to perform more optimizations if it is rewritten.", |
3542 howToFix: "Rewrite to " | 3628 howToFix: "Rewrite to " |
3543 "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."), | 3629 "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."), |
3544 | 3630 |
3545 MessageKind.COMPLEX_RETURNING_NSM: | 3631 MessageKind.COMPLEX_RETURNING_NSM: const MessageTemplate( |
3546 const MessageTemplate(MessageKind.COMPLEX_RETURNING_NSM, | 3632 MessageKind.COMPLEX_RETURNING_NSM, |
3547 "Overriding 'noSuchMethod' causes the compiler to generate " | 3633 "Overriding 'noSuchMethod' causes the compiler to generate " |
3548 "more code and prevents the compiler from doing some optimizations.", | 3634 "more code and prevents the compiler from doing some optimizations.", |
3549 howToFix: "Consider removing this 'noSuchMethod' implementation."), | 3635 howToFix: "Consider removing this 'noSuchMethod' implementation."), |
3550 | 3636 |
3551 MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP: | 3637 MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP: const MessageTemplate( |
3552 const MessageTemplate(MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP, | 3638 MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP, |
3553 "Unsupported version of package:lookup_map.", | 3639 "Unsupported version of package:lookup_map.", |
3554 howToFix: DONT_KNOW_HOW_TO_FIX), | 3640 howToFix: DONT_KNOW_HOW_TO_FIX), |
3555 | 3641 }); // End of TEMPLATES. |
3556 }); // End of TEMPLATES. | |
3557 | 3642 |
3558 /// Padding used before and between import chains in the message for | 3643 /// Padding used before and between import chains in the message for |
3559 /// [MessageKind.IMPORT_EXPERIMENTAL_MIRRORS]. | 3644 /// [MessageKind.IMPORT_EXPERIMENTAL_MIRRORS]. |
3560 static const String IMPORT_EXPERIMENTAL_MIRRORS_PADDING = '\n* '; | 3645 static const String IMPORT_EXPERIMENTAL_MIRRORS_PADDING = '\n* '; |
3561 | 3646 |
3562 /// Padding used before and between import chains in the message for | 3647 /// Padding used before and between import chains in the message for |
3563 /// [MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND]. | 3648 /// [MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND]. |
3564 static const String MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING = '\n '; | 3649 static const String MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING = '\n '; |
3565 | 3650 |
3566 /// Padding used before and between import chains in the message for | 3651 /// Padding used before and between import chains in the message for |
3567 /// [MessageKind.DISALLOWED_LIBRARY_IMPORT]. | 3652 /// [MessageKind.DISALLOWED_LIBRARY_IMPORT]. |
3568 static const String DISALLOWED_LIBRARY_IMPORT_PADDING = '\n '; | 3653 static const String DISALLOWED_LIBRARY_IMPORT_PADDING = '\n '; |
3569 | 3654 |
3570 toString() => template; | 3655 toString() => template; |
3571 | 3656 |
3572 Message message([Map arguments = const {}, bool terse = false]) { | 3657 Message message([Map arguments = const {}, bool terse = false]) { |
3573 return new Message(this, arguments, terse); | 3658 return new Message(this, arguments, terse); |
3574 } | 3659 } |
3575 | 3660 |
3576 bool get hasHowToFix => howToFix != null && howToFix != DONT_KNOW_HOW_TO_FIX; | 3661 bool get hasHowToFix => howToFix != null && howToFix != DONT_KNOW_HOW_TO_FIX; |
3577 } | 3662 } |
3578 | 3663 |
3579 class Message { | 3664 class Message { |
3580 final MessageTemplate template; | 3665 final MessageTemplate template; |
3581 final Map arguments; | 3666 final Map arguments; |
3582 final bool terse; | 3667 final bool terse; |
3583 String message; | 3668 String message; |
3584 | 3669 |
3585 Message(this.template, this.arguments, this.terse) { | 3670 Message(this.template, this.arguments, this.terse) { |
3586 assert(() { computeMessage(); return true; }); | 3671 assert(() { |
| 3672 computeMessage(); |
| 3673 return true; |
| 3674 }); |
3587 } | 3675 } |
3588 | 3676 |
3589 MessageKind get kind => template.kind; | 3677 MessageKind get kind => template.kind; |
3590 | 3678 |
3591 String computeMessage() { | 3679 String computeMessage() { |
3592 if (message == null) { | 3680 if (message == null) { |
3593 message = template.template; | 3681 message = template.template; |
3594 arguments.forEach((key, value) { | 3682 arguments.forEach((key, value) { |
3595 message = message.replaceAll('#{${key}}', convertToString(value)); | 3683 message = message.replaceAll('#{${key}}', convertToString(value)); |
3596 }); | 3684 }); |
3597 assert(invariant( | 3685 assert(invariant( |
3598 CURRENT_ELEMENT_SPANNABLE, | 3686 CURRENT_ELEMENT_SPANNABLE, |
3599 kind == MessageKind.GENERIC || | 3687 kind == MessageKind.GENERIC || |
3600 !message.contains(new RegExp(r'#\{.+\}')), | 3688 !message.contains(new RegExp(r'#\{.+\}')), |
3601 message: 'Missing arguments in error message: "$message"')); | 3689 message: 'Missing arguments in error message: "$message"')); |
3602 if (!terse && template.hasHowToFix) { | 3690 if (!terse && template.hasHowToFix) { |
3603 String howToFix = template.howToFix; | 3691 String howToFix = template.howToFix; |
3604 arguments.forEach((key, value) { | 3692 arguments.forEach((key, value) { |
3605 howToFix = howToFix.replaceAll('#{${key}}', convertToString(value)); | 3693 howToFix = howToFix.replaceAll('#{${key}}', convertToString(value)); |
3606 }); | 3694 }); |
3607 message = '$message\n$howToFix'; | 3695 message = '$message\n$howToFix'; |
3608 } | 3696 } |
3609 } | 3697 } |
3610 return message; | 3698 return message; |
3611 } | 3699 } |
3612 | 3700 |
3613 String toString() { | 3701 String toString() { |
3614 return computeMessage(); | 3702 return computeMessage(); |
3615 } | 3703 } |
3616 | 3704 |
3617 bool operator==(other) { | 3705 bool operator ==(other) { |
3618 if (other is !Message) return false; | 3706 if (other is! Message) return false; |
3619 return (template == other.template) && (toString() == other.toString()); | 3707 return (template == other.template) && (toString() == other.toString()); |
3620 } | 3708 } |
3621 | 3709 |
3622 int get hashCode => throw new UnsupportedError('Message.hashCode'); | 3710 int get hashCode => throw new UnsupportedError('Message.hashCode'); |
3623 | 3711 |
3624 static String convertToString(value) { | 3712 static String convertToString(value) { |
3625 if (value is ErrorToken) { | 3713 if (value is ErrorToken) { |
3626 // Shouldn't happen. | 3714 // Shouldn't happen. |
3627 return value.assertionMessage; | 3715 return value.assertionMessage; |
3628 } else if (value is Token) { | 3716 } else if (value is Token) { |
3629 value = value.value; | 3717 value = value.value; |
3630 } | 3718 } |
3631 return '$value'; | 3719 return '$value'; |
3632 } | 3720 } |
3633 } | 3721 } |
OLD | NEW |