OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// ----------------------------------------------------------------------- | 5 /// ----------------------------------------------------------------------- |
6 /// ERROR HANDLING | 6 /// ERROR HANDLING |
7 /// ----------------------------------------------------------------------- | 7 /// ----------------------------------------------------------------------- |
8 /// | 8 /// |
9 /// As a rule of thumb, errors that can be detected statically are handled by | 9 /// As a rule of thumb, errors that can be detected statically are handled by |
10 /// the frontend, typically by translating the erroneous code into a 'throw' or | 10 /// the frontend, typically by translating the erroneous code into a 'throw' or |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 /// Name of the class. | 609 /// Name of the class. |
610 /// | 610 /// |
611 /// Must be non-null and must be unique within the library. | 611 /// Must be non-null and must be unique within the library. |
612 /// | 612 /// |
613 /// The name may contain characters that are not valid in a Dart identifier, | 613 /// The name may contain characters that are not valid in a Dart identifier, |
614 /// in particular, the symbol '&' is used in class names generated for mixin | 614 /// in particular, the symbol '&' is used in class names generated for mixin |
615 /// applications. | 615 /// applications. |
616 String name; | 616 String name; |
617 bool isAbstract; | 617 bool isAbstract; |
618 | 618 |
| 619 /// Whether this class is a synthetic implementation created for each |
| 620 /// mixed-in class. For example the following code: |
| 621 /// class Z extends A with B, C, D {} |
| 622 /// class A {} |
| 623 /// class B {} |
| 624 /// class C {} |
| 625 /// class D {} |
| 626 /// ...creates: |
| 627 /// abstract class A&B extends A mixedIn B {} |
| 628 /// abstract class A&B&C extends A&B mixedIn C {} |
| 629 /// abstract class A&B&C&D extends A&B&C mixedIn D {} |
| 630 /// class Z extends A&B&C&D {} |
| 631 /// All X&Y classes are marked as synthetic. |
| 632 bool isSyntheticMixinImplementation; |
| 633 |
619 /// The uri of the source file this class was loaded from. | 634 /// The uri of the source file this class was loaded from. |
620 String fileUri; | 635 String fileUri; |
621 | 636 |
622 final List<TypeParameter> typeParameters; | 637 final List<TypeParameter> typeParameters; |
623 | 638 |
624 /// The immediate super type, or `null` if this is the root class. | 639 /// The immediate super type, or `null` if this is the root class. |
625 Supertype supertype; | 640 Supertype supertype; |
626 | 641 |
627 /// The mixed-in type if this is a mixin application, otherwise `null`. | 642 /// The mixed-in type if this is a mixin application, otherwise `null`. |
628 Supertype mixedInType; | 643 Supertype mixedInType; |
(...skipping 10 matching lines...) Expand all Loading... |
639 final List<Constructor> constructors; | 654 final List<Constructor> constructors; |
640 | 655 |
641 /// Procedures declared in the class. | 656 /// Procedures declared in the class. |
642 /// | 657 /// |
643 /// For mixin applications this should be empty. | 658 /// For mixin applications this should be empty. |
644 final List<Procedure> procedures; | 659 final List<Procedure> procedures; |
645 | 660 |
646 Class( | 661 Class( |
647 {this.name, | 662 {this.name, |
648 this.isAbstract: false, | 663 this.isAbstract: false, |
| 664 this.isSyntheticMixinImplementation: false, |
649 this.supertype, | 665 this.supertype, |
650 this.mixedInType, | 666 this.mixedInType, |
651 List<TypeParameter> typeParameters, | 667 List<TypeParameter> typeParameters, |
652 List<Supertype> implementedTypes, | 668 List<Supertype> implementedTypes, |
653 List<Constructor> constructors, | 669 List<Constructor> constructors, |
654 List<Procedure> procedures, | 670 List<Procedure> procedures, |
655 List<Field> fields, | 671 List<Field> fields, |
656 this.fileUri, | 672 this.fileUri, |
657 Reference reference}) | 673 Reference reference}) |
658 : this.typeParameters = typeParameters ?? <TypeParameter>[], | 674 : this.typeParameters = typeParameters ?? <TypeParameter>[], |
(...skipping 3992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4651 if (typedef_.canonicalName == null) { | 4667 if (typedef_.canonicalName == null) { |
4652 throw '$typedef_ has no canonical name'; | 4668 throw '$typedef_ has no canonical name'; |
4653 } | 4669 } |
4654 return typedef_.canonicalName; | 4670 return typedef_.canonicalName; |
4655 } | 4671 } |
4656 | 4672 |
4657 /// Annotation describing information which is not part of Dart semantics; in | 4673 /// Annotation describing information which is not part of Dart semantics; in |
4658 /// other words, if this information (or any information it refers to) changes, | 4674 /// other words, if this information (or any information it refers to) changes, |
4659 /// static analysis and runtime behavior of the library are unaffected. | 4675 /// static analysis and runtime behavior of the library are unaffected. |
4660 const informative = null; | 4676 const informative = null; |
OLD | NEW |