| 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 /** | 5 /** |
| 6 * Defines the element model. The element model describes the semantic (as | 6 * Defines the element model. The element model describes the semantic (as |
| 7 * opposed to syntactic) structure of Dart code. The syntactic structure of the | 7 * opposed to syntactic) structure of Dart code. The syntactic structure of the |
| 8 * code is modeled by the [AST structure](../ast/ast.dart). | 8 * code is modeled by the [AST structure](../ast/ast.dart). |
| 9 * | 9 * |
| 10 * The element model consists of two closely related kinds of objects: elements | 10 * The element model consists of two closely related kinds of objects: elements |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 * | 30 * |
| 31 * The element model does not contain everything in the code, only those things | 31 * The element model does not contain everything in the code, only those things |
| 32 * that are declared by the code. For example, it does not include any | 32 * that are declared by the code. For example, it does not include any |
| 33 * representation of the statements in a method body, but if one of those | 33 * representation of the statements in a method body, but if one of those |
| 34 * statements declares a local variable then the local variable will be | 34 * statements declares a local variable then the local variable will be |
| 35 * represented by an element. | 35 * represented by an element. |
| 36 */ | 36 */ |
| 37 library analyzer.dart.element.element; | 37 library analyzer.dart.element.element; |
| 38 | 38 |
| 39 import 'package:analyzer/dart/ast/ast.dart'; | 39 import 'package:analyzer/dart/ast/ast.dart'; |
| 40 import 'package:analyzer/dart/ast/resolution_base_classes.dart'; |
| 40 import 'package:analyzer/dart/constant/value.dart'; | 41 import 'package:analyzer/dart/constant/value.dart'; |
| 41 import 'package:analyzer/dart/element/type.dart'; | 42 import 'package:analyzer/dart/element/type.dart'; |
| 42 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; | 43 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
| 43 import 'package:analyzer/src/generated/java_engine.dart'; | 44 import 'package:analyzer/src/generated/java_engine.dart'; |
| 44 import 'package:analyzer/src/generated/resolver.dart'; | 45 import 'package:analyzer/src/generated/resolver.dart'; |
| 45 import 'package:analyzer/src/generated/source.dart'; | 46 import 'package:analyzer/src/generated/source.dart'; |
| 46 import 'package:analyzer/src/generated/utilities_dart.dart'; | 47 import 'package:analyzer/src/generated/utilities_dart.dart'; |
| 47 import 'package:analyzer/src/task/dart.dart'; | 48 import 'package:analyzer/src/task/dart.dart'; |
| 48 import 'package:analyzer/task/model.dart' show AnalysisTarget; | 49 import 'package:analyzer/task/model.dart' show AnalysisTarget; |
| 49 | 50 |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 * * fields that are induced by explicit declarations of getters and setters, | 557 * * fields that are induced by explicit declarations of getters and setters, |
| 557 * and | 558 * and |
| 558 * * functions representing the initialization expression for a variable. | 559 * * functions representing the initialization expression for a variable. |
| 559 * | 560 * |
| 560 * Second, there are elements in the element model that do not have a name. | 561 * Second, there are elements in the element model that do not have a name. |
| 561 * These correspond to unnamed functions and exist in order to more accurately | 562 * These correspond to unnamed functions and exist in order to more accurately |
| 562 * represent the semantic structure of the program. | 563 * represent the semantic structure of the program. |
| 563 * | 564 * |
| 564 * Clients may not extend, implement or mix-in this class. | 565 * Clients may not extend, implement or mix-in this class. |
| 565 */ | 566 */ |
| 566 abstract class Element implements AnalysisTarget { | 567 abstract class Element implements AnalysisTarget, ResolutionTarget { |
| 567 /** | 568 /** |
| 568 * A comparator that can be used to sort elements by their name offset. | 569 * A comparator that can be used to sort elements by their name offset. |
| 569 * Elements with a smaller offset will be sorted to be before elements with a | 570 * Elements with a smaller offset will be sorted to be before elements with a |
| 570 * larger name offset. | 571 * larger name offset. |
| 571 */ | 572 */ |
| 572 static final Comparator<Element> SORT_BY_OFFSET = | 573 static final Comparator<Element> SORT_BY_OFFSET = |
| 573 (Element firstElement, Element secondElement) => | 574 (Element firstElement, Element secondElement) => |
| 574 firstElement.nameOffset - secondElement.nameOffset; | 575 firstElement.nameOffset - secondElement.nameOffset; |
| 575 | 576 |
| 576 /** | 577 /** |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 * is no guarantee of the order in which the children will be visited. | 781 * is no guarantee of the order in which the children will be visited. |
| 781 */ | 782 */ |
| 782 void visitChildren(ElementVisitor visitor); | 783 void visitChildren(ElementVisitor visitor); |
| 783 } | 784 } |
| 784 | 785 |
| 785 /** | 786 /** |
| 786 * A single annotation associated with an element. | 787 * A single annotation associated with an element. |
| 787 * | 788 * |
| 788 * Clients may not extend, implement or mix-in this class. | 789 * Clients may not extend, implement or mix-in this class. |
| 789 */ | 790 */ |
| 790 abstract class ElementAnnotation implements ConstantEvaluationTarget { | 791 abstract class ElementAnnotation |
| 792 implements ConstantEvaluationTarget, ResolutionTarget { |
| 791 /** | 793 /** |
| 792 * An empty list of annotations. | 794 * An empty list of annotations. |
| 793 */ | 795 */ |
| 794 static const List<ElementAnnotation> EMPTY_LIST = const <ElementAnnotation>[]; | 796 static const List<ElementAnnotation> EMPTY_LIST = const <ElementAnnotation>[]; |
| 795 | 797 |
| 796 /** | 798 /** |
| 797 * Return a representation of the value of this annotation. | 799 * Return a representation of the value of this annotation. |
| 798 * | 800 * |
| 799 * Return `null` if the value of this annotation could not be computed because | 801 * Return `null` if the value of this annotation could not be computed because |
| 800 * of errors. | 802 * of errors. |
| (...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2027 DartType get type; | 2029 DartType get type; |
| 2028 | 2030 |
| 2029 /** | 2031 /** |
| 2030 * Return a representation of the value of this variable, forcing the value | 2032 * Return a representation of the value of this variable, forcing the value |
| 2031 * to be computed if it had not previously been computed, or `null` if either | 2033 * to be computed if it had not previously been computed, or `null` if either |
| 2032 * this variable was not declared with the 'const' modifier or if the value of | 2034 * this variable was not declared with the 'const' modifier or if the value of |
| 2033 * this variable could not be computed because of errors. | 2035 * this variable could not be computed because of errors. |
| 2034 */ | 2036 */ |
| 2035 DartObject computeConstantValue(); | 2037 DartObject computeConstantValue(); |
| 2036 } | 2038 } |
| OLD | NEW |