| 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 analyzer.src.dart.element.element; | 5 library analyzer.src.dart.element.element; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 * An [AbstractClassElementImpl] which is a class. | 406 * An [AbstractClassElementImpl] which is a class. |
| 407 */ | 407 */ |
| 408 class ClassElementImpl extends AbstractClassElementImpl | 408 class ClassElementImpl extends AbstractClassElementImpl |
| 409 with TypeParameterizedElementMixin { | 409 with TypeParameterizedElementMixin { |
| 410 /** | 410 /** |
| 411 * The unlinked representation of the class in the summary. | 411 * The unlinked representation of the class in the summary. |
| 412 */ | 412 */ |
| 413 final UnlinkedClass _unlinkedClass; | 413 final UnlinkedClass _unlinkedClass; |
| 414 | 414 |
| 415 /** | 415 /** |
| 416 * A list containing all of the type parameters defined for this class. | |
| 417 */ | |
| 418 List<TypeParameterElement> _typeParameters = TypeParameterElement.EMPTY_LIST; | |
| 419 | |
| 420 /** | |
| 421 * The superclass of the class, or `null` for [Object]. | 416 * The superclass of the class, or `null` for [Object]. |
| 422 */ | 417 */ |
| 423 InterfaceType _supertype; | 418 InterfaceType _supertype; |
| 424 | 419 |
| 425 /** | 420 /** |
| 426 * The type defined by the class. | 421 * The type defined by the class. |
| 427 */ | 422 */ |
| 428 InterfaceType _type; | 423 InterfaceType _type; |
| 429 | 424 |
| 430 /** | 425 /** |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 @override | 888 @override |
| 894 InterfaceType get type { | 889 InterfaceType get type { |
| 895 if (_type == null) { | 890 if (_type == null) { |
| 896 InterfaceTypeImpl type = new InterfaceTypeImpl(this); | 891 InterfaceTypeImpl type = new InterfaceTypeImpl(this); |
| 897 type.typeArguments = typeParameterTypes; | 892 type.typeArguments = typeParameterTypes; |
| 898 _type = type; | 893 _type = type; |
| 899 } | 894 } |
| 900 return _type; | 895 return _type; |
| 901 } | 896 } |
| 902 | 897 |
| 903 @override | |
| 904 TypeParameterizedElementMixin get typeParameterContext => this; | |
| 905 | |
| 906 @override | |
| 907 List<TypeParameterElement> get typeParameters { | |
| 908 if (_unlinkedClass != null) { | |
| 909 return super.typeParameters; | |
| 910 } | |
| 911 return _typeParameters; | |
| 912 } | |
| 913 | |
| 914 /** | 898 /** |
| 915 * Set the type parameters defined for this class to the given | 899 * Set the type parameters defined for this class to the given |
| 916 * [typeParameters]. | 900 * [typeParameters]. |
| 917 */ | 901 */ |
| 918 void set typeParameters(List<TypeParameterElement> typeParameters) { | 902 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 919 _assertNotResynthesized(_unlinkedClass); | 903 _assertNotResynthesized(_unlinkedClass); |
| 920 for (TypeParameterElement typeParameter in typeParameters) { | 904 for (TypeParameterElement typeParameter in typeParameters) { |
| 921 (typeParameter as TypeParameterElementImpl).enclosingElement = this; | 905 (typeParameter as TypeParameterElementImpl).enclosingElement = this; |
| 922 } | 906 } |
| 923 this._typeParameters = typeParameters; | 907 this._typeParameterElements = typeParameters; |
| 924 } | 908 } |
| 925 | 909 |
| 926 @override | 910 @override |
| 927 List<UnlinkedTypeParam> get unlinkedTypeParams => | 911 List<UnlinkedTypeParam> get unlinkedTypeParams => |
| 928 _unlinkedClass.typeParameters; | 912 _unlinkedClass?.typeParameters; |
| 929 | 913 |
| 930 @override | 914 @override |
| 931 ConstructorElement get unnamedConstructor { | 915 ConstructorElement get unnamedConstructor { |
| 932 for (ConstructorElement element in constructors) { | 916 for (ConstructorElement element in constructors) { |
| 933 String name = element.displayName; | 917 String name = element.displayName; |
| 934 if (name == null || name.isEmpty) { | 918 if (name == null || name.isEmpty) { |
| 935 return element; | 919 return element; |
| 936 } | 920 } |
| 937 } | 921 } |
| 938 return null; | 922 return null; |
| (...skipping 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3151 ResynthesizerContext context = unit.resynthesizerContext; | 3135 ResynthesizerContext context = unit.resynthesizerContext; |
| 3152 for (int i = 0; i < length; i++) { | 3136 for (int i = 0; i < length; i++) { |
| 3153 annotations[i] = context.buildAnnotation(this, unlinkedConsts[i]); | 3137 annotations[i] = context.buildAnnotation(this, unlinkedConsts[i]); |
| 3154 } | 3138 } |
| 3155 return annotations; | 3139 return annotations; |
| 3156 } else { | 3140 } else { |
| 3157 return const <ElementAnnotation>[]; | 3141 return const <ElementAnnotation>[]; |
| 3158 } | 3142 } |
| 3159 } | 3143 } |
| 3160 | 3144 |
| 3145 /** |
| 3146 * If the element associated with the given [type] is a generic function type |
| 3147 * element, then make it a child of this element. Return the [type] as a |
| 3148 * convenience. |
| 3149 */ |
| 3150 DartType _checkElementOfType(DartType type) { |
| 3151 Element element = type?.element; |
| 3152 if (element is GenericFunctionTypeElementImpl) { |
| 3153 element.enclosingElement = this; |
| 3154 } |
| 3155 return type; |
| 3156 } |
| 3157 |
| 3158 /** |
| 3159 * If the given [type] is a generic function type, then the element associated |
| 3160 * with the type is implicitly a child of this element and should be visted by |
| 3161 * the given [visitor]. |
| 3162 */ |
| 3163 void _safelyVisitPossibleChild(DartType type, ElementVisitor visitor) { |
| 3164 Element element = type?.element; |
| 3165 if (element is GenericFunctionTypeElementImpl) { |
| 3166 element.accept(visitor); |
| 3167 } |
| 3168 } |
| 3169 |
| 3161 static int findElementIndexUsingIdentical(List items, Object item) { | 3170 static int findElementIndexUsingIdentical(List items, Object item) { |
| 3162 int length = items.length; | 3171 int length = items.length; |
| 3163 for (int i = 0; i < length; i++) { | 3172 for (int i = 0; i < length; i++) { |
| 3164 if (identical(items[i], item)) { | 3173 if (identical(items[i], item)) { |
| 3165 return i; | 3174 return i; |
| 3166 } | 3175 } |
| 3167 } | 3176 } |
| 3168 throw new StateError('Unable to find $item in $items'); | 3177 throw new StateError('Unable to find $item in $items'); |
| 3169 } | 3178 } |
| 3170 } | 3179 } |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3583 * element. | 3592 * element. |
| 3584 */ | 3593 */ |
| 3585 List<LocalVariableElement> _localVariables; | 3594 List<LocalVariableElement> _localVariables; |
| 3586 | 3595 |
| 3587 /** | 3596 /** |
| 3588 * A list containing all of the parameters defined by this executable element. | 3597 * A list containing all of the parameters defined by this executable element. |
| 3589 */ | 3598 */ |
| 3590 List<ParameterElement> _parameters; | 3599 List<ParameterElement> _parameters; |
| 3591 | 3600 |
| 3592 /** | 3601 /** |
| 3593 * A list containing all of the type parameters defined for this executable | |
| 3594 * element. | |
| 3595 */ | |
| 3596 List<TypeParameterElement> _typeParameters; | |
| 3597 | |
| 3598 /** | |
| 3599 * The declared return type of this executable element. | 3602 * The declared return type of this executable element. |
| 3600 */ | 3603 */ |
| 3601 DartType _declaredReturnType; | 3604 DartType _declaredReturnType; |
| 3602 | 3605 |
| 3603 /** | 3606 /** |
| 3604 * The inferred return type of this executable element. | 3607 * The inferred return type of this executable element. |
| 3605 */ | 3608 */ |
| 3606 DartType _returnType; | 3609 DartType _returnType; |
| 3607 | 3610 |
| 3608 /** | 3611 /** |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3651 @override | 3654 @override |
| 3652 int get codeOffset { | 3655 int get codeOffset { |
| 3653 if (serializedExecutable != null) { | 3656 if (serializedExecutable != null) { |
| 3654 return serializedExecutable.codeRange?.offset; | 3657 return serializedExecutable.codeRange?.offset; |
| 3655 } | 3658 } |
| 3656 return super.codeOffset; | 3659 return super.codeOffset; |
| 3657 } | 3660 } |
| 3658 | 3661 |
| 3659 void set declaredReturnType(DartType returnType) { | 3662 void set declaredReturnType(DartType returnType) { |
| 3660 _assertNotResynthesized(serializedExecutable); | 3663 _assertNotResynthesized(serializedExecutable); |
| 3661 _declaredReturnType = returnType; | 3664 _declaredReturnType = _checkElementOfType(returnType); |
| 3662 } | 3665 } |
| 3663 | 3666 |
| 3664 @override | 3667 @override |
| 3665 String get displayName { | 3668 String get displayName { |
| 3666 if (serializedExecutable != null) { | 3669 if (serializedExecutable != null) { |
| 3667 return serializedExecutable.name; | 3670 return serializedExecutable.name; |
| 3668 } | 3671 } |
| 3669 return super.displayName; | 3672 return super.displayName; |
| 3670 } | 3673 } |
| 3671 | 3674 |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3882 _declaredReturnType = enclosingUnit.resynthesizerContext.resolveTypeRef( | 3885 _declaredReturnType = enclosingUnit.resynthesizerContext.resolveTypeRef( |
| 3883 serializedExecutable.returnType, typeParameterContext, | 3886 serializedExecutable.returnType, typeParameterContext, |
| 3884 defaultVoid: isSetter && context.analysisOptions.strongMode, | 3887 defaultVoid: isSetter && context.analysisOptions.strongMode, |
| 3885 declaredType: true); | 3888 declaredType: true); |
| 3886 } | 3889 } |
| 3887 return _returnType ?? _declaredReturnType; | 3890 return _returnType ?? _declaredReturnType; |
| 3888 } | 3891 } |
| 3889 | 3892 |
| 3890 void set returnType(DartType returnType) { | 3893 void set returnType(DartType returnType) { |
| 3891 _assertNotResynthesized(serializedExecutable); | 3894 _assertNotResynthesized(serializedExecutable); |
| 3892 _returnType = returnType; | 3895 _returnType = _checkElementOfType(returnType); |
| 3893 } | 3896 } |
| 3894 | 3897 |
| 3895 @override | 3898 @override |
| 3896 FunctionType get type { | 3899 FunctionType get type { |
| 3897 if (serializedExecutable != null) { | 3900 if (serializedExecutable != null) { |
| 3898 _type ??= new FunctionTypeImpl.elementWithNameAndArgs( | 3901 _type ??= new FunctionTypeImpl.elementWithNameAndArgs( |
| 3899 this, null, allEnclosingTypeParameterTypes, false); | 3902 this, null, allEnclosingTypeParameterTypes, false); |
| 3900 } | 3903 } |
| 3901 return _type; | 3904 return _type; |
| 3902 } | 3905 } |
| 3903 | 3906 |
| 3904 void set type(FunctionType type) { | 3907 void set type(FunctionType type) { |
| 3905 _assertNotResynthesized(serializedExecutable); | 3908 _assertNotResynthesized(serializedExecutable); |
| 3906 _type = type; | 3909 _type = type; |
| 3907 } | 3910 } |
| 3908 | 3911 |
| 3909 @override | |
| 3910 TypeParameterizedElementMixin get typeParameterContext => this; | |
| 3911 | |
| 3912 @override | |
| 3913 List<TypeParameterElement> get typeParameters { | |
| 3914 if (serializedExecutable != null) { | |
| 3915 return super.typeParameters; | |
| 3916 } | |
| 3917 return _typeParameters ?? const <TypeParameterElement>[]; | |
| 3918 } | |
| 3919 | |
| 3920 /** | 3912 /** |
| 3921 * Set the type parameters defined by this executable element to the given | 3913 * Set the type parameters defined by this executable element to the given |
| 3922 * [typeParameters]. | 3914 * [typeParameters]. |
| 3923 */ | 3915 */ |
| 3924 void set typeParameters(List<TypeParameterElement> typeParameters) { | 3916 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 3925 _assertNotResynthesized(serializedExecutable); | 3917 _assertNotResynthesized(serializedExecutable); |
| 3926 for (TypeParameterElement parameter in typeParameters) { | 3918 for (TypeParameterElement parameter in typeParameters) { |
| 3927 (parameter as TypeParameterElementImpl).enclosingElement = this; | 3919 (parameter as TypeParameterElementImpl).enclosingElement = this; |
| 3928 } | 3920 } |
| 3929 this._typeParameters = typeParameters; | 3921 this._typeParameterElements = typeParameters; |
| 3930 } | 3922 } |
| 3931 | 3923 |
| 3932 @override | 3924 @override |
| 3933 List<UnlinkedTypeParam> get unlinkedTypeParams => | 3925 List<UnlinkedTypeParam> get unlinkedTypeParams => |
| 3934 serializedExecutable.typeParameters; | 3926 serializedExecutable?.typeParameters; |
| 3935 | 3927 |
| 3936 @override | 3928 @override |
| 3937 void appendTo(StringBuffer buffer) { | 3929 void appendTo(StringBuffer buffer) { |
| 3938 if (this.kind != ElementKind.GETTER) { | 3930 if (this.kind != ElementKind.GETTER) { |
| 3939 int typeParameterCount = typeParameters.length; | 3931 int typeParameterCount = typeParameters.length; |
| 3940 if (typeParameterCount > 0) { | 3932 if (typeParameterCount > 0) { |
| 3941 buffer.write('<'); | 3933 buffer.write('<'); |
| 3942 for (int i = 0; i < typeParameterCount; i++) { | 3934 for (int i = 0; i < typeParameterCount; i++) { |
| 3943 if (i > 0) { | 3935 if (i > 0) { |
| 3944 buffer.write(", "); | 3936 buffer.write(", "); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4010 if (parameterImpl.identifier == identifier) { | 4002 if (parameterImpl.identifier == identifier) { |
| 4011 return parameterImpl; | 4003 return parameterImpl; |
| 4012 } | 4004 } |
| 4013 } | 4005 } |
| 4014 return null; | 4006 return null; |
| 4015 } | 4007 } |
| 4016 | 4008 |
| 4017 @override | 4009 @override |
| 4018 void visitChildren(ElementVisitor visitor) { | 4010 void visitChildren(ElementVisitor visitor) { |
| 4019 super.visitChildren(visitor); | 4011 super.visitChildren(visitor); |
| 4012 _safelyVisitPossibleChild(returnType, visitor); |
| 4020 safelyVisitChildren(typeParameters, visitor); | 4013 safelyVisitChildren(typeParameters, visitor); |
| 4021 safelyVisitChildren(parameters, visitor); | 4014 safelyVisitChildren(parameters, visitor); |
| 4022 safelyVisitChildren(_functions, visitor); | 4015 safelyVisitChildren(functions, visitor); |
| 4023 safelyVisitChildren(_labels, visitor); | 4016 safelyVisitChildren(labels, visitor); |
| 4024 safelyVisitChildren(_localVariables, visitor); | 4017 safelyVisitChildren(localVariables, visitor); |
| 4025 } | 4018 } |
| 4026 } | 4019 } |
| 4027 | 4020 |
| 4028 /** | 4021 /** |
| 4029 * A concrete implementation of an [ExportElement]. | 4022 * A concrete implementation of an [ExportElement]. |
| 4030 */ | 4023 */ |
| 4031 class ExportElementImpl extends UriReferencedElementImpl | 4024 class ExportElementImpl extends UriReferencedElementImpl |
| 4032 implements ExportElement { | 4025 implements ExportElement { |
| 4033 /** | 4026 /** |
| 4034 * The unlinked representation of the export in the summary. | 4027 * The unlinked representation of the export in the summary. |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4498 this._parameters = parameters; | 4491 this._parameters = parameters; |
| 4499 } | 4492 } |
| 4500 | 4493 |
| 4501 /** | 4494 /** |
| 4502 * Set the type parameters defined by this type alias to the given | 4495 * Set the type parameters defined by this type alias to the given |
| 4503 * [parameters] without becoming the parent of the parameters. This should | 4496 * [parameters] without becoming the parent of the parameters. This should |
| 4504 * only be used by the [TypeResolverVisitor] when creating a synthetic type | 4497 * only be used by the [TypeResolverVisitor] when creating a synthetic type |
| 4505 * alias. | 4498 * alias. |
| 4506 */ | 4499 */ |
| 4507 void shareTypeParameters(List<TypeParameterElement> typeParameters) { | 4500 void shareTypeParameters(List<TypeParameterElement> typeParameters) { |
| 4508 this._typeParameters = typeParameters; | 4501 this._typeParameterElements = typeParameters; |
| 4509 } | 4502 } |
| 4510 | 4503 |
| 4511 /** | 4504 /** |
| 4512 * Create and return [FunctionElement]s for the given [unlinkedFunctions]. | 4505 * Create and return [FunctionElement]s for the given [unlinkedFunctions]. |
| 4513 */ | 4506 */ |
| 4514 static List<FunctionElement> resynthesizeList( | 4507 static List<FunctionElement> resynthesizeList( |
| 4515 ExecutableElementImpl executableElement, | 4508 ExecutableElementImpl executableElement, |
| 4516 List<UnlinkedExecutable> unlinkedFunctions) { | 4509 List<UnlinkedExecutable> unlinkedFunctions) { |
| 4517 int length = unlinkedFunctions.length; | 4510 int length = unlinkedFunctions.length; |
| 4518 if (length != 0) { | 4511 if (length != 0) { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4627 * The return type defined by this type alias. | 4620 * The return type defined by this type alias. |
| 4628 */ | 4621 */ |
| 4629 DartType _returnType; | 4622 DartType _returnType; |
| 4630 | 4623 |
| 4631 /** | 4624 /** |
| 4632 * The type of function defined by this type alias. | 4625 * The type of function defined by this type alias. |
| 4633 */ | 4626 */ |
| 4634 FunctionType _type; | 4627 FunctionType _type; |
| 4635 | 4628 |
| 4636 /** | 4629 /** |
| 4637 * A list containing all of the type parameters defined for this type. | |
| 4638 */ | |
| 4639 List<TypeParameterElement> _typeParameters = TypeParameterElement.EMPTY_LIST; | |
| 4640 | |
| 4641 /** | |
| 4642 * Initialize a newly created type alias element to have the given name. | 4630 * Initialize a newly created type alias element to have the given name. |
| 4643 * | 4631 * |
| 4644 * [name] the name of this element | 4632 * [name] the name of this element |
| 4645 * [nameOffset] the offset of the name of this element in the file that | 4633 * [nameOffset] the offset of the name of this element in the file that |
| 4646 * contains the declaration of this element | 4634 * contains the declaration of this element |
| 4647 */ | 4635 */ |
| 4648 FunctionTypeAliasElementImpl(String name, int nameOffset) | 4636 FunctionTypeAliasElementImpl(String name, int nameOffset) |
| 4649 : _unlinkedTypedef = null, | 4637 : _unlinkedTypedef = null, |
| 4650 super(name, nameOffset); | 4638 super(name, nameOffset); |
| 4651 | 4639 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4757 if (_unlinkedTypedef != null && _returnType == null) { | 4745 if (_unlinkedTypedef != null && _returnType == null) { |
| 4758 _returnType = enclosingUnit.resynthesizerContext.resolveTypeRef( | 4746 _returnType = enclosingUnit.resynthesizerContext.resolveTypeRef( |
| 4759 _unlinkedTypedef.returnType, this, | 4747 _unlinkedTypedef.returnType, this, |
| 4760 declaredType: true); | 4748 declaredType: true); |
| 4761 } | 4749 } |
| 4762 return _returnType; | 4750 return _returnType; |
| 4763 } | 4751 } |
| 4764 | 4752 |
| 4765 void set returnType(DartType returnType) { | 4753 void set returnType(DartType returnType) { |
| 4766 _assertNotResynthesized(_unlinkedTypedef); | 4754 _assertNotResynthesized(_unlinkedTypedef); |
| 4767 _returnType = returnType; | 4755 _returnType = _checkElementOfType(returnType); |
| 4768 } | 4756 } |
| 4769 | 4757 |
| 4770 @override | 4758 @override |
| 4771 FunctionType get type { | 4759 FunctionType get type { |
| 4772 if (_unlinkedTypedef != null && _type == null) { | 4760 if (_unlinkedTypedef != null && _type == null) { |
| 4773 _type = new FunctionTypeImpl.forTypedef(this); | 4761 _type = new FunctionTypeImpl.forTypedef(this); |
| 4774 } | 4762 } |
| 4775 return _type; | 4763 return _type; |
| 4776 } | 4764 } |
| 4777 | 4765 |
| 4778 void set type(FunctionType type) { | 4766 void set type(FunctionType type) { |
| 4779 _assertNotResynthesized(_unlinkedTypedef); | 4767 _assertNotResynthesized(_unlinkedTypedef); |
| 4780 _type = type; | 4768 _type = type; |
| 4781 } | 4769 } |
| 4782 | 4770 |
| 4783 @override | |
| 4784 TypeParameterizedElementMixin get typeParameterContext => this; | |
| 4785 | |
| 4786 @override | |
| 4787 List<TypeParameterElement> get typeParameters { | |
| 4788 if (_unlinkedTypedef != null) { | |
| 4789 return super.typeParameters; | |
| 4790 } | |
| 4791 return _typeParameters; | |
| 4792 } | |
| 4793 | |
| 4794 /** | 4771 /** |
| 4795 * Set the type parameters defined for this type to the given | 4772 * Set the type parameters defined for this type to the given |
| 4796 * [typeParameters]. | 4773 * [typeParameters]. |
| 4797 */ | 4774 */ |
| 4798 void set typeParameters(List<TypeParameterElement> typeParameters) { | 4775 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 4799 _assertNotResynthesized(_unlinkedTypedef); | 4776 _assertNotResynthesized(_unlinkedTypedef); |
| 4800 for (TypeParameterElement typeParameter in typeParameters) { | 4777 for (TypeParameterElement typeParameter in typeParameters) { |
| 4801 (typeParameter as TypeParameterElementImpl).enclosingElement = this; | 4778 (typeParameter as TypeParameterElementImpl).enclosingElement = this; |
| 4802 } | 4779 } |
| 4803 this._typeParameters = typeParameters; | 4780 this._typeParameterElements = typeParameters; |
| 4804 } | 4781 } |
| 4805 | 4782 |
| 4806 @override | 4783 @override |
| 4807 List<UnlinkedTypeParam> get unlinkedTypeParams => | 4784 List<UnlinkedTypeParam> get unlinkedTypeParams => |
| 4808 _unlinkedTypedef.typeParameters; | 4785 _unlinkedTypedef?.typeParameters; |
| 4809 | 4786 |
| 4810 @override | 4787 @override |
| 4811 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => | 4788 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => |
| 4812 visitor.visitFunctionTypeAliasElement(this); | 4789 visitor.visitFunctionTypeAliasElement(this); |
| 4813 | 4790 |
| 4814 @override | 4791 @override |
| 4815 void appendTo(StringBuffer buffer) { | 4792 void appendTo(StringBuffer buffer) { |
| 4816 buffer.write("typedef "); | 4793 buffer.write("typedef "); |
| 4817 buffer.write(displayName); | 4794 buffer.write(displayName); |
| 4818 int typeParameterCount = _typeParameters.length; | 4795 List<TypeParameterElement> typeParameters = this.typeParameters; |
| 4796 int typeParameterCount = typeParameters.length; |
| 4819 if (typeParameterCount > 0) { | 4797 if (typeParameterCount > 0) { |
| 4820 buffer.write("<"); | 4798 buffer.write("<"); |
| 4821 for (int i = 0; i < typeParameterCount; i++) { | 4799 for (int i = 0; i < typeParameterCount; i++) { |
| 4822 if (i > 0) { | 4800 if (i > 0) { |
| 4823 buffer.write(", "); | 4801 buffer.write(", "); |
| 4824 } | 4802 } |
| 4825 (_typeParameters[i] as TypeParameterElementImpl).appendTo(buffer); | 4803 (typeParameters[i] as TypeParameterElementImpl).appendTo(buffer); |
| 4826 } | 4804 } |
| 4827 buffer.write(">"); | 4805 buffer.write(">"); |
| 4828 } | 4806 } |
| 4829 buffer.write("("); | 4807 buffer.write("("); |
| 4830 List<ParameterElement> parameterList = parameters; | 4808 List<ParameterElement> parameterList = parameters; |
| 4831 int parameterCount = parameterList.length; | 4809 int parameterCount = parameterList.length; |
| 4832 for (int i = 0; i < parameterCount; i++) { | 4810 for (int i = 0; i < parameterCount; i++) { |
| 4833 if (i > 0) { | 4811 if (i > 0) { |
| 4834 buffer.write(", "); | 4812 buffer.write(", "); |
| 4835 } | 4813 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 4850 getNodeMatching((node) => node is FunctionTypeAlias); | 4828 getNodeMatching((node) => node is FunctionTypeAlias); |
| 4851 | 4829 |
| 4852 @override | 4830 @override |
| 4853 ElementImpl getChild(String identifier) { | 4831 ElementImpl getChild(String identifier) { |
| 4854 for (ParameterElement parameter in parameters) { | 4832 for (ParameterElement parameter in parameters) { |
| 4855 ParameterElementImpl parameterImpl = parameter; | 4833 ParameterElementImpl parameterImpl = parameter; |
| 4856 if (parameterImpl.identifier == identifier) { | 4834 if (parameterImpl.identifier == identifier) { |
| 4857 return parameterImpl; | 4835 return parameterImpl; |
| 4858 } | 4836 } |
| 4859 } | 4837 } |
| 4860 for (TypeParameterElement typeParameter in _typeParameters) { | 4838 for (TypeParameterElement typeParameter in typeParameters) { |
| 4861 TypeParameterElementImpl typeParameterImpl = typeParameter; | 4839 TypeParameterElementImpl typeParameterImpl = typeParameter; |
| 4862 if (typeParameterImpl.identifier == identifier) { | 4840 if (typeParameterImpl.identifier == identifier) { |
| 4863 return typeParameterImpl; | 4841 return typeParameterImpl; |
| 4864 } | 4842 } |
| 4865 } | 4843 } |
| 4866 return null; | 4844 return null; |
| 4867 } | 4845 } |
| 4868 | 4846 |
| 4869 @override | 4847 @override |
| 4870 void visitChildren(ElementVisitor visitor) { | 4848 void visitChildren(ElementVisitor visitor) { |
| 4871 super.visitChildren(visitor); | 4849 super.visitChildren(visitor); |
| 4850 _safelyVisitPossibleChild(returnType, visitor); |
| 4872 safelyVisitChildren(parameters, visitor); | 4851 safelyVisitChildren(parameters, visitor); |
| 4873 safelyVisitChildren(typeParameters, visitor); | 4852 safelyVisitChildren(typeParameters, visitor); |
| 4874 } | 4853 } |
| 4875 } | 4854 } |
| 4876 | 4855 |
| 4877 /** | 4856 /** |
| 4857 * The element used for a generic function type. |
| 4858 * |
| 4859 * Clients may not extend, implement or mix-in this class. |
| 4860 */ |
| 4861 class GenericFunctionTypeElementImpl extends ElementImpl |
| 4862 with TypeParameterizedElementMixin |
| 4863 implements GenericFunctionTypeElement { |
| 4864 /** |
| 4865 * The unlinked representation of the generic function type in the summary. |
| 4866 */ |
| 4867 UnlinkedGenericFunctionType _unlinkedGenericFunctionType; |
| 4868 |
| 4869 /** |
| 4870 * The declared return type of the function. |
| 4871 */ |
| 4872 DartType _returnType; |
| 4873 |
| 4874 /** |
| 4875 * The elements representing the parameters of the function. |
| 4876 */ |
| 4877 List<ParameterElement> _parameters; |
| 4878 |
| 4879 /** |
| 4880 * The type defined by this element. |
| 4881 */ |
| 4882 FunctionType _type; |
| 4883 |
| 4884 /** |
| 4885 * Initialize a newly created function element to have no name and the given |
| 4886 * [nameOffset]. This is used for function expressions, that have no name. |
| 4887 */ |
| 4888 GenericFunctionTypeElementImpl.forOffset(int nameOffset) |
| 4889 : super("", nameOffset); |
| 4890 |
| 4891 /** |
| 4892 * Initialize from serialized information. |
| 4893 */ |
| 4894 GenericFunctionTypeElementImpl.forSerialized(ElementImpl enclosingElement) |
| 4895 : super.forSerialized(enclosingElement); |
| 4896 |
| 4897 @override |
| 4898 TypeParameterizedElementMixin get enclosingTypeParameterContext => |
| 4899 (enclosingElement as ElementImpl).typeParameterContext; |
| 4900 |
| 4901 @override |
| 4902 ElementKind get kind => ElementKind.GENERIC_FUNCTION_TYPE; |
| 4903 |
| 4904 @override |
| 4905 List<ParameterElement> get parameters { |
| 4906 if (_unlinkedGenericFunctionType != null) { |
| 4907 _parameters ??= ParameterElementImpl.resynthesizeList( |
| 4908 _unlinkedGenericFunctionType.parameters, this); |
| 4909 } |
| 4910 return _parameters ?? const <ParameterElement>[]; |
| 4911 } |
| 4912 |
| 4913 /** |
| 4914 * Set the parameters defined by this function type element to the given |
| 4915 * [parameters]. |
| 4916 */ |
| 4917 void set parameters(List<ParameterElement> parameters) { |
| 4918 _assertNotResynthesized(_unlinkedGenericFunctionType); |
| 4919 for (ParameterElement parameter in parameters) { |
| 4920 (parameter as ParameterElementImpl).enclosingElement = this; |
| 4921 } |
| 4922 this._parameters = parameters; |
| 4923 } |
| 4924 |
| 4925 @override |
| 4926 DartType get returnType { |
| 4927 if (_unlinkedGenericFunctionType != null && _returnType == null) { |
| 4928 _returnType = enclosingUnit.resynthesizerContext.resolveTypeRef( |
| 4929 _unlinkedGenericFunctionType.returnType, typeParameterContext, |
| 4930 defaultVoid: false, declaredType: true); |
| 4931 } |
| 4932 return _returnType; |
| 4933 } |
| 4934 |
| 4935 /** |
| 4936 * Set the return type defined by this function type element to the given |
| 4937 * [returnType]. |
| 4938 */ |
| 4939 void set returnType(DartType returnType) { |
| 4940 _assertNotResynthesized(_unlinkedGenericFunctionType); |
| 4941 _returnType = _checkElementOfType(returnType); |
| 4942 } |
| 4943 |
| 4944 @override |
| 4945 FunctionType get type { |
| 4946 if (_unlinkedGenericFunctionType != null) { |
| 4947 _type ??= new FunctionTypeImpl.elementWithNameAndArgs( |
| 4948 this, null, allEnclosingTypeParameterTypes, false); |
| 4949 } |
| 4950 return _type; |
| 4951 } |
| 4952 |
| 4953 /** |
| 4954 * Set the function type defined by this function type element to the given |
| 4955 * [type]. |
| 4956 */ |
| 4957 void set type(FunctionType type) { |
| 4958 _assertNotResynthesized(_unlinkedGenericFunctionType); |
| 4959 _type = type; |
| 4960 } |
| 4961 |
| 4962 /** |
| 4963 * Set the type parameters defined by this function type element to the given |
| 4964 * [typeParameters]. |
| 4965 */ |
| 4966 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 4967 _assertNotResynthesized(_unlinkedGenericFunctionType); |
| 4968 for (TypeParameterElement parameter in typeParameters) { |
| 4969 (parameter as TypeParameterElementImpl).enclosingElement = this; |
| 4970 } |
| 4971 this._typeParameterElements = typeParameters; |
| 4972 } |
| 4973 |
| 4974 @override |
| 4975 List<UnlinkedTypeParam> get unlinkedTypeParams => |
| 4976 _unlinkedGenericFunctionType?.typeParameters; |
| 4977 |
| 4978 @override |
| 4979 T accept<T>(ElementVisitor<T> visitor) { |
| 4980 return visitor.visitGenericFunctionTypeElement(this); |
| 4981 } |
| 4982 |
| 4983 @override |
| 4984 void appendTo(StringBuffer buffer) { |
| 4985 DartType type = returnType; |
| 4986 if (type is TypeImpl) { |
| 4987 type.appendTo(buffer, new HashSet<TypeImpl>()); |
| 4988 buffer.write(' Function'); |
| 4989 } else { |
| 4990 buffer.write('Function'); |
| 4991 } |
| 4992 List<TypeParameterElement> typeParams = typeParameters; |
| 4993 int typeParameterCount = typeParams.length; |
| 4994 if (typeParameterCount > 0) { |
| 4995 buffer.write('<'); |
| 4996 for (int i = 0; i < typeParameterCount; i++) { |
| 4997 if (i > 0) { |
| 4998 buffer.write(', '); |
| 4999 } |
| 5000 (typeParams[i] as TypeParameterElementImpl).appendTo(buffer); |
| 5001 } |
| 5002 buffer.write('>'); |
| 5003 } |
| 5004 List<ParameterElement> params = parameters; |
| 5005 buffer.write('('); |
| 5006 for (int i = 0; i < params.length; i++) { |
| 5007 if (i > 0) { |
| 5008 buffer.write(', '); |
| 5009 } |
| 5010 (params[i] as ParameterElementImpl).appendTo(buffer); |
| 5011 } |
| 5012 buffer.write(')'); |
| 5013 } |
| 5014 |
| 5015 @override |
| 5016 void visitChildren(ElementVisitor visitor) { |
| 5017 super.visitChildren(visitor); |
| 5018 _safelyVisitPossibleChild(returnType, visitor); |
| 5019 safelyVisitChildren(typeParameters, visitor); |
| 5020 safelyVisitChildren(parameters, visitor); |
| 5021 } |
| 5022 } |
| 5023 |
| 5024 /** |
| 4878 * A function type alias of the form | 5025 * A function type alias of the form |
| 4879 * `typedef` identifier typeParameters = genericFunctionType; | 5026 * `typedef` identifier typeParameters = genericFunctionType; |
| 4880 * | 5027 * |
| 4881 * Clients may not extend, implement or mix-in this class. | 5028 * Clients may not extend, implement or mix-in this class. |
| 4882 */ | 5029 */ |
| 4883 class GenericTypeAliasElementImpl extends ElementImpl | 5030 class GenericTypeAliasElementImpl extends ElementImpl |
| 4884 with TypeParameterizedElementMixin | 5031 with TypeParameterizedElementMixin |
| 4885 implements FunctionTypeAliasElement { | 5032 implements FunctionTypeAliasElement { |
| 4886 /** | 5033 /** |
| 4887 * The unlinked representation of the type in the summary. | 5034 * The unlinked representation of the type in the summary. |
| 4888 */ | 5035 */ |
| 4889 final UnlinkedTypedef _unlinkedTypedef; | 5036 final UnlinkedTypedef _unlinkedTypedef; |
| 4890 | 5037 |
| 4891 /** | 5038 /** |
| 4892 * The element representing the generic function type if this is a generic | 5039 * The element representing the generic function type if this is a generic |
| 4893 * function type alias, or `null` if it isn't. | 5040 * function type alias, or `null` if it isn't. |
| 4894 */ | 5041 */ |
| 4895 FunctionElement _function; | 5042 FunctionElement _function; |
| 4896 | 5043 |
| 4897 /** | 5044 /** |
| 4898 * The type of function defined by this type alias. | 5045 * The type of function defined by this type alias. |
| 4899 */ | 5046 */ |
| 4900 FunctionType _type; | 5047 FunctionType _type; |
| 4901 | 5048 |
| 4902 /** | 5049 /** |
| 4903 * A list containing all of the type parameters defined for this type. | |
| 4904 */ | |
| 4905 List<TypeParameterElement> _typeParameters = TypeParameterElement.EMPTY_LIST; | |
| 4906 | |
| 4907 /** | |
| 4908 * Initialize a newly created type alias element to have the given [name]. | 5050 * Initialize a newly created type alias element to have the given [name]. |
| 4909 */ | 5051 */ |
| 4910 GenericTypeAliasElementImpl.forNode(Identifier name) | 5052 GenericTypeAliasElementImpl.forNode(Identifier name) |
| 4911 : _unlinkedTypedef = null, | 5053 : _unlinkedTypedef = null, |
| 4912 super.forNode(name); | 5054 super.forNode(name); |
| 4913 | 5055 |
| 4914 /** | 5056 /** |
| 4915 * Initialize using the given serialized information. | 5057 * Initialize using the given serialized information. |
| 4916 */ | 5058 */ |
| 4917 GenericTypeAliasElementImpl.forSerialized( | 5059 GenericTypeAliasElementImpl.forSerialized( |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5025 _type = new FunctionTypeImpl.forTypedef(this); | 5167 _type = new FunctionTypeImpl.forTypedef(this); |
| 5026 } | 5168 } |
| 5027 return _type; | 5169 return _type; |
| 5028 } | 5170 } |
| 5029 | 5171 |
| 5030 void set type(FunctionType type) { | 5172 void set type(FunctionType type) { |
| 5031 _assertNotResynthesized(_unlinkedTypedef); | 5173 _assertNotResynthesized(_unlinkedTypedef); |
| 5032 _type = type; | 5174 _type = type; |
| 5033 } | 5175 } |
| 5034 | 5176 |
| 5035 @override | |
| 5036 TypeParameterizedElementMixin get typeParameterContext => this; | |
| 5037 | |
| 5038 @override | |
| 5039 List<TypeParameterElement> get typeParameters { | |
| 5040 if (_unlinkedTypedef != null) { | |
| 5041 return super.typeParameters; | |
| 5042 } | |
| 5043 return _typeParameters; | |
| 5044 } | |
| 5045 | |
| 5046 /** | 5177 /** |
| 5047 * Set the type parameters defined for this type to the given | 5178 * Set the type parameters defined for this type to the given |
| 5048 * [typeParameters]. | 5179 * [typeParameters]. |
| 5049 */ | 5180 */ |
| 5050 void set typeParameters(List<TypeParameterElement> typeParameters) { | 5181 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 5051 _assertNotResynthesized(_unlinkedTypedef); | 5182 _assertNotResynthesized(_unlinkedTypedef); |
| 5052 for (TypeParameterElement typeParameter in typeParameters) { | 5183 for (TypeParameterElement typeParameter in typeParameters) { |
| 5053 (typeParameter as TypeParameterElementImpl).enclosingElement = this; | 5184 (typeParameter as TypeParameterElementImpl).enclosingElement = this; |
| 5054 } | 5185 } |
| 5055 this._typeParameters = typeParameters; | 5186 this._typeParameterElements = typeParameters; |
| 5056 } | 5187 } |
| 5057 | 5188 |
| 5058 @override | 5189 @override |
| 5059 List<UnlinkedTypeParam> get unlinkedTypeParams => | 5190 List<UnlinkedTypeParam> get unlinkedTypeParams => |
| 5060 _unlinkedTypedef.typeParameters; | 5191 _unlinkedTypedef?.typeParameters; |
| 5061 | 5192 |
| 5062 @override | 5193 @override |
| 5063 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => | 5194 /*=T*/ accept/*<T>*/(ElementVisitor<dynamic/*=T*/ > visitor) => |
| 5064 visitor.visitFunctionTypeAliasElement(this); | 5195 visitor.visitFunctionTypeAliasElement(this); |
| 5065 | 5196 |
| 5066 @override | 5197 @override |
| 5067 void appendTo(StringBuffer buffer) { | 5198 void appendTo(StringBuffer buffer) { |
| 5068 buffer.write("typedef "); | 5199 buffer.write("typedef "); |
| 5069 buffer.write(displayName); | 5200 buffer.write(displayName); |
| 5070 int typeParameterCount = _typeParameters.length; | 5201 var typeParameters = this.typeParameters; |
| 5202 int typeParameterCount = typeParameters.length; |
| 5071 if (typeParameterCount > 0) { | 5203 if (typeParameterCount > 0) { |
| 5072 buffer.write("<"); | 5204 buffer.write("<"); |
| 5073 for (int i = 0; i < typeParameterCount; i++) { | 5205 for (int i = 0; i < typeParameterCount; i++) { |
| 5074 if (i > 0) { | 5206 if (i > 0) { |
| 5075 buffer.write(", "); | 5207 buffer.write(", "); |
| 5076 } | 5208 } |
| 5077 (_typeParameters[i] as TypeParameterElementImpl).appendTo(buffer); | 5209 (typeParameters[i] as TypeParameterElementImpl).appendTo(buffer); |
| 5078 } | 5210 } |
| 5079 buffer.write(">"); | 5211 buffer.write(">"); |
| 5080 } | 5212 } |
| 5081 buffer.write(" = "); | 5213 buffer.write(" = "); |
| 5082 (function as FunctionElementImpl).appendTo(buffer); | 5214 (function as FunctionElementImpl).appendTo(buffer); |
| 5083 } | 5215 } |
| 5084 | 5216 |
| 5085 @override | 5217 @override |
| 5086 FunctionTypeAlias computeNode() => | 5218 FunctionTypeAlias computeNode() => |
| 5087 getNodeMatching((node) => node is GenericTypeAlias); | 5219 getNodeMatching((node) => node is GenericTypeAlias); |
| 5088 | 5220 |
| 5089 @override | 5221 @override |
| 5090 ElementImpl getChild(String identifier) { | 5222 ElementImpl getChild(String identifier) { |
| 5091 for (TypeParameterElement typeParameter in _typeParameters) { | 5223 for (TypeParameterElement typeParameter in typeParameters) { |
| 5092 TypeParameterElementImpl typeParameterImpl = typeParameter; | 5224 TypeParameterElementImpl typeParameterImpl = typeParameter; |
| 5093 if (typeParameterImpl.identifier == identifier) { | 5225 if (typeParameterImpl.identifier == identifier) { |
| 5094 return typeParameterImpl; | 5226 return typeParameterImpl; |
| 5095 } | 5227 } |
| 5096 } | 5228 } |
| 5097 return null; | 5229 return null; |
| 5098 } | 5230 } |
| 5099 | 5231 |
| 5100 @override | 5232 @override |
| 5101 void visitChildren(ElementVisitor visitor) { | 5233 void visitChildren(ElementVisitor visitor) { |
| (...skipping 2035 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7137 _declaredType = enclosingUnit.resynthesizerContext.resolveTypeRef( | 7269 _declaredType = enclosingUnit.resynthesizerContext.resolveTypeRef( |
| 7138 _unlinkedVariable.type, typeParameterContext, | 7270 _unlinkedVariable.type, typeParameterContext, |
| 7139 declaredType: true); | 7271 declaredType: true); |
| 7140 } | 7272 } |
| 7141 return super.type; | 7273 return super.type; |
| 7142 } | 7274 } |
| 7143 | 7275 |
| 7144 @override | 7276 @override |
| 7145 void set type(DartType type) { | 7277 void set type(DartType type) { |
| 7146 _assertNotResynthesized(_unlinkedVariable); | 7278 _assertNotResynthesized(_unlinkedVariable); |
| 7147 _type = type; | 7279 _type = _checkElementOfType(type); |
| 7148 } | 7280 } |
| 7149 | 7281 |
| 7150 /** | 7282 /** |
| 7151 * Subclasses need this getter, see [ConstVariableElement._unlinkedConst]. | 7283 * Subclasses need this getter, see [ConstVariableElement._unlinkedConst]. |
| 7152 */ | 7284 */ |
| 7153 UnlinkedExpr get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr; | 7285 UnlinkedExpr get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr; |
| 7154 } | 7286 } |
| 7155 | 7287 |
| 7156 /** | 7288 /** |
| 7157 * A concrete implementation of a [ParameterElement]. | 7289 * A concrete implementation of a [ParameterElement]. |
| (...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8114 DartType get propagatedType { | 8246 DartType get propagatedType { |
| 8115 if (_unlinkedVariable != null && _propagatedType == null) { | 8247 if (_unlinkedVariable != null && _propagatedType == null) { |
| 8116 _propagatedType = enclosingUnit.resynthesizerContext.resolveLinkedType( | 8248 _propagatedType = enclosingUnit.resynthesizerContext.resolveLinkedType( |
| 8117 _unlinkedVariable.propagatedTypeSlot, typeParameterContext); | 8249 _unlinkedVariable.propagatedTypeSlot, typeParameterContext); |
| 8118 } | 8250 } |
| 8119 return _propagatedType; | 8251 return _propagatedType; |
| 8120 } | 8252 } |
| 8121 | 8253 |
| 8122 void set propagatedType(DartType propagatedType) { | 8254 void set propagatedType(DartType propagatedType) { |
| 8123 _assertNotResynthesized(_unlinkedVariable); | 8255 _assertNotResynthesized(_unlinkedVariable); |
| 8124 _propagatedType = propagatedType; | 8256 _propagatedType = _checkElementOfType(propagatedType); |
| 8125 } | 8257 } |
| 8126 | 8258 |
| 8127 @override | 8259 @override |
| 8128 DartType get type { | 8260 DartType get type { |
| 8129 if (isSynthetic && _type == null) { | 8261 if (isSynthetic && _type == null) { |
| 8130 if (getter != null) { | 8262 if (getter != null) { |
| 8131 _type = getter.returnType; | 8263 _type = getter.returnType; |
| 8132 } else if (setter != null) { | 8264 } else if (setter != null) { |
| 8133 List<ParameterElement> parameters = setter.parameters; | 8265 List<ParameterElement> parameters = setter.parameters; |
| 8134 _type = parameters.isNotEmpty | 8266 _type = parameters.isNotEmpty |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8403 } | 8535 } |
| 8404 return _bound ??= enclosingUnit.resynthesizerContext.resolveTypeRef( | 8536 return _bound ??= enclosingUnit.resynthesizerContext.resolveTypeRef( |
| 8405 _unlinkedTypeParam.bound, enclosingElement, | 8537 _unlinkedTypeParam.bound, enclosingElement, |
| 8406 instantiateToBoundsAllowed: false, declaredType: true); | 8538 instantiateToBoundsAllowed: false, declaredType: true); |
| 8407 } | 8539 } |
| 8408 return _bound; | 8540 return _bound; |
| 8409 } | 8541 } |
| 8410 | 8542 |
| 8411 void set bound(DartType bound) { | 8543 void set bound(DartType bound) { |
| 8412 _assertNotResynthesized(_unlinkedTypeParam); | 8544 _assertNotResynthesized(_unlinkedTypeParam); |
| 8413 _bound = bound; | 8545 _bound = _checkElementOfType(bound); |
| 8414 } | 8546 } |
| 8415 | 8547 |
| 8416 @override | 8548 @override |
| 8417 int get codeLength { | 8549 int get codeLength { |
| 8418 if (_unlinkedTypeParam != null) { | 8550 if (_unlinkedTypeParam != null) { |
| 8419 return _unlinkedTypeParam.codeRange?.length; | 8551 return _unlinkedTypeParam.codeRange?.length; |
| 8420 } | 8552 } |
| 8421 return super.codeLength; | 8553 return super.codeLength; |
| 8422 } | 8554 } |
| 8423 | 8555 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8484 buffer.write(bound); | 8616 buffer.write(bound); |
| 8485 } | 8617 } |
| 8486 } | 8618 } |
| 8487 } | 8619 } |
| 8488 | 8620 |
| 8489 /** | 8621 /** |
| 8490 * Mixin representing an element which can have type parameters. | 8622 * Mixin representing an element which can have type parameters. |
| 8491 */ | 8623 */ |
| 8492 abstract class TypeParameterizedElementMixin | 8624 abstract class TypeParameterizedElementMixin |
| 8493 implements TypeParameterizedElement, ElementImpl { | 8625 implements TypeParameterizedElement, ElementImpl { |
| 8626 /** |
| 8627 * The cached number of type parameters that are in scope in this context, or |
| 8628 * `null` if the number has not yet been computed. |
| 8629 */ |
| 8494 int _nestingLevel; | 8630 int _nestingLevel; |
| 8631 |
| 8632 /** |
| 8633 * A cached list containing the type parameters declared by this element |
| 8634 * directly, or `null` if the elements have not been created yet. This does |
| 8635 * not include type parameters that are declared by any enclosing elements. |
| 8636 */ |
| 8495 List<TypeParameterElement> _typeParameterElements; | 8637 List<TypeParameterElement> _typeParameterElements; |
| 8638 |
| 8639 /** |
| 8640 * A cached list containing the type parameter types declared by this element |
| 8641 * directly, or `null` if the list has not been computed yet. |
| 8642 */ |
| 8496 List<TypeParameterType> _typeParameterTypes; | 8643 List<TypeParameterType> _typeParameterTypes; |
| 8644 |
| 8645 /** |
| 8646 * A cached list containing all of the type parameter types of this element, |
| 8647 * including those declared by this element directly and those declared by any |
| 8648 * enclosing elements, or `null` if the list has not been computed yet. |
| 8649 */ |
| 8497 List<TypeParameterType> _allTypeParameterTypes; | 8650 List<TypeParameterType> _allTypeParameterTypes; |
| 8498 | 8651 |
| 8499 /** | 8652 /** |
| 8500 * Return all type parameter types of the element that encloses element. | 8653 * Return all type parameter types of the element that encloses element. |
| 8501 * Not `null`, but might be empty for top-level and static class members. | 8654 * Not `null`, but might be empty for top-level and static class members. |
| 8502 */ | 8655 */ |
| 8503 List<TypeParameterType> get allEnclosingTypeParameterTypes { | 8656 List<TypeParameterType> get allEnclosingTypeParameterTypes { |
| 8504 return enclosingTypeParameterContext?.allTypeParameterTypes ?? | 8657 return enclosingTypeParameterContext?.allTypeParameterTypes ?? |
| 8505 const <TypeParameterType>[]; | 8658 const <TypeParameterType>[]; |
| 8506 } | 8659 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8523 /** | 8676 /** |
| 8524 * Get the type parameter context enclosing this one, if any. | 8677 * Get the type parameter context enclosing this one, if any. |
| 8525 */ | 8678 */ |
| 8526 TypeParameterizedElementMixin get enclosingTypeParameterContext; | 8679 TypeParameterizedElementMixin get enclosingTypeParameterContext; |
| 8527 | 8680 |
| 8528 /** | 8681 /** |
| 8529 * The unit in which this element is resynthesized. | 8682 * The unit in which this element is resynthesized. |
| 8530 */ | 8683 */ |
| 8531 CompilationUnitElementImpl get enclosingUnit; | 8684 CompilationUnitElementImpl get enclosingUnit; |
| 8532 | 8685 |
| 8686 @override |
| 8687 TypeParameterizedElementMixin get typeParameterContext => this; |
| 8688 |
| 8533 /** | 8689 /** |
| 8534 * Find out how many type parameters are in scope in this context. | 8690 * Find out how many type parameters are in scope in this context. |
| 8535 */ | 8691 */ |
| 8536 int get typeParameterNestingLevel => | 8692 int get typeParameterNestingLevel => |
| 8537 _nestingLevel ??= unlinkedTypeParams.length + | 8693 _nestingLevel ??= unlinkedTypeParams.length + |
| 8538 (enclosingTypeParameterContext?.typeParameterNestingLevel ?? 0); | 8694 (enclosingTypeParameterContext?.typeParameterNestingLevel ?? 0); |
| 8539 | 8695 |
| 8696 @override |
| 8540 List<TypeParameterElement> get typeParameters { | 8697 List<TypeParameterElement> get typeParameters { |
| 8541 if (_typeParameterElements == null) { | 8698 if (_typeParameterElements == null) { |
| 8542 int enclosingNestingLevel = | 8699 List<UnlinkedTypeParam> unlinkedParams = unlinkedTypeParams; |
| 8543 enclosingTypeParameterContext?.typeParameterNestingLevel ?? 0; | 8700 if (unlinkedParams != null) { |
| 8544 int numTypeParameters = unlinkedTypeParams.length; | 8701 int enclosingNestingLevel = |
| 8545 _typeParameterElements = | 8702 enclosingTypeParameterContext?.typeParameterNestingLevel ?? 0; |
| 8546 new List<TypeParameterElement>(numTypeParameters); | 8703 int numTypeParameters = unlinkedParams.length; |
| 8547 for (int i = 0; i < numTypeParameters; i++) { | 8704 _typeParameterElements = |
| 8548 _typeParameterElements[i] = new TypeParameterElementImpl.forSerialized( | 8705 new List<TypeParameterElement>(numTypeParameters); |
| 8549 unlinkedTypeParams[i], this, enclosingNestingLevel + i); | 8706 for (int i = 0; i < numTypeParameters; i++) { |
| 8707 _typeParameterElements[i] = |
| 8708 new TypeParameterElementImpl.forSerialized( |
| 8709 unlinkedParams[i], this, enclosingNestingLevel + i); |
| 8710 } |
| 8550 } | 8711 } |
| 8551 } | 8712 } |
| 8552 return _typeParameterElements; | 8713 return _typeParameterElements ?? const <TypeParameterElement>[]; |
| 8553 } | 8714 } |
| 8554 | 8715 |
| 8555 /** | 8716 /** |
| 8556 * Get a list of [TypeParameterType] objects corresponding to the | 8717 * Get a list of [TypeParameterType] objects corresponding to the |
| 8557 * element's type parameters. | 8718 * element's type parameters. |
| 8558 */ | 8719 */ |
| 8559 List<TypeParameterType> get typeParameterTypes { | 8720 List<TypeParameterType> get typeParameterTypes { |
| 8560 return _typeParameterTypes ??= typeParameters | 8721 return _typeParameterTypes ??= typeParameters |
| 8561 .map((TypeParameterElement e) => e.type) | 8722 .map((TypeParameterElement e) => e.type) |
| 8562 .toList(growable: false); | 8723 .toList(growable: false); |
| 8563 } | 8724 } |
| 8564 | 8725 |
| 8565 /** | 8726 /** |
| 8566 * Get the [UnlinkedTypeParam]s representing the type parameters declared by | 8727 * Get the [UnlinkedTypeParam]s representing the type parameters declared by |
| 8567 * this element. | 8728 * this element, or `null` if this element isn't from a summary. |
| 8568 * | 8729 * |
| 8569 * TODO(scheglov) make private after switching linker to Impl | 8730 * TODO(scheglov) make private after switching linker to Impl |
| 8570 */ | 8731 */ |
| 8571 List<UnlinkedTypeParam> get unlinkedTypeParams; | 8732 List<UnlinkedTypeParam> get unlinkedTypeParams; |
| 8572 | 8733 |
| 8573 /** | 8734 /** |
| 8574 * Convert the given [index] into a type parameter type. | 8735 * Convert the given [index] into a type parameter type. |
| 8575 */ | 8736 */ |
| 8576 TypeParameterType getTypeParameterType(int index) { | 8737 TypeParameterType getTypeParameterType(int index) { |
| 8577 List<TypeParameterType> types = typeParameterTypes; | 8738 List<TypeParameterType> types = typeParameterTypes; |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8757 * initializers. However, analyzer also needs to handle incorrect Dart code, | 8918 * initializers. However, analyzer also needs to handle incorrect Dart code, |
| 8758 * in which case there might be some constant variables that lack | 8919 * in which case there might be some constant variables that lack |
| 8759 * initializers. | 8920 * initializers. |
| 8760 */ | 8921 */ |
| 8761 Expression get constantInitializer => null; | 8922 Expression get constantInitializer => null; |
| 8762 | 8923 |
| 8763 @override | 8924 @override |
| 8764 DartObject get constantValue => evaluationResult?.value; | 8925 DartObject get constantValue => evaluationResult?.value; |
| 8765 | 8926 |
| 8766 void set declaredType(DartType type) { | 8927 void set declaredType(DartType type) { |
| 8767 _declaredType = type; | 8928 _declaredType = _checkElementOfType(type); |
| 8768 } | 8929 } |
| 8769 | 8930 |
| 8770 @override | 8931 @override |
| 8771 String get displayName => name; | 8932 String get displayName => name; |
| 8772 | 8933 |
| 8773 /** | 8934 /** |
| 8774 * Return the result of evaluating this variable's initializer as a | 8935 * Return the result of evaluating this variable's initializer as a |
| 8775 * compile-time constant expression, or `null` if this variable is not a | 8936 * compile-time constant expression, or `null` if this variable is not a |
| 8776 * 'const' variable, if it does not have an initializer, or if the compilation | 8937 * 'const' variable, if it does not have an initializer, or if the compilation |
| 8777 * unit containing the variable has not been resolved. | 8938 * unit containing the variable has not been resolved. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8843 @override | 9004 @override |
| 8844 bool get isPotentiallyMutatedInScope => false; | 9005 bool get isPotentiallyMutatedInScope => false; |
| 8845 | 9006 |
| 8846 @override | 9007 @override |
| 8847 bool get isStatic => hasModifier(Modifier.STATIC); | 9008 bool get isStatic => hasModifier(Modifier.STATIC); |
| 8848 | 9009 |
| 8849 @override | 9010 @override |
| 8850 DartType get type => _type ?? _declaredType; | 9011 DartType get type => _type ?? _declaredType; |
| 8851 | 9012 |
| 8852 void set type(DartType type) { | 9013 void set type(DartType type) { |
| 8853 _type = type; | 9014 _type = _checkElementOfType(type); |
| 8854 } | 9015 } |
| 8855 | 9016 |
| 8856 @override | 9017 @override |
| 8857 void appendTo(StringBuffer buffer) { | 9018 void appendTo(StringBuffer buffer) { |
| 8858 buffer.write(type); | 9019 buffer.write(type); |
| 8859 buffer.write(" "); | 9020 buffer.write(" "); |
| 8860 buffer.write(displayName); | 9021 buffer.write(displayName); |
| 8861 } | 9022 } |
| 8862 | 9023 |
| 8863 @override | 9024 @override |
| (...skipping 16 matching lines...) Expand all Loading... |
| 8880 | 9041 |
| 8881 @override | 9042 @override |
| 8882 void visitElement(Element element) { | 9043 void visitElement(Element element) { |
| 8883 int offset = element.nameOffset; | 9044 int offset = element.nameOffset; |
| 8884 if (offset != -1) { | 9045 if (offset != -1) { |
| 8885 map[offset] = element; | 9046 map[offset] = element; |
| 8886 } | 9047 } |
| 8887 super.visitElement(element); | 9048 super.visitElement(element); |
| 8888 } | 9049 } |
| 8889 } | 9050 } |
| OLD | NEW |