| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// Defines the elements and fragments that are part of the element model. |
| /// |
| /// The element model describes the semantic (as opposed to syntactic) structure |
| /// of Dart code. The syntactic structure of the code is modeled by the |
| /// [AST structure](../dart_ast_ast/dart_ast_ast-library.html). |
| /// |
| /// The element model consists of three closely related kinds of objects: |
| /// elements (instances of a subclass of [Element2]), fragments (instances of a |
| /// subclass of [Fragment]) and types. This library defines the elements and |
| /// fragments; the types are defined in |
| /// [type.dart](../dart_element_type/dart_element_type-library.html). |
| /// |
| /// Generally speaking, an element represents something that is declared in the |
| /// code, such as a class, method, or variable. Elements are organized in a tree |
| /// structure in which the children of an element are the elements that are |
| /// logically (and often syntactically) part of the declaration of the parent. |
| /// For example, the elements representing the methods and fields in a class are |
| /// children of the element representing the class. |
| /// |
| /// Some elements, such as a [LocalVariableElement2] are declared by a single |
| /// declaration, but most elements can be declared by multiple declarations. A |
| /// fragment represents a single declaration when the corresponding element |
| /// can have multiple declarations. There is no fragment for an element that can |
| /// only have one declaration. |
| /// |
| /// As with elements, fragments are organized in a tree structure. The two |
| /// structures parallel each other. |
| /// |
| /// Every complete element structure is rooted by an instance of the class |
| /// [LibraryElement2]. A library element represents a single Dart library. Every |
| /// library is defined by one or more compilation units (the library and all of |
| /// its parts). The compilation units are represented by the class |
| /// [LibraryFragment]. |
| /// |
| /// The element model does not contain everything in the code, only those things |
| /// that are declared by the code. For example, it does not include any |
| /// representation of the statements in a method body, but if one of those |
| /// statements declares a local variable then the local variable will be |
| /// represented by an element. |
| /// |
| /// @docImport 'package:analyzer/dart/element/element.dart'; |
| /// @docImport 'package:analyzer/src/dart/element/member.dart'; |
| library; |
| |
| export 'package:analyzer/dart/element/element.dart'; |