| 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 1780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1791 * [nameOffset]. | 1791 * [nameOffset]. |
| 1792 */ | 1792 */ |
| 1793 DefaultFieldFormalParameterElementImpl(String name, int nameOffset) | 1793 DefaultFieldFormalParameterElementImpl(String name, int nameOffset) |
| 1794 : super(name, nameOffset); | 1794 : super(name, nameOffset); |
| 1795 | 1795 |
| 1796 /** | 1796 /** |
| 1797 * Initialize a newly created parameter element to have the given [name]. | 1797 * Initialize a newly created parameter element to have the given [name]. |
| 1798 */ | 1798 */ |
| 1799 DefaultFieldFormalParameterElementImpl.forNode(Identifier name) | 1799 DefaultFieldFormalParameterElementImpl.forNode(Identifier name) |
| 1800 : super.forNode(name); | 1800 : super.forNode(name); |
| 1801 |
| 1802 /** |
| 1803 * Initialize using the given serialized information. |
| 1804 */ |
| 1805 DefaultFieldFormalParameterElementImpl.forSerialized( |
| 1806 UnlinkedParam unlinkedParam, ElementImpl enclosingElement) |
| 1807 : super.forSerialized(unlinkedParam, enclosingElement); |
| 1808 |
| 1809 @override |
| 1810 Expression get constantInitializer { |
| 1811 if (_unlinkedParam != null) { |
| 1812 UnlinkedConst defaultValue = _unlinkedParam.defaultValue; |
| 1813 if (defaultValue == null) { |
| 1814 return null; |
| 1815 } |
| 1816 return super.constantInitializer ??= enclosingUnit.resynthesizerContext |
| 1817 .buildExpression(this, defaultValue); |
| 1818 } |
| 1819 return super.constantInitializer; |
| 1820 } |
| 1821 |
| 1822 @override |
| 1823 void set constantInitializer(Expression initializer) { |
| 1824 assert(_unlinkedParam == null); |
| 1825 super.constantInitializer = initializer; |
| 1826 } |
| 1801 } | 1827 } |
| 1802 | 1828 |
| 1803 /** | 1829 /** |
| 1804 * A [ParameterElement] for parameters that have an initializer. | 1830 * A [ParameterElement] for parameters that have an initializer. |
| 1805 */ | 1831 */ |
| 1806 class DefaultParameterElementImpl extends ParameterElementImpl | 1832 class DefaultParameterElementImpl extends ParameterElementImpl |
| 1807 with ConstVariableElement { | 1833 with ConstVariableElement { |
| 1808 /** | 1834 /** |
| 1809 * Initialize a newly created parameter element to have the given [name] and | 1835 * Initialize a newly created parameter element to have the given [name] and |
| 1810 * [nameOffset]. | 1836 * [nameOffset]. |
| (...skipping 1520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3331 | 3357 |
| 3332 /** | 3358 /** |
| 3333 * A [ParameterElementImpl] that has the additional information of the | 3359 * A [ParameterElementImpl] that has the additional information of the |
| 3334 * [FieldElement] associated with the parameter. | 3360 * [FieldElement] associated with the parameter. |
| 3335 */ | 3361 */ |
| 3336 class FieldFormalParameterElementImpl extends ParameterElementImpl | 3362 class FieldFormalParameterElementImpl extends ParameterElementImpl |
| 3337 implements FieldFormalParameterElement { | 3363 implements FieldFormalParameterElement { |
| 3338 /** | 3364 /** |
| 3339 * The field associated with this field formal parameter. | 3365 * The field associated with this field formal parameter. |
| 3340 */ | 3366 */ |
| 3341 FieldElement field; | 3367 FieldElement _field; |
| 3342 | 3368 |
| 3343 /** | 3369 /** |
| 3344 * Initialize a newly created parameter element to have the given [name] and | 3370 * Initialize a newly created parameter element to have the given [name] and |
| 3345 * [nameOffset]. | 3371 * [nameOffset]. |
| 3346 */ | 3372 */ |
| 3347 FieldFormalParameterElementImpl(String name, int nameOffset) | 3373 FieldFormalParameterElementImpl(String name, int nameOffset) |
| 3348 : super(name, nameOffset); | 3374 : super(name, nameOffset); |
| 3349 | 3375 |
| 3350 /** | 3376 /** |
| 3351 * Initialize a newly created parameter element to have the given [name]. | 3377 * Initialize a newly created parameter element to have the given [name]. |
| 3352 */ | 3378 */ |
| 3353 FieldFormalParameterElementImpl.forNode(Identifier name) | 3379 FieldFormalParameterElementImpl.forNode(Identifier name) |
| 3354 : super.forNode(name); | 3380 : super.forNode(name); |
| 3355 | 3381 |
| 3382 /** |
| 3383 * Initialize using the given serialized information. |
| 3384 */ |
| 3385 FieldFormalParameterElementImpl.forSerialized( |
| 3386 UnlinkedParam unlinkedParam, ElementImpl enclosingElement) |
| 3387 : super.forSerialized(unlinkedParam, enclosingElement); |
| 3388 |
| 3389 @override |
| 3390 FieldElement get field { |
| 3391 if (_unlinkedParam != null && _field == null) { |
| 3392 Element enclosingClass = enclosingElement?.enclosingElement; |
| 3393 if (enclosingClass is ClassElement) { |
| 3394 _field = enclosingClass.getField(_unlinkedParam.name); |
| 3395 } |
| 3396 } |
| 3397 return _field; |
| 3398 } |
| 3399 |
| 3400 void set field(FieldElement field) { |
| 3401 assert(_unlinkedParam == null); |
| 3402 _field = field; |
| 3403 } |
| 3404 |
| 3356 @override | 3405 @override |
| 3357 bool get isInitializingFormal => true; | 3406 bool get isInitializingFormal => true; |
| 3358 | 3407 |
| 3359 @override | 3408 @override |
| 3409 DartType get type { |
| 3410 if (_unlinkedParam != null && _unlinkedParam.type == null) { |
| 3411 _type ??= field?.type ?? DynamicTypeImpl.instance; |
| 3412 } |
| 3413 return super.type; |
| 3414 } |
| 3415 |
| 3416 @override |
| 3417 void set type(DartType type) { |
| 3418 assert(_unlinkedParam == null); |
| 3419 _type = type; |
| 3420 } |
| 3421 |
| 3422 @override |
| 3360 accept(ElementVisitor visitor) => | 3423 accept(ElementVisitor visitor) => |
| 3361 visitor.visitFieldFormalParameterElement(this); | 3424 visitor.visitFieldFormalParameterElement(this); |
| 3362 } | 3425 } |
| 3363 | 3426 |
| 3364 /** | 3427 /** |
| 3365 * Indicates that an ElementImpl's hashCode cannot currently be changed. | 3428 * Indicates that an ElementImpl's hashCode cannot currently be changed. |
| 3366 */ | 3429 */ |
| 3367 class FrozenHashCodeException implements Exception { | 3430 class FrozenHashCodeException implements Exception { |
| 3368 final String _message; | 3431 final String _message; |
| 3369 | 3432 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3499 * [parameters] without becoming the parent of the parameters. This should | 3562 * [parameters] without becoming the parent of the parameters. This should |
| 3500 * only be used by the [TypeResolverVisitor] when creating a synthetic type | 3563 * only be used by the [TypeResolverVisitor] when creating a synthetic type |
| 3501 * alias. | 3564 * alias. |
| 3502 */ | 3565 */ |
| 3503 void shareTypeParameters(List<TypeParameterElement> typeParameters) { | 3566 void shareTypeParameters(List<TypeParameterElement> typeParameters) { |
| 3504 this._typeParameters = typeParameters; | 3567 this._typeParameters = typeParameters; |
| 3505 } | 3568 } |
| 3506 } | 3569 } |
| 3507 | 3570 |
| 3508 /** | 3571 /** |
| 3572 * Implementation of [FunctionElementImpl] for a function typed parameter. |
| 3573 */ |
| 3574 class FunctionElementImpl_forFunctionTypedParameter |
| 3575 extends FunctionElementImpl { |
| 3576 @override |
| 3577 final CompilationUnitElementImpl enclosingUnit; |
| 3578 |
| 3579 /** |
| 3580 * The enclosing function typed [ParameterElementImpl]. |
| 3581 */ |
| 3582 final ParameterElementImpl _parameter; |
| 3583 |
| 3584 FunctionElementImpl_forFunctionTypedParameter( |
| 3585 this.enclosingUnit, this._parameter) |
| 3586 : super('', -1); |
| 3587 |
| 3588 @override |
| 3589 TypeParameterizedElementMixin get enclosingTypeParameterContext => |
| 3590 _parameter.typeParameterContext; |
| 3591 |
| 3592 @override |
| 3593 bool get isSynthetic => true; |
| 3594 } |
| 3595 |
| 3596 /** |
| 3597 * Implementation of [FunctionElementImpl] for a synthetic function element |
| 3598 * that was synthesized by a LUB computation. |
| 3599 */ |
| 3600 class FunctionElementImpl_forLUB extends FunctionElementImpl { |
| 3601 @override |
| 3602 final CompilationUnitElementImpl enclosingUnit; |
| 3603 |
| 3604 @override |
| 3605 final TypeParameterizedElementMixin enclosingTypeParameterContext; |
| 3606 |
| 3607 FunctionElementImpl_forLUB( |
| 3608 this.enclosingUnit, this.enclosingTypeParameterContext) |
| 3609 : super('', -1); |
| 3610 |
| 3611 @override |
| 3612 bool get isSynthetic => true; |
| 3613 } |
| 3614 |
| 3615 /** |
| 3509 * A concrete implementation of a [FunctionTypeAliasElement]. | 3616 * A concrete implementation of a [FunctionTypeAliasElement]. |
| 3510 */ | 3617 */ |
| 3511 class FunctionTypeAliasElementImpl extends ElementImpl | 3618 class FunctionTypeAliasElementImpl extends ElementImpl |
| 3512 with TypeParameterizedElementMixin | 3619 with TypeParameterizedElementMixin |
| 3513 implements FunctionTypeAliasElement { | 3620 implements FunctionTypeAliasElement { |
| 3514 /** | 3621 /** |
| 3515 * The unlinked representation of the type in the summary. | 3622 * The unlinked representation of the type in the summary. |
| 3516 */ | 3623 */ |
| 3517 final UnlinkedTypedef _unlinkedTypedef; | 3624 final UnlinkedTypedef _unlinkedTypedef; |
| 3518 | 3625 |
| (...skipping 2329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5848 * [parameters]. | 5955 * [parameters]. |
| 5849 */ | 5956 */ |
| 5850 void set parameters(List<ParameterElement> parameters) { | 5957 void set parameters(List<ParameterElement> parameters) { |
| 5851 for (ParameterElement parameter in parameters) { | 5958 for (ParameterElement parameter in parameters) { |
| 5852 (parameter as ParameterElementImpl).enclosingElement = this; | 5959 (parameter as ParameterElementImpl).enclosingElement = this; |
| 5853 } | 5960 } |
| 5854 this._parameters = parameters; | 5961 this._parameters = parameters; |
| 5855 } | 5962 } |
| 5856 | 5963 |
| 5857 @override | 5964 @override |
| 5965 DartType get type { |
| 5966 if (_unlinkedParam != null && _type == null) { |
| 5967 _type = enclosingUnit.resynthesizerContext.resolveLinkedType( |
| 5968 _unlinkedParam.inferredTypeSlot, typeParameterContext) ?? |
| 5969 enclosingUnit.resynthesizerContext |
| 5970 .resolveTypeRef(_unlinkedParam.type, typeParameterContext); |
| 5971 } |
| 5972 return super.type; |
| 5973 } |
| 5974 |
| 5975 @override |
| 5858 List<TypeParameterElement> get typeParameters => _typeParameters; | 5976 List<TypeParameterElement> get typeParameters => _typeParameters; |
| 5859 | 5977 |
| 5860 /** | 5978 /** |
| 5861 * Set the type parameters defined by this parameter element to the given | 5979 * Set the type parameters defined by this parameter element to the given |
| 5862 * [typeParameters]. | 5980 * [typeParameters]. |
| 5863 */ | 5981 */ |
| 5864 void set typeParameters(List<TypeParameterElement> typeParameters) { | 5982 void set typeParameters(List<TypeParameterElement> typeParameters) { |
| 5865 for (TypeParameterElement parameter in typeParameters) { | 5983 for (TypeParameterElement parameter in typeParameters) { |
| 5866 (parameter as TypeParameterElementImpl).enclosingElement = this; | 5984 (parameter as TypeParameterElementImpl).enclosingElement = this; |
| 5867 } | 5985 } |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6287 * Build top-level functions. | 6405 * Build top-level functions. |
| 6288 */ | 6406 */ |
| 6289 List<FunctionElementImpl> buildTopLevelFunctions(); | 6407 List<FunctionElementImpl> buildTopLevelFunctions(); |
| 6290 | 6408 |
| 6291 /** | 6409 /** |
| 6292 * Build explicit top-level variables. | 6410 * Build explicit top-level variables. |
| 6293 */ | 6411 */ |
| 6294 UnitExplicitTopLevelVariables buildTopLevelVariables(); | 6412 UnitExplicitTopLevelVariables buildTopLevelVariables(); |
| 6295 | 6413 |
| 6296 /** | 6414 /** |
| 6415 * Build the appropriate [DartType] object corresponding to a slot id in the |
| 6416 * [LinkedUnit.types] table. |
| 6417 */ |
| 6418 DartType resolveLinkedType( |
| 6419 int slot, TypeParameterizedElementMixin typeParameterContext); |
| 6420 |
| 6421 /** |
| 6297 * Resolve an [EntityRef] into a type. If the reference is | 6422 * Resolve an [EntityRef] into a type. If the reference is |
| 6298 * unresolved, return [DynamicTypeImpl.instance]. | 6423 * unresolved, return [DynamicTypeImpl.instance]. |
| 6299 * | 6424 * |
| 6300 * TODO(paulberry): or should we have a class representing an | 6425 * TODO(paulberry): or should we have a class representing an |
| 6301 * unresolved type, for consistency with the full element model? | 6426 * unresolved type, for consistency with the full element model? |
| 6302 */ | 6427 */ |
| 6303 DartType resolveTypeRef( | 6428 DartType resolveTypeRef( |
| 6304 EntityRef type, TypeParameterizedElementMixin typeParameterContext, | 6429 EntityRef type, TypeParameterizedElementMixin typeParameterContext, |
| 6305 {bool defaultVoid: false, bool instantiateToBoundsAllowed: true}); | 6430 {bool defaultVoid: false, bool instantiateToBoundsAllowed: true}); |
| 6306 } | 6431 } |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6770 } | 6895 } |
| 6771 | 6896 |
| 6772 /** | 6897 /** |
| 6773 * A concrete implementation of a [VariableElement]. | 6898 * A concrete implementation of a [VariableElement]. |
| 6774 */ | 6899 */ |
| 6775 abstract class VariableElementImpl extends ElementImpl | 6900 abstract class VariableElementImpl extends ElementImpl |
| 6776 implements VariableElement { | 6901 implements VariableElement { |
| 6777 /** | 6902 /** |
| 6778 * The declared type of this variable. | 6903 * The declared type of this variable. |
| 6779 */ | 6904 */ |
| 6780 DartType type; | 6905 DartType _type; |
| 6781 | 6906 |
| 6782 /** | 6907 /** |
| 6783 * A synthetic function representing this variable's initializer, or `null` if | 6908 * A synthetic function representing this variable's initializer, or `null` if |
| 6784 * this variable does not have an initializer. | 6909 * this variable does not have an initializer. |
| 6785 */ | 6910 */ |
| 6786 FunctionElement _initializer; | 6911 FunctionElement _initializer; |
| 6787 | 6912 |
| 6788 /** | 6913 /** |
| 6789 * Initialize a newly created variable element to have the given [name] and | 6914 * Initialize a newly created variable element to have the given [name] and |
| 6790 * [offset]. | 6915 * [offset]. |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6889 @override | 7014 @override |
| 6890 bool get isPotentiallyMutatedInClosure => false; | 7015 bool get isPotentiallyMutatedInClosure => false; |
| 6891 | 7016 |
| 6892 @override | 7017 @override |
| 6893 bool get isPotentiallyMutatedInScope => false; | 7018 bool get isPotentiallyMutatedInScope => false; |
| 6894 | 7019 |
| 6895 @override | 7020 @override |
| 6896 bool get isStatic => hasModifier(Modifier.STATIC); | 7021 bool get isStatic => hasModifier(Modifier.STATIC); |
| 6897 | 7022 |
| 6898 @override | 7023 @override |
| 7024 DartType get type => _type; |
| 7025 |
| 7026 void set type(DartType type) { |
| 7027 _type = type; |
| 7028 } |
| 7029 |
| 7030 @override |
| 6899 void appendTo(StringBuffer buffer) { | 7031 void appendTo(StringBuffer buffer) { |
| 6900 buffer.write(type); | 7032 buffer.write(type); |
| 6901 buffer.write(" "); | 7033 buffer.write(" "); |
| 6902 buffer.write(displayName); | 7034 buffer.write(displayName); |
| 6903 } | 7035 } |
| 6904 | 7036 |
| 6905 @override | 7037 @override |
| 6906 DartObject computeConstantValue() => null; | 7038 DartObject computeConstantValue() => null; |
| 6907 | 7039 |
| 6908 @override | 7040 @override |
| (...skipping 13 matching lines...) Expand all Loading... |
| 6922 | 7054 |
| 6923 @override | 7055 @override |
| 6924 void visitElement(Element element) { | 7056 void visitElement(Element element) { |
| 6925 int offset = element.nameOffset; | 7057 int offset = element.nameOffset; |
| 6926 if (offset != -1) { | 7058 if (offset != -1) { |
| 6927 map[offset] = element; | 7059 map[offset] = element; |
| 6928 } | 7060 } |
| 6929 super.visitElement(element); | 7061 super.visitElement(element); |
| 6930 } | 7062 } |
| 6931 } | 7063 } |
| OLD | NEW |