| 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 import 'dart:math' show min; | 8 import 'dart:math' show min; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/utilities_general.dart'; | 10 import 'package:analyzer/src/generated/utilities_general.dart'; |
| 11 import 'package:analyzer/src/task/dart.dart'; | 11 import 'package:analyzer/src/task/dart.dart'; |
| 12 import 'package:analyzer/task/model.dart' | 12 import 'package:analyzer/task/model.dart' |
| 13 show AnalysisTarget, ConstantEvaluationTarget; | 13 show AnalysisTarget, ConstantEvaluationTarget; |
| 14 | 14 |
| 15 import 'ast.dart'; | 15 import 'ast.dart'; |
| 16 import 'constant.dart' show EvaluationResultImpl; | 16 import 'constant.dart' show DartObject, EvaluationResultImpl; |
| 17 import 'engine.dart' show AnalysisContext, AnalysisEngine, AnalysisException; | 17 import 'engine.dart' show AnalysisContext, AnalysisEngine, AnalysisException; |
| 18 import 'html.dart' show XmlAttributeNode, XmlTagNode; | 18 import 'html.dart' show XmlAttributeNode, XmlTagNode; |
| 19 import 'java_core.dart'; | 19 import 'java_core.dart'; |
| 20 import 'java_engine.dart'; | 20 import 'java_engine.dart'; |
| 21 import 'resolver.dart'; | 21 import 'resolver.dart'; |
| 22 import 'scanner.dart' show Keyword; | 22 import 'scanner.dart' show Keyword; |
| 23 import 'sdk.dart' show DartSdk; | 23 import 'sdk.dart' show DartSdk; |
| 24 import 'source.dart'; | 24 import 'source.dart'; |
| 25 import 'utilities_collection.dart'; | 25 import 'utilities_collection.dart'; |
| 26 import 'utilities_dart.dart'; | 26 import 'utilities_dart.dart'; |
| (...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1753 */ | 1753 */ |
| 1754 @deprecated // Use new ConstFieldElementImpl(name, offset) | 1754 @deprecated // Use new ConstFieldElementImpl(name, offset) |
| 1755 ConstFieldElementImpl.con2(String name, int offset) : super(name, offset); | 1755 ConstFieldElementImpl.con2(String name, int offset) : super(name, offset); |
| 1756 | 1756 |
| 1757 /** | 1757 /** |
| 1758 * Initialize a newly created field element to have the given [name]. | 1758 * Initialize a newly created field element to have the given [name]. |
| 1759 */ | 1759 */ |
| 1760 ConstFieldElementImpl.forNode(Identifier name) : super.forNode(name); | 1760 ConstFieldElementImpl.forNode(Identifier name) : super.forNode(name); |
| 1761 | 1761 |
| 1762 @override | 1762 @override |
| 1763 DartObject get constantValue => _result.value; |
| 1764 |
| 1765 @override |
| 1763 EvaluationResultImpl get evaluationResult => _result; | 1766 EvaluationResultImpl get evaluationResult => _result; |
| 1764 | 1767 |
| 1765 @override | 1768 @override |
| 1766 void set evaluationResult(EvaluationResultImpl result) { | 1769 void set evaluationResult(EvaluationResultImpl result) { |
| 1767 this._result = result; | 1770 this._result = result; |
| 1768 } | 1771 } |
| 1769 } | 1772 } |
| 1770 | 1773 |
| 1771 /** | 1774 /** |
| 1772 * A [LocalVariableElement] for a local 'const' variable that has an | 1775 * A [LocalVariableElement] for a local 'const' variable that has an |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1784 * and [offset]. | 1787 * and [offset]. |
| 1785 */ | 1788 */ |
| 1786 ConstLocalVariableElementImpl(String name, int offset) : super(name, offset); | 1789 ConstLocalVariableElementImpl(String name, int offset) : super(name, offset); |
| 1787 | 1790 |
| 1788 /** | 1791 /** |
| 1789 * Initialize a newly created local variable element to have the given [name]. | 1792 * Initialize a newly created local variable element to have the given [name]. |
| 1790 */ | 1793 */ |
| 1791 ConstLocalVariableElementImpl.forNode(Identifier name) : super.forNode(name); | 1794 ConstLocalVariableElementImpl.forNode(Identifier name) : super.forNode(name); |
| 1792 | 1795 |
| 1793 @override | 1796 @override |
| 1797 DartObject get constantValue => _result.value; |
| 1798 |
| 1799 @override |
| 1794 EvaluationResultImpl get evaluationResult => _result; | 1800 EvaluationResultImpl get evaluationResult => _result; |
| 1795 | 1801 |
| 1796 @override | 1802 @override |
| 1797 void set evaluationResult(EvaluationResultImpl result) { | 1803 void set evaluationResult(EvaluationResultImpl result) { |
| 1798 this._result = result; | 1804 this._result = result; |
| 1799 } | 1805 } |
| 1800 } | 1806 } |
| 1801 | 1807 |
| 1802 /** | 1808 /** |
| 1803 * An element representing a constructor or a factory method defined within a | 1809 * An element representing a constructor or a factory method defined within a |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2102 */ | 2108 */ |
| 2103 EvaluationResultImpl _result; | 2109 EvaluationResultImpl _result; |
| 2104 | 2110 |
| 2105 /** | 2111 /** |
| 2106 * Initialize a newly created top-level variable element to have the given | 2112 * Initialize a newly created top-level variable element to have the given |
| 2107 * [name]. | 2113 * [name]. |
| 2108 */ | 2114 */ |
| 2109 ConstTopLevelVariableElementImpl(Identifier name) : super.forNode(name); | 2115 ConstTopLevelVariableElementImpl(Identifier name) : super.forNode(name); |
| 2110 | 2116 |
| 2111 @override | 2117 @override |
| 2118 DartObject get constantValue => _result.value; |
| 2119 |
| 2120 @override |
| 2112 EvaluationResultImpl get evaluationResult => _result; | 2121 EvaluationResultImpl get evaluationResult => _result; |
| 2113 | 2122 |
| 2114 @override | 2123 @override |
| 2115 void set evaluationResult(EvaluationResultImpl result) { | 2124 void set evaluationResult(EvaluationResultImpl result) { |
| 2116 this._result = result; | 2125 this._result = result; |
| 2117 } | 2126 } |
| 2118 } | 2127 } |
| 2119 | 2128 |
| 2120 /** | 2129 /** |
| 2121 * Mixin used by elements that represent constant variables and have | 2130 * Mixin used by elements that represent constant variables and have |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2266 * The result of evaluating this variable's initializer. | 2275 * The result of evaluating this variable's initializer. |
| 2267 */ | 2276 */ |
| 2268 EvaluationResultImpl _result; | 2277 EvaluationResultImpl _result; |
| 2269 | 2278 |
| 2270 /** | 2279 /** |
| 2271 * Initialize a newly created parameter element to have the given [name]. | 2280 * Initialize a newly created parameter element to have the given [name]. |
| 2272 */ | 2281 */ |
| 2273 DefaultFieldFormalParameterElementImpl(Identifier name) : super(name); | 2282 DefaultFieldFormalParameterElementImpl(Identifier name) : super(name); |
| 2274 | 2283 |
| 2275 @override | 2284 @override |
| 2285 DartObject get constantValue => _result.value; |
| 2286 |
| 2287 @override |
| 2276 EvaluationResultImpl get evaluationResult => _result; | 2288 EvaluationResultImpl get evaluationResult => _result; |
| 2277 | 2289 |
| 2278 @override | 2290 @override |
| 2279 void set evaluationResult(EvaluationResultImpl result) { | 2291 void set evaluationResult(EvaluationResultImpl result) { |
| 2280 this._result = result; | 2292 this._result = result; |
| 2281 } | 2293 } |
| 2282 } | 2294 } |
| 2283 | 2295 |
| 2284 /** | 2296 /** |
| 2285 * A [ParameterElement] for parameters that have an initializer. | 2297 * A [ParameterElement] for parameters that have an initializer. |
| 2286 */ | 2298 */ |
| 2287 class DefaultParameterElementImpl extends ParameterElementImpl | 2299 class DefaultParameterElementImpl extends ParameterElementImpl |
| 2288 with ConstVariableElement { | 2300 with ConstVariableElement { |
| 2289 /** | 2301 /** |
| 2290 * The result of evaluating this variable's initializer. | 2302 * The result of evaluating this variable's initializer. |
| 2291 */ | 2303 */ |
| 2292 EvaluationResultImpl _result; | 2304 EvaluationResultImpl _result; |
| 2293 | 2305 |
| 2294 /** | 2306 /** |
| 2295 * Initialize a newly created parameter element to have the given [name]. | 2307 * Initialize a newly created parameter element to have the given [name]. |
| 2296 */ | 2308 */ |
| 2297 DefaultParameterElementImpl(Identifier name) : super.forNode(name); | 2309 DefaultParameterElementImpl(Identifier name) : super.forNode(name); |
| 2298 | 2310 |
| 2299 @override | 2311 @override |
| 2312 DartObject get constantValue => _result.value; |
| 2313 |
| 2314 @override |
| 2300 EvaluationResultImpl get evaluationResult => _result; | 2315 EvaluationResultImpl get evaluationResult => _result; |
| 2301 | 2316 |
| 2302 @override | 2317 @override |
| 2303 void set evaluationResult(EvaluationResultImpl result) { | 2318 void set evaluationResult(EvaluationResultImpl result) { |
| 2304 this._result = result; | 2319 this._result = result; |
| 2305 } | 2320 } |
| 2306 | 2321 |
| 2307 @override | 2322 @override |
| 2308 DefaultFormalParameter computeNode() => | 2323 DefaultFormalParameter computeNode() => |
| 2309 getNodeMatching((node) => node is DefaultFormalParameter); | 2324 getNodeMatching((node) => node is DefaultFormalParameter); |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2652 /** | 2667 /** |
| 2653 * A single annotation associated with an element. | 2668 * A single annotation associated with an element. |
| 2654 */ | 2669 */ |
| 2655 abstract class ElementAnnotation { | 2670 abstract class ElementAnnotation { |
| 2656 /** | 2671 /** |
| 2657 * An empty list of annotations. | 2672 * An empty list of annotations. |
| 2658 */ | 2673 */ |
| 2659 static const List<ElementAnnotation> EMPTY_LIST = const <ElementAnnotation>[]; | 2674 static const List<ElementAnnotation> EMPTY_LIST = const <ElementAnnotation>[]; |
| 2660 | 2675 |
| 2661 /** | 2676 /** |
| 2677 * Return a representation of the value of this annotation. |
| 2678 * |
| 2679 * Return `null` if the value of this annotation could not be computed because |
| 2680 * of errors. |
| 2681 */ |
| 2682 DartObject get constantValue; |
| 2683 |
| 2684 /** |
| 2662 * Return the element representing the field, variable, or const constructor | 2685 * Return the element representing the field, variable, or const constructor |
| 2663 * being used as an annotation. | 2686 * being used as an annotation. |
| 2664 */ | 2687 */ |
| 2665 Element get element; | 2688 Element get element; |
| 2666 | 2689 |
| 2667 /** | 2690 /** |
| 2668 * Return `true` if this annotation marks the associated element as being | 2691 * Return `true` if this annotation marks the associated element as being |
| 2669 * deprecated. | 2692 * deprecated. |
| 2670 */ | 2693 */ |
| 2671 bool get isDeprecated; | 2694 bool get isDeprecated; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2731 EvaluationResultImpl evaluationResult; | 2754 EvaluationResultImpl evaluationResult; |
| 2732 | 2755 |
| 2733 /** | 2756 /** |
| 2734 * Initialize a newly created annotation. The given [element] is the element | 2757 * Initialize a newly created annotation. The given [element] is the element |
| 2735 * representing the field, variable, or constructor being used as an | 2758 * representing the field, variable, or constructor being used as an |
| 2736 * annotation. | 2759 * annotation. |
| 2737 */ | 2760 */ |
| 2738 ElementAnnotationImpl(this.element); | 2761 ElementAnnotationImpl(this.element); |
| 2739 | 2762 |
| 2740 @override | 2763 @override |
| 2764 DartObject get constantValue => evaluationResult.value; |
| 2765 |
| 2766 @override |
| 2741 bool get isDeprecated { | 2767 bool get isDeprecated { |
| 2742 if (element != null) { | 2768 if (element != null) { |
| 2743 LibraryElement library = element.library; | 2769 LibraryElement library = element.library; |
| 2744 if (library != null && library.isDartCore) { | 2770 if (library != null && library.isDartCore) { |
| 2745 if (element is ConstructorElement) { | 2771 if (element is ConstructorElement) { |
| 2746 ConstructorElement constructorElement = element as ConstructorElement; | 2772 ConstructorElement constructorElement = element as ConstructorElement; |
| 2747 if (constructorElement.enclosingElement.name == | 2773 if (constructorElement.enclosingElement.name == |
| 2748 _DEPRECATED_CLASS_NAME) { | 2774 _DEPRECATED_CLASS_NAME) { |
| 2749 return true; | 2775 return true; |
| 2750 } | 2776 } |
| (...skipping 7852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10603 /** | 10629 /** |
| 10604 * A variable. There are concrete subclasses for different kinds of variables. | 10630 * A variable. There are concrete subclasses for different kinds of variables. |
| 10605 */ | 10631 */ |
| 10606 abstract class VariableElement implements Element, ConstantEvaluationTarget { | 10632 abstract class VariableElement implements Element, ConstantEvaluationTarget { |
| 10607 /** | 10633 /** |
| 10608 * An empty list of variable elements. | 10634 * An empty list of variable elements. |
| 10609 */ | 10635 */ |
| 10610 static const List<VariableElement> EMPTY_LIST = const <VariableElement>[]; | 10636 static const List<VariableElement> EMPTY_LIST = const <VariableElement>[]; |
| 10611 | 10637 |
| 10612 /** | 10638 /** |
| 10639 * Return a representation of the value of this variable. |
| 10640 * |
| 10641 * Return `null` if either this variable was not declared with the 'const' |
| 10642 * modifier or if the value of this variable could not be computed because of |
| 10643 * errors. |
| 10644 */ |
| 10645 DartObject get constantValue; |
| 10646 |
| 10647 /** |
| 10613 * Return `true` if this variable element did not have an explicit type | 10648 * Return `true` if this variable element did not have an explicit type |
| 10614 * specified for it. | 10649 * specified for it. |
| 10615 */ | 10650 */ |
| 10616 bool get hasImplicitType; | 10651 bool get hasImplicitType; |
| 10617 | 10652 |
| 10618 /** | 10653 /** |
| 10619 * Return a synthetic function representing this variable's initializer, or | 10654 * Return a synthetic function representing this variable's initializer, or |
| 10620 * `null` if this variable does not have an initializer. The function will | 10655 * `null` if this variable does not have an initializer. The function will |
| 10621 * have no parameters. The return type of the function will be the | 10656 * have no parameters. The return type of the function will be the |
| 10622 * compile-time type of the initialization expression. | 10657 * compile-time type of the initialization expression. |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10705 */ | 10740 */ |
| 10706 VariableElementImpl.forNode(Identifier name) : super.forNode(name); | 10741 VariableElementImpl.forNode(Identifier name) : super.forNode(name); |
| 10707 | 10742 |
| 10708 /** | 10743 /** |
| 10709 * Set whether this variable is const. | 10744 * Set whether this variable is const. |
| 10710 */ | 10745 */ |
| 10711 void set const3(bool isConst) { | 10746 void set const3(bool isConst) { |
| 10712 setModifier(Modifier.CONST, isConst); | 10747 setModifier(Modifier.CONST, isConst); |
| 10713 } | 10748 } |
| 10714 | 10749 |
| 10750 @override |
| 10751 DartObject get constantValue => null; |
| 10752 |
| 10715 /** | 10753 /** |
| 10716 * Return the result of evaluating this variable's initializer as a | 10754 * Return the result of evaluating this variable's initializer as a |
| 10717 * compile-time constant expression, or `null` if this variable is not a | 10755 * compile-time constant expression, or `null` if this variable is not a |
| 10718 * 'const' variable, if it does not have an initializer, or if the compilation | 10756 * 'const' variable, if it does not have an initializer, or if the compilation |
| 10719 * unit containing the variable has not been resolved. | 10757 * unit containing the variable has not been resolved. |
| 10720 */ | 10758 */ |
| 10721 EvaluationResultImpl get evaluationResult => null; | 10759 EvaluationResultImpl get evaluationResult => null; |
| 10722 | 10760 |
| 10723 /** | 10761 /** |
| 10724 * Set the result of evaluating this variable's initializer as a compile-time | 10762 * Set the result of evaluating this variable's initializer as a compile-time |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10917 | 10955 |
| 10918 @override | 10956 @override |
| 10919 void visitElement(Element element) { | 10957 void visitElement(Element element) { |
| 10920 int offset = element.nameOffset; | 10958 int offset = element.nameOffset; |
| 10921 if (offset != -1) { | 10959 if (offset != -1) { |
| 10922 map[offset] = element; | 10960 map[offset] = element; |
| 10923 } | 10961 } |
| 10924 super.visitElement(element); | 10962 super.visitElement(element); |
| 10925 } | 10963 } |
| 10926 } | 10964 } |
| OLD | NEW |