| 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 | 5 |
| 6 /** | 6 /** |
| 7 * The messages in this file should meet the following guide lines: | 7 * The messages in this file should meet the following guide lines: |
| 8 * | 8 * |
| 9 * 1. The message should be a complete sentence starting with an uppercase | 9 * 1. The message should be a complete sentence starting with an uppercase |
| 10 * letter, and ending with a period. | 10 * letter, and ending with a period. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 | 65 |
| 66 import '../tokens/token.dart' show | 66 import '../tokens/token.dart' show |
| 67 ErrorToken, | 67 ErrorToken, |
| 68 Token; | 68 Token; |
| 69 | 69 |
| 70 import 'invariant.dart' show | 70 import 'invariant.dart' show |
| 71 invariant; | 71 invariant; |
| 72 import 'spannable.dart' show | 72 import 'spannable.dart' show |
| 73 CURRENT_ELEMENT_SPANNABLE; | 73 CURRENT_ELEMENT_SPANNABLE; |
| 74 | 74 |
| 75 import 'generated/shared_messages.dart' as shared_messages; |
| 76 |
| 77 export 'generated/shared_messages.dart' show SharedMessageKind; |
| 78 |
| 75 const DONT_KNOW_HOW_TO_FIX = "Computer says no!"; | 79 const DONT_KNOW_HOW_TO_FIX = "Computer says no!"; |
| 76 | 80 |
| 77 /// Keys for the [MessageTemplate]s. | 81 /// Keys for the [MessageTemplate]s. |
| 78 enum MessageKind { | 82 enum MessageKind { |
| 79 ABSTRACT_CLASS_INSTANTIATION, | 83 ABSTRACT_CLASS_INSTANTIATION, |
| 80 ABSTRACT_GETTER, | 84 ABSTRACT_GETTER, |
| 81 ABSTRACT_METHOD, | 85 ABSTRACT_METHOD, |
| 82 ABSTRACT_SETTER, | 86 ABSTRACT_SETTER, |
| 83 ACCESSED_IN_CLOSURE, | 87 ACCESSED_IN_CLOSURE, |
| 84 ACCESSED_IN_CLOSURE_HERE, | 88 ACCESSED_IN_CLOSURE_HERE, |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT, | 470 WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT, |
| 467 YIELDING_MODIFIER_ON_ARROW_BODY, | 471 YIELDING_MODIFIER_ON_ARROW_BODY, |
| 468 } | 472 } |
| 469 | 473 |
| 470 /// A message template for an error, warning, hint or info message generated | 474 /// A message template for an error, warning, hint or info message generated |
| 471 /// by the compiler. Each template is associated with a [MessageKind] that | 475 /// by the compiler. Each template is associated with a [MessageKind] that |
| 472 /// uniquely identifies the message template. | 476 /// uniquely identifies the message template. |
| 473 // TODO(johnnniwinther): For Infos, consider adding a reference to the | 477 // TODO(johnnniwinther): For Infos, consider adding a reference to the |
| 474 // error/warning/hint that they belong to. | 478 // error/warning/hint that they belong to. |
| 475 class MessageTemplate { | 479 class MessageTemplate { |
| 476 final MessageKind kind; | 480 final dynamic/*MessageKind | SharedMessageKind*/ kind; |
| 477 | 481 |
| 478 /// Should describe what is wrong and why. | 482 /// Should describe what is wrong and why. |
| 479 final String template; | 483 final String template; |
| 480 | 484 |
| 481 /// Should describe how to fix the problem. Elided when using --terse option. | 485 /// Should describe how to fix the problem. Elided when using --terse option. |
| 482 final String howToFix; | 486 final String howToFix; |
| 483 | 487 |
| 484 /** | 488 /** |
| 485 * Examples will be checked by | 489 * Examples will be checked by |
| 486 * tests/compiler/dart2js/message_kind_test.dart. | 490 * tests/compiler/dart2js/message_kind_test.dart. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 498 this.kind, | 502 this.kind, |
| 499 this.template, | 503 this.template, |
| 500 {this.howToFix, | 504 {this.howToFix, |
| 501 this.examples, | 505 this.examples, |
| 502 this.options: const <String>[]}); | 506 this.options: const <String>[]}); |
| 503 | 507 |
| 504 /// All templates used by the compiler. | 508 /// All templates used by the compiler. |
| 505 /// | 509 /// |
| 506 /// The map is complete mapping from [MessageKind] to their corresponding | 510 /// The map is complete mapping from [MessageKind] to their corresponding |
| 507 /// [MessageTemplate]. | 511 /// [MessageTemplate]. |
| 508 static const Map<MessageKind, MessageTemplate> TEMPLATES = | 512 // The key type is a union of MessageKind and SharedMessageKind. |
| 509 const <MessageKind, MessageTemplate>{ | 513 static final Map<dynamic, MessageTemplate> TEMPLATES = |
| 514 <dynamic, MessageTemplate>{} |
| 515 ..addAll(shared_messages.TEMPLATES) |
| 516 ..addAll(const<MessageKind, MessageTemplate>{ |
| 510 /// Do not use this. It is here for legacy and debugging. It violates item | 517 /// Do not use this. It is here for legacy and debugging. It violates item |
| 511 /// 4 of the guide lines for error messages in the beginning of the file. | 518 /// 4 of the guide lines for error messages in the beginning of the file. |
| 512 MessageKind.GENERIC: | 519 MessageKind.GENERIC: |
| 513 const MessageTemplate(MessageKind.GENERIC, '#{text}'), | 520 const MessageTemplate(MessageKind.GENERIC, '#{text}'), |
| 514 | 521 |
| 515 MessageKind.NOT_ASSIGNABLE: | 522 MessageKind.NOT_ASSIGNABLE: |
| 516 const MessageTemplate(MessageKind.NOT_ASSIGNABLE, | 523 const MessageTemplate(MessageKind.NOT_ASSIGNABLE, |
| 517 "'#{fromType}' is not assignable to '#{toType}'."), | 524 "'#{fromType}' is not assignable to '#{toType}'."), |
| 518 | 525 |
| 519 MessageKind.FORIN_NOT_ASSIGNABLE: | 526 MessageKind.FORIN_NOT_ASSIGNABLE: |
| (...skipping 3121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3641 const MessageTemplate(MessageKind.COMPLEX_RETURNING_NSM, | 3648 const MessageTemplate(MessageKind.COMPLEX_RETURNING_NSM, |
| 3642 "Overriding 'noSuchMethod' causes the compiler to generate " | 3649 "Overriding 'noSuchMethod' causes the compiler to generate " |
| 3643 "more code and prevents the compiler from doing some optimizations.", | 3650 "more code and prevents the compiler from doing some optimizations.", |
| 3644 howToFix: "Consider removing this 'noSuchMethod' implementation."), | 3651 howToFix: "Consider removing this 'noSuchMethod' implementation."), |
| 3645 | 3652 |
| 3646 MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP: | 3653 MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP: |
| 3647 const MessageTemplate(MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP, | 3654 const MessageTemplate(MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP, |
| 3648 "Unsupported version of package:lookup_map.", | 3655 "Unsupported version of package:lookup_map.", |
| 3649 howToFix: DONT_KNOW_HOW_TO_FIX), | 3656 howToFix: DONT_KNOW_HOW_TO_FIX), |
| 3650 | 3657 |
| 3651 }; // End of TEMPLATES. | 3658 }); // End of TEMPLATES. |
| 3652 | 3659 |
| 3653 /// Padding used before and between import chains in the message for | 3660 /// Padding used before and between import chains in the message for |
| 3654 /// [MessageKind.IMPORT_EXPERIMENTAL_MIRRORS]. | 3661 /// [MessageKind.IMPORT_EXPERIMENTAL_MIRRORS]. |
| 3655 static const String IMPORT_EXPERIMENTAL_MIRRORS_PADDING = '\n* '; | 3662 static const String IMPORT_EXPERIMENTAL_MIRRORS_PADDING = '\n* '; |
| 3656 | 3663 |
| 3657 /// Padding used before and between import chains in the message for | 3664 /// Padding used before and between import chains in the message for |
| 3658 /// [MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND]. | 3665 /// [MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND]. |
| 3659 static const String MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING = '\n '; | 3666 static const String MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING = '\n '; |
| 3660 | 3667 |
| 3661 /// Padding used before and between import chains in the message for | 3668 /// Padding used before and between import chains in the message for |
| (...skipping 12 matching lines...) Expand all Loading... |
| 3674 class Message { | 3681 class Message { |
| 3675 final MessageTemplate template; | 3682 final MessageTemplate template; |
| 3676 final Map arguments; | 3683 final Map arguments; |
| 3677 final bool terse; | 3684 final bool terse; |
| 3678 String message; | 3685 String message; |
| 3679 | 3686 |
| 3680 Message(this.template, this.arguments, this.terse) { | 3687 Message(this.template, this.arguments, this.terse) { |
| 3681 assert(() { computeMessage(); return true; }); | 3688 assert(() { computeMessage(); return true; }); |
| 3682 } | 3689 } |
| 3683 | 3690 |
| 3684 MessageKind get kind => template.kind; | 3691 dynamic/*MessageKind | SharedMessageKind*/ get kind => template.kind; |
| 3685 | 3692 |
| 3686 String computeMessage() { | 3693 String computeMessage() { |
| 3687 if (message == null) { | 3694 if (message == null) { |
| 3688 message = template.template; | 3695 message = template.template; |
| 3689 arguments.forEach((key, value) { | 3696 arguments.forEach((key, value) { |
| 3690 message = message.replaceAll('#{${key}}', convertToString(value)); | 3697 message = message.replaceAll('#{${key}}', convertToString(value)); |
| 3691 }); | 3698 }); |
| 3692 assert(invariant( | 3699 assert(invariant( |
| 3693 CURRENT_ELEMENT_SPANNABLE, | 3700 CURRENT_ELEMENT_SPANNABLE, |
| 3694 kind == MessageKind.GENERIC || | 3701 kind == MessageKind.GENERIC || |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3719 static String convertToString(value) { | 3726 static String convertToString(value) { |
| 3720 if (value is ErrorToken) { | 3727 if (value is ErrorToken) { |
| 3721 // Shouldn't happen. | 3728 // Shouldn't happen. |
| 3722 return value.assertionMessage; | 3729 return value.assertionMessage; |
| 3723 } else if (value is Token) { | 3730 } else if (value is Token) { |
| 3724 value = value.value; | 3731 value = value.value; |
| 3725 } | 3732 } |
| 3726 return '$value'; | 3733 return '$value'; |
| 3727 } | 3734 } |
| 3728 } | 3735 } |
| OLD | NEW |