| 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 2984 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2995 @override | 2995 @override |
| 2996 AstNode computeNode() => getNodeMatching((node) => node is AstNode); | 2996 AstNode computeNode() => getNodeMatching((node) => node is AstNode); |
| 2997 | 2997 |
| 2998 /** | 2998 /** |
| 2999 * Set this element as the enclosing element for given [element]. | 2999 * Set this element as the enclosing element for given [element]. |
| 3000 */ | 3000 */ |
| 3001 void encloseElement(ElementImpl element) { | 3001 void encloseElement(ElementImpl element) { |
| 3002 element.enclosingElement = this; | 3002 element.enclosingElement = this; |
| 3003 } | 3003 } |
| 3004 | 3004 |
| 3005 /** |
| 3006 * Set this element as the enclosing element for given [elements]. |
| 3007 */ |
| 3008 void encloseElements(List<Element> elements) { |
| 3009 for (Element element in elements) { |
| 3010 (element as ElementImpl)._enclosingElement = this; |
| 3011 } |
| 3012 } |
| 3013 |
| 3005 @override | 3014 @override |
| 3006 E getAncestor<E extends Element>(Predicate<Element> predicate) { | 3015 E getAncestor<E extends Element>(Predicate<Element> predicate) { |
| 3007 Element ancestor = _enclosingElement; | 3016 Element ancestor = _enclosingElement; |
| 3008 while (ancestor != null && !predicate(ancestor)) { | 3017 while (ancestor != null && !predicate(ancestor)) { |
| 3009 ancestor = ancestor.enclosingElement; | 3018 ancestor = ancestor.enclosingElement; |
| 3010 } | 3019 } |
| 3011 return ancestor as E; | 3020 return ancestor as E; |
| 3012 } | 3021 } |
| 3013 | 3022 |
| 3014 /** | 3023 /** |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3557 * element. | 3566 * element. |
| 3558 */ | 3567 */ |
| 3559 List<FunctionElement> _functions; | 3568 List<FunctionElement> _functions; |
| 3560 | 3569 |
| 3561 /** | 3570 /** |
| 3562 * A list containing all of the labels defined within this executable element. | 3571 * A list containing all of the labels defined within this executable element. |
| 3563 */ | 3572 */ |
| 3564 List<LabelElement> _labels; | 3573 List<LabelElement> _labels; |
| 3565 | 3574 |
| 3566 /** | 3575 /** |
| 3567 * A list containing all of the local variables defined within this executable | |
| 3568 * element. | |
| 3569 */ | |
| 3570 List<LocalVariableElement> _localVariables; | |
| 3571 | |
| 3572 /** | |
| 3573 * A list containing all of the parameters defined by this executable element. | 3576 * A list containing all of the parameters defined by this executable element. |
| 3574 */ | 3577 */ |
| 3575 List<ParameterElement> _parameters; | 3578 List<ParameterElement> _parameters; |
| 3576 | 3579 |
| 3577 /** | 3580 /** |
| 3578 * The declared return type of this executable element. | 3581 * The declared return type of this executable element. |
| 3579 */ | 3582 */ |
| 3580 DartType _declaredReturnType; | 3583 DartType _declaredReturnType; |
| 3581 | 3584 |
| 3582 /** | 3585 /** |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3763 */ | 3766 */ |
| 3764 void set labels(List<LabelElement> labels) { | 3767 void set labels(List<LabelElement> labels) { |
| 3765 _assertNotResynthesized(serializedExecutable); | 3768 _assertNotResynthesized(serializedExecutable); |
| 3766 for (LabelElement label in labels) { | 3769 for (LabelElement label in labels) { |
| 3767 (label as LabelElementImpl).enclosingElement = this; | 3770 (label as LabelElementImpl).enclosingElement = this; |
| 3768 } | 3771 } |
| 3769 this._labels = labels; | 3772 this._labels = labels; |
| 3770 } | 3773 } |
| 3771 | 3774 |
| 3772 @override | 3775 @override |
| 3773 List<LocalVariableElement> get localVariables { | |
| 3774 if (serializedExecutable != null && _localVariables == null) { | |
| 3775 List<UnlinkedVariable> unlinkedVariables = | |
| 3776 serializedExecutable.localVariables; | |
| 3777 int length = unlinkedVariables.length; | |
| 3778 if (length != 0) { | |
| 3779 List<LocalVariableElementImpl> localVariables = | |
| 3780 new List<LocalVariableElementImpl>(length); | |
| 3781 for (int i = 0; i < length; i++) { | |
| 3782 localVariables[i] = new LocalVariableElementImpl.forSerializedFactory( | |
| 3783 unlinkedVariables[i], this); | |
| 3784 } | |
| 3785 _localVariables = localVariables; | |
| 3786 } else { | |
| 3787 _localVariables = const <LocalVariableElement>[]; | |
| 3788 } | |
| 3789 } | |
| 3790 return _localVariables ?? const <LocalVariableElement>[]; | |
| 3791 } | |
| 3792 | |
| 3793 /** | |
| 3794 * Set the local variables defined within this executable element to the given | |
| 3795 * [variables]. | |
| 3796 */ | |
| 3797 void set localVariables(List<LocalVariableElement> variables) { | |
| 3798 _assertNotResynthesized(serializedExecutable); | |
| 3799 for (LocalVariableElement variable in variables) { | |
| 3800 (variable as LocalVariableElementImpl).enclosingElement = this; | |
| 3801 } | |
| 3802 this._localVariables = variables; | |
| 3803 } | |
| 3804 | |
| 3805 @override | |
| 3806 List<ElementAnnotation> get metadata { | 3776 List<ElementAnnotation> get metadata { |
| 3807 if (serializedExecutable != null) { | 3777 if (serializedExecutable != null) { |
| 3808 return _metadata ??= | 3778 return _metadata ??= |
| 3809 _buildAnnotations(enclosingUnit, serializedExecutable.annotations); | 3779 _buildAnnotations(enclosingUnit, serializedExecutable.annotations); |
| 3810 } | 3780 } |
| 3811 return super.metadata; | 3781 return super.metadata; |
| 3812 } | 3782 } |
| 3813 | 3783 |
| 3814 @override | 3784 @override |
| 3815 String get name { | 3785 String get name { |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3960 if (functionImpl.identifier == identifier) { | 3930 if (functionImpl.identifier == identifier) { |
| 3961 return functionImpl; | 3931 return functionImpl; |
| 3962 } | 3932 } |
| 3963 } | 3933 } |
| 3964 for (LabelElement label in _labels) { | 3934 for (LabelElement label in _labels) { |
| 3965 LabelElementImpl labelImpl = label; | 3935 LabelElementImpl labelImpl = label; |
| 3966 if (labelImpl.identifier == identifier) { | 3936 if (labelImpl.identifier == identifier) { |
| 3967 return labelImpl; | 3937 return labelImpl; |
| 3968 } | 3938 } |
| 3969 } | 3939 } |
| 3970 for (LocalVariableElement variable in _localVariables) { | |
| 3971 LocalVariableElementImpl variableImpl = variable; | |
| 3972 if (variableImpl.identifier == identifier) { | |
| 3973 return variableImpl; | |
| 3974 } | |
| 3975 } | |
| 3976 for (ParameterElement parameter in parameters) { | 3940 for (ParameterElement parameter in parameters) { |
| 3977 ParameterElementImpl parameterImpl = parameter; | 3941 ParameterElementImpl parameterImpl = parameter; |
| 3978 if (parameterImpl.identifier == identifier) { | 3942 if (parameterImpl.identifier == identifier) { |
| 3979 return parameterImpl; | 3943 return parameterImpl; |
| 3980 } | 3944 } |
| 3981 } | 3945 } |
| 3982 return null; | 3946 return null; |
| 3983 } | 3947 } |
| 3984 | 3948 |
| 3985 @override | 3949 @override |
| 3986 void visitChildren(ElementVisitor visitor) { | 3950 void visitChildren(ElementVisitor visitor) { |
| 3987 super.visitChildren(visitor); | 3951 super.visitChildren(visitor); |
| 3988 _safelyVisitPossibleChild(returnType, visitor); | 3952 _safelyVisitPossibleChild(returnType, visitor); |
| 3989 safelyVisitChildren(typeParameters, visitor); | 3953 safelyVisitChildren(typeParameters, visitor); |
| 3990 safelyVisitChildren(parameters, visitor); | 3954 safelyVisitChildren(parameters, visitor); |
| 3991 safelyVisitChildren(functions, visitor); | 3955 safelyVisitChildren(functions, visitor); |
| 3992 safelyVisitChildren(labels, visitor); | 3956 safelyVisitChildren(labels, visitor); |
| 3993 safelyVisitChildren(localVariables, visitor); | |
| 3994 } | 3957 } |
| 3995 } | 3958 } |
| 3996 | 3959 |
| 3997 /** | 3960 /** |
| 3998 * A concrete implementation of an [ExportElement]. | 3961 * A concrete implementation of an [ExportElement]. |
| 3999 */ | 3962 */ |
| 4000 class ExportElementImpl extends UriReferencedElementImpl | 3963 class ExportElementImpl extends UriReferencedElementImpl |
| 4001 implements ExportElement { | 3964 implements ExportElement { |
| 4002 /** | 3965 /** |
| 4003 * The unlinked representation of the export in the summary. | 3966 * The unlinked representation of the export in the summary. |
| (...skipping 2443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6447 return new ConstLocalVariableElementImpl.forSerialized( | 6410 return new ConstLocalVariableElementImpl.forSerialized( |
| 6448 unlinkedVariable, enclosingExecutable); | 6411 unlinkedVariable, enclosingExecutable); |
| 6449 } else { | 6412 } else { |
| 6450 return new LocalVariableElementImpl.forSerialized( | 6413 return new LocalVariableElementImpl.forSerialized( |
| 6451 unlinkedVariable, enclosingExecutable); | 6414 unlinkedVariable, enclosingExecutable); |
| 6452 } | 6415 } |
| 6453 } | 6416 } |
| 6454 | 6417 |
| 6455 @override | 6418 @override |
| 6456 String get identifier { | 6419 String get identifier { |
| 6457 String identifier = super.identifier; | 6420 return '$name$nameOffset'; |
| 6458 Element enclosing = this.enclosingElement; | |
| 6459 if (enclosing is ExecutableElement) { | |
| 6460 int id = ElementImpl.findElementIndexUsingIdentical( | |
| 6461 enclosing.localVariables, this); | |
| 6462 identifier += "@$id"; | |
| 6463 } | |
| 6464 return identifier; | |
| 6465 } | 6421 } |
| 6466 | 6422 |
| 6467 @override | 6423 @override |
| 6468 bool get isPotentiallyMutatedInClosure => true; | 6424 bool get isPotentiallyMutatedInClosure => true; |
| 6469 | 6425 |
| 6470 @override | 6426 @override |
| 6471 bool get isPotentiallyMutatedInScope => true; | 6427 bool get isPotentiallyMutatedInScope => true; |
| 6472 | 6428 |
| 6473 @override | 6429 @override |
| 6474 ElementKind get kind => ElementKind.LOCAL_VARIABLE; | 6430 ElementKind get kind => ElementKind.LOCAL_VARIABLE; |
| (...skipping 2566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9041 | 8997 |
| 9042 @override | 8998 @override |
| 9043 DartObject computeConstantValue() => null; | 8999 DartObject computeConstantValue() => null; |
| 9044 | 9000 |
| 9045 @override | 9001 @override |
| 9046 void visitChildren(ElementVisitor visitor) { | 9002 void visitChildren(ElementVisitor visitor) { |
| 9047 super.visitChildren(visitor); | 9003 super.visitChildren(visitor); |
| 9048 _initializer?.accept(visitor); | 9004 _initializer?.accept(visitor); |
| 9049 } | 9005 } |
| 9050 } | 9006 } |
| OLD | NEW |