| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library engine.element; | 5 library engine.element; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/src/generated/utilities_general.dart'; | 9 import 'package:analyzer/src/generated/utilities_general.dart'; |
| 10 import 'package:analyzer/src/task/dart.dart'; | 10 import 'package:analyzer/src/task/dart.dart'; |
| (...skipping 8673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8684 */ | 8684 */ |
| 8685 List<ParameterElement> get parameters; | 8685 List<ParameterElement> get parameters; |
| 8686 | 8686 |
| 8687 /** | 8687 /** |
| 8688 * Return a list containing all of the type parameters defined by this | 8688 * Return a list containing all of the type parameters defined by this |
| 8689 * parameter. A parameter will only define other parameters if it is a | 8689 * parameter. A parameter will only define other parameters if it is a |
| 8690 * function typed parameter. | 8690 * function typed parameter. |
| 8691 */ | 8691 */ |
| 8692 List<TypeParameterElement> get typeParameters; | 8692 List<TypeParameterElement> get typeParameters; |
| 8693 | 8693 |
| 8694 /** |
| 8695 * Append the type, name and possibly the default value of this parameter to |
| 8696 * the given [buffer]. |
| 8697 */ |
| 8698 void appendToWithoutDelimiters(StringBuffer buffer); |
| 8699 |
| 8694 @override | 8700 @override |
| 8695 FormalParameter computeNode(); | 8701 FormalParameter computeNode(); |
| 8696 } | 8702 } |
| 8697 | 8703 |
| 8698 /** | 8704 /** |
| 8699 * A concrete implementation of a [ParameterElement]. | 8705 * A concrete implementation of a [ParameterElement]. |
| 8700 */ | 8706 */ |
| 8701 class ParameterElementImpl extends VariableElementImpl | 8707 class ParameterElementImpl extends VariableElementImpl |
| 8702 with PotentiallyConstVariableElement | 8708 with ParameterElementMixin, PotentiallyConstVariableElement |
| 8703 implements ParameterElement { | 8709 implements ParameterElement { |
| 8704 /** | 8710 /** |
| 8705 * An empty list of parameter elements. | 8711 * An empty list of parameter elements. |
| 8706 */ | 8712 */ |
| 8707 @deprecated // Use ParameterElement.EMPTY_LIST | 8713 @deprecated // Use ParameterElement.EMPTY_LIST |
| 8708 static const List<ParameterElement> EMPTY_ARRAY = const <ParameterElement>[]; | 8714 static const List<ParameterElement> EMPTY_ARRAY = const <ParameterElement>[]; |
| 8709 | 8715 |
| 8710 /** | 8716 /** |
| 8711 * A list containing all of the parameters defined by this parameter element. | 8717 * A list containing all of the parameters defined by this parameter element. |
| 8712 * There will only be parameters if this parameter is a function typed | 8718 * There will only be parameters if this parameter is a function typed |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8828 left = "["; | 8834 left = "["; |
| 8829 right = "]"; | 8835 right = "]"; |
| 8830 } else if (parameterKind == ParameterKind.REQUIRED) {} | 8836 } else if (parameterKind == ParameterKind.REQUIRED) {} |
| 8831 break; | 8837 break; |
| 8832 } | 8838 } |
| 8833 buffer.write(left); | 8839 buffer.write(left); |
| 8834 appendToWithoutDelimiters(buffer); | 8840 appendToWithoutDelimiters(buffer); |
| 8835 buffer.write(right); | 8841 buffer.write(right); |
| 8836 } | 8842 } |
| 8837 | 8843 |
| 8838 /** | |
| 8839 * Append the type and name of this parameter to the given [buffer]. | |
| 8840 */ | |
| 8841 void appendToWithoutDelimiters(StringBuffer buffer) { | |
| 8842 buffer.write(type); | |
| 8843 buffer.write(" "); | |
| 8844 buffer.write(displayName); | |
| 8845 if (_defaultValueCode != null) { | |
| 8846 if (parameterKind == ParameterKind.NAMED) { | |
| 8847 buffer.write(": "); | |
| 8848 } | |
| 8849 if (parameterKind == ParameterKind.POSITIONAL) { | |
| 8850 buffer.write(" = "); | |
| 8851 } | |
| 8852 buffer.write(_defaultValueCode); | |
| 8853 } | |
| 8854 } | |
| 8855 | |
| 8856 @override | 8844 @override |
| 8857 FormalParameter computeNode() => | 8845 FormalParameter computeNode() => |
| 8858 getNodeMatching((node) => node is FormalParameter); | 8846 getNodeMatching((node) => node is FormalParameter); |
| 8859 | 8847 |
| 8860 @override | 8848 @override |
| 8861 ElementImpl getChild(String identifier) { | 8849 ElementImpl getChild(String identifier) { |
| 8862 for (ParameterElement parameter in _parameters) { | 8850 for (ParameterElement parameter in _parameters) { |
| 8863 if ((parameter as ParameterElementImpl).identifier == identifier) { | 8851 if ((parameter as ParameterElementImpl).identifier == identifier) { |
| 8864 return parameter as ParameterElementImpl; | 8852 return parameter as ParameterElementImpl; |
| 8865 } | 8853 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 8891 } | 8879 } |
| 8892 | 8880 |
| 8893 @override | 8881 @override |
| 8894 void visitChildren(ElementVisitor visitor) { | 8882 void visitChildren(ElementVisitor visitor) { |
| 8895 super.visitChildren(visitor); | 8883 super.visitChildren(visitor); |
| 8896 safelyVisitChildren(_parameters, visitor); | 8884 safelyVisitChildren(_parameters, visitor); |
| 8897 } | 8885 } |
| 8898 } | 8886 } |
| 8899 | 8887 |
| 8900 /** | 8888 /** |
| 8889 * A mixin that provides a common implementation for methods defined in |
| 8890 * [ParameterElement]. |
| 8891 */ |
| 8892 abstract class ParameterElementMixin implements ParameterElement { |
| 8893 @override |
| 8894 void appendToWithoutDelimiters(StringBuffer buffer) { |
| 8895 buffer.write(type); |
| 8896 buffer.write(" "); |
| 8897 buffer.write(displayName); |
| 8898 if (defaultValueCode != null) { |
| 8899 if (parameterKind == ParameterKind.NAMED) { |
| 8900 buffer.write(": "); |
| 8901 } |
| 8902 if (parameterKind == ParameterKind.POSITIONAL) { |
| 8903 buffer.write(" = "); |
| 8904 } |
| 8905 buffer.write(defaultValueCode); |
| 8906 } |
| 8907 } |
| 8908 } |
| 8909 |
| 8910 /** |
| 8901 * A type with type parameters, such as a class or function type alias. | 8911 * A type with type parameters, such as a class or function type alias. |
| 8902 */ | 8912 */ |
| 8903 abstract class ParameterizedType implements DartType { | 8913 abstract class ParameterizedType implements DartType { |
| 8904 /** | 8914 /** |
| 8905 * Return a list containing the actual types of the type arguments. If this | 8915 * Return a list containing the actual types of the type arguments. If this |
| 8906 * type's element does not have type parameters, then the array should be | 8916 * type's element does not have type parameters, then the array should be |
| 8907 * empty (although it is possible for type arguments to be erroneously | 8917 * empty (although it is possible for type arguments to be erroneously |
| 8908 * declared). If the element has type parameters and the actual type does not | 8918 * declared). If the element has type parameters and the actual type does not |
| 8909 * explicitly include argument values, then the type "dynamic" will be | 8919 * explicitly include argument values, then the type "dynamic" will be |
| 8910 * automatically provided. | 8920 * automatically provided. |
| 8911 */ | 8921 */ |
| 8912 List<DartType> get typeArguments; | 8922 List<DartType> get typeArguments; |
| 8913 | 8923 |
| 8914 /** | 8924 /** |
| 8915 * Return a list containing all of the type parameters declared for this type. | 8925 * Return a list containing all of the type parameters declared for this type. |
| 8916 */ | 8926 */ |
| 8917 List<TypeParameterElement> get typeParameters; | 8927 List<TypeParameterElement> get typeParameters; |
| 8918 } | 8928 } |
| 8919 | 8929 |
| 8920 /** | 8930 /** |
| 8921 * A parameter element defined in a parameterized type where the values of the | 8931 * A parameter element defined in a parameterized type where the values of the |
| 8922 * type parameters are known. | 8932 * type parameters are known. |
| 8923 */ | 8933 */ |
| 8924 class ParameterMember extends VariableMember implements ParameterElement { | 8934 class ParameterMember extends VariableMember |
| 8935 with ParameterElementMixin |
| 8936 implements ParameterElement { |
| 8925 /** | 8937 /** |
| 8926 * Initialize a newly created element to represent a constructor, based on the | 8938 * Initialize a newly created element to represent a constructor, based on the |
| 8927 * [baseElement], defined by the [definingType]. | 8939 * [baseElement], defined by the [definingType]. |
| 8928 */ | 8940 */ |
| 8929 ParameterMember(ParameterElement baseElement, ParameterizedType definingType) | 8941 ParameterMember(ParameterElement baseElement, ParameterizedType definingType) |
| 8930 : super(baseElement, definingType); | 8942 : super(baseElement, definingType); |
| 8931 | 8943 |
| 8932 @override | 8944 @override |
| 8933 ParameterElement get baseElement => super.baseElement as ParameterElement; | 8945 ParameterElement get baseElement => super.baseElement as ParameterElement; |
| 8934 | 8946 |
| (...skipping 1836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10771 | 10783 |
| 10772 @override | 10784 @override |
| 10773 void visitElement(Element element) { | 10785 void visitElement(Element element) { |
| 10774 int offset = element.nameOffset; | 10786 int offset = element.nameOffset; |
| 10775 if (offset != -1) { | 10787 if (offset != -1) { |
| 10776 map[offset] = element; | 10788 map[offset] = element; |
| 10777 } | 10789 } |
| 10778 super.visitElement(element); | 10790 super.visitElement(element); |
| 10779 } | 10791 } |
| 10780 } | 10792 } |
| OLD | NEW |