|  | // Copyright (c) 2014, 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 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 two closely related kinds of objects: elements | 
|  | /// (instances of a subclass of `Element`) and types. This library defines the | 
|  | /// elements, 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. | 
|  | /// | 
|  | /// Every complete element structure is rooted by an instance of the class | 
|  | /// `LibraryElement`. 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 | 
|  | /// `CompilationUnitElement` and are children of the library that is defined by | 
|  | /// them. Each compilation unit can contain zero or more top-level declarations, | 
|  | /// such as classes, functions, and variables. Each of these is in turn | 
|  | /// represented as an element that is a child of the compilation unit. Classes | 
|  | /// contain methods and fields, methods can contain local variables, etc. | 
|  | /// | 
|  | /// 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. | 
|  | library; | 
|  |  | 
|  | import 'package:_fe_analyzer_shared/src/base/analyzer_public_api.dart'; | 
|  | import 'package:analyzer/dart/analysis/features.dart'; | 
|  | import 'package:analyzer/dart/analysis/session.dart'; | 
|  | import 'package:analyzer/dart/constant/value.dart'; | 
|  | import 'package:analyzer/dart/element/element2.dart'; | 
|  | import 'package:analyzer/dart/element/nullability_suffix.dart'; | 
|  | import 'package:analyzer/dart/element/scope.dart'; | 
|  | import 'package:analyzer/dart/element/type.dart'; | 
|  | import 'package:analyzer/dart/element/type_provider.dart'; | 
|  | import 'package:analyzer/dart/element/type_system.dart'; | 
|  | import 'package:analyzer/error/error.dart'; | 
|  | import 'package:analyzer/source/line_info.dart'; | 
|  | import 'package:analyzer/source/source.dart'; | 
|  | import 'package:analyzer/src/dart/constant/evaluation.dart'; | 
|  | import 'package:analyzer/src/dart/element/element.dart' | 
|  | show elementModelDeprecationMsg; | 
|  | import 'package:analyzer/src/dart/resolver/scope.dart' show Namespace; | 
|  | import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; | 
|  | import 'package:analyzer/src/generated/utilities_dart.dart'; | 
|  | // ignore: deprecated_member_use_from_same_package | 
|  | import 'package:analyzer/src/task/api/model.dart' show AnalysisTarget; | 
|  | import 'package:meta/meta.dart'; | 
|  | import 'package:pub_semver/pub_semver.dart'; | 
|  |  | 
|  | /// A pattern variable that is explicitly declared. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated( | 
|  | 'Use BindPatternVariableFragment and BindPatternVariableElement2 instead') | 
|  | abstract class BindPatternVariableElement implements PatternVariableElement {} | 
|  |  | 
|  | /// An element that is contained within a [ClassElement]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated(''' | 
|  | There is no common interface for class members in the new analyzer element | 
|  | model. If you are using this class in an `is` test or a pattern match, replace | 
|  | it with checks for the specific element types you are interested in (e.g., | 
|  | `ConstructorElement2`, `MethodElement2`, etc.). If you are using this class as | 
|  | a type annotation for a variable that could hold any kind of class member, use | 
|  | `Element2` instead.''') | 
|  | abstract class ClassMemberElement implements Element { | 
|  | // TODO(brianwilkerson): Either remove this class or rename it to something | 
|  | //  more correct. | 
|  |  | 
|  | @override | 
|  | Element get enclosingElement3; | 
|  |  | 
|  | /// Whether the element is a static element. | 
|  | /// | 
|  | /// A static element is an element that is not associated with a particular | 
|  | /// instance, but rather with an entire library or class. | 
|  | bool get isStatic; | 
|  | } | 
|  |  | 
|  | /// An element representing a compilation unit. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | abstract class CompilationUnitElement implements UriReferencedElement { | 
|  | /// The top-level accessors (getters and setters) declared in this | 
|  | /// compilation unit. | 
|  | List<PropertyAccessorElement> get accessors; | 
|  |  | 
|  | /// The [CompilationUnitElement] that uses `part` directive to include this | 
|  | /// element, or `null` if this element is the defining unit of the library. | 
|  | @override | 
|  | CompilationUnitElement? get enclosingElement3; | 
|  |  | 
|  | /// The top-level functions declared in this compilation unit. | 
|  | List<FunctionElement> get functions; | 
|  |  | 
|  | /// The libraries exported by this unit. | 
|  | List<LibraryExportElement> get libraryExports; | 
|  |  | 
|  | /// The prefixes used by [libraryImports]. | 
|  | /// | 
|  | /// Each prefix can be used in more than one `import` directive. | 
|  | List<PrefixElement> get libraryImportPrefixes; | 
|  |  | 
|  | /// The libraries imported by this unit. | 
|  | List<LibraryImportElement> get libraryImports; | 
|  |  | 
|  | /// The [LineInfo] for the [source]. | 
|  | LineInfo get lineInfo; | 
|  |  | 
|  | /// The parts included by this unit. | 
|  | List<PartElement> get parts; | 
|  |  | 
|  | /// The scope used to resolve names within this compilation unit. | 
|  | /// | 
|  | /// It includes all of the elements that are declared in the library, and all | 
|  | /// of the elements imported into this unit or parent units. | 
|  | Scope get scope; | 
|  |  | 
|  | @override | 
|  | AnalysisSession get session; | 
|  |  | 
|  | /// The top-level variables declared in this compilation unit. | 
|  | List<TopLevelVariableElement> get topLevelVariables; | 
|  |  | 
|  | /// The type aliases declared in this compilation unit. | 
|  | List<TypeAliasElement> get typeAliases; | 
|  | } | 
|  |  | 
|  | /// [ImportElementPrefix] that is used together with `deferred`. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PrefixElement2 instead') | 
|  | abstract class DeferredImportElementPrefix implements ImportElementPrefix {} | 
|  |  | 
|  | /// Meaning of a URI referenced in a directive. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUri {} | 
|  |  | 
|  | /// [DirectiveUriWithSource] that references a [LibraryElement2]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUriWithLibrary extends DirectiveUriWithSource { | 
|  | /// The library referenced by the [source]. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | LibraryElement get library; | 
|  |  | 
|  | /// The library referenced by the [source]. | 
|  | LibraryElement2 get library2; | 
|  | } | 
|  |  | 
|  | /// [DirectiveUriWithRelativeUriString] that can be parsed into a relative URI. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUriWithRelativeUri | 
|  | extends DirectiveUriWithRelativeUriString { | 
|  | /// The relative URI, parsed from [relativeUriString]. | 
|  | Uri get relativeUri; | 
|  | } | 
|  |  | 
|  | /// [DirectiveUri] for which we can get its relative URI string. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUriWithRelativeUriString extends DirectiveUri { | 
|  | /// The relative URI string specified in code. | 
|  | String get relativeUriString; | 
|  | } | 
|  |  | 
|  | /// [DirectiveUriWithRelativeUri] that resolves to a [Source]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUriWithSource extends DirectiveUriWithRelativeUri { | 
|  | /// The result of resolving [relativeUri] against the enclosing URI. | 
|  | Source get source; | 
|  | } | 
|  |  | 
|  | /// [DirectiveUriWithSource] that references a [LibraryFragment]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class DirectiveUriWithUnit extends DirectiveUriWithSource { | 
|  | /// The library fragment referenced by the [source]. | 
|  | @experimental | 
|  | LibraryFragment get libraryFragment; | 
|  |  | 
|  | /// The unit referenced by the [source]. | 
|  | @Deprecated('Use libraryFragment instead') | 
|  | CompilationUnitElement get unit; | 
|  | } | 
|  |  | 
|  | /// The base class for all of the elements in the element model. Generally | 
|  | /// speaking, the element model is a semantic model of the program that | 
|  | /// represents things that are declared with a name and hence can be referenced | 
|  | /// elsewhere in the code. | 
|  | /// | 
|  | /// There are two exceptions to the general case. First, there are elements in | 
|  | /// the element model that are created for the convenience of various kinds of | 
|  | /// analysis but that do not have any corresponding declaration within the | 
|  | /// source code. Such elements are marked as being <i>synthetic</i>. Examples of | 
|  | /// synthetic elements include | 
|  | /// * default constructors in classes that do not define any explicit | 
|  | ///   constructors, | 
|  | /// * getters and setters that are induced by explicit field declarations, | 
|  | /// * fields that are induced by explicit declarations of getters and setters, | 
|  | ///   and | 
|  | /// * functions representing the initialization expression for a variable. | 
|  | /// | 
|  | /// Second, there are elements in the element model that do not have a name. | 
|  | /// These correspond to unnamed functions and exist in order to more accurately | 
|  | /// represent the semantic structure of the program. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | abstract class Element implements AnalysisTarget { | 
|  | /// A list of this element's children. | 
|  | /// | 
|  | /// There is no guarantee of the order in which the children will be included. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | List<Element> get children; | 
|  |  | 
|  | /// The analysis context in which this element is defined. | 
|  | AnalysisContext get context; | 
|  |  | 
|  | /// The declaration of this element. | 
|  | /// | 
|  | /// If the element is a view on an element, e.g. a method from an interface | 
|  | /// type, with substituted type parameters, return the corresponding element | 
|  | /// from the class, without any substitutions. If this element is already a | 
|  | /// declaration (or a synthetic element, e.g. a synthetic property accessor), | 
|  | /// return itself. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | Element? get declaration; | 
|  |  | 
|  | /// The display name of this element, possibly the empty string if the | 
|  | /// element does not have a name. | 
|  | /// | 
|  | /// In most cases the name and the display name are the same. Differences | 
|  | /// though are cases such as setters where the name of some setter `set f(x)` | 
|  | /// is `f=`, instead of `f`. | 
|  | String get displayName; | 
|  |  | 
|  | /// The content of the documentation comment (including delimiters) for this | 
|  | /// element, or `null` if this element does not or cannot have documentation. | 
|  | String? get documentationComment; | 
|  |  | 
|  | /// The element that either physically or logically encloses this element. | 
|  | /// | 
|  | /// For [LibraryElement] returns `null`, because libraries are the top-level | 
|  | /// elements in the model. | 
|  | /// | 
|  | /// For [CompilationUnitElement] returns the [CompilationUnitElement] that | 
|  | /// uses `part` directive to include this element, or `null` if this element | 
|  | /// is the defining unit of the library. | 
|  | @Deprecated('Use Element2.enclosingElement2 instead or ' | 
|  | 'Fragment.enclosingFragment instead') | 
|  | Element? get enclosingElement3; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@alwaysThrows`. | 
|  | bool get hasAlwaysThrows; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@deprecated` | 
|  | /// or `@Deprecated('..')`. | 
|  | bool get hasDeprecated; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@doNotStore`. | 
|  | bool get hasDoNotStore; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@doNotSubmit`. | 
|  | bool get hasDoNotSubmit; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@factory`. | 
|  | bool get hasFactory; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@immutable`. | 
|  | bool get hasImmutable; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@internal`. | 
|  | bool get hasInternal; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@isTest`. | 
|  | bool get hasIsTest; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@isTestGroup`. | 
|  | bool get hasIsTestGroup; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@JS(..)`. | 
|  | bool get hasJS; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@literal`. | 
|  | bool get hasLiteral; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@mustBeConst`. | 
|  | bool get hasMustBeConst; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@mustBeOverridden`. | 
|  | bool get hasMustBeOverridden; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@mustCallSuper`. | 
|  | bool get hasMustCallSuper; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@nonVirtual`. | 
|  | bool get hasNonVirtual; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@optionalTypeArgs`. | 
|  | bool get hasOptionalTypeArgs; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@override`. | 
|  | bool get hasOverride; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@protected`. | 
|  | bool get hasProtected; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@redeclare`. | 
|  | bool get hasRedeclare; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@reopen`. | 
|  | bool get hasReopen; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@required`. | 
|  | bool get hasRequired; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@sealed`. | 
|  | bool get hasSealed; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@useResult` | 
|  | /// or `@UseResult('..')`. | 
|  | bool get hasUseResult; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@visibleForOverriding`. | 
|  | bool get hasVisibleForOverriding; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@visibleForTemplate`. | 
|  | bool get hasVisibleForTemplate; | 
|  |  | 
|  | /// Whether the element has an annotation of the form `@visibleForTesting`. | 
|  | bool get hasVisibleForTesting; | 
|  |  | 
|  | /// Whether the element has an annotation of the form | 
|  | /// `@visibleOutsideTemplate`. | 
|  | bool get hasVisibleOutsideTemplate; | 
|  |  | 
|  | /// The unique integer identifier of this element. | 
|  | int get id; | 
|  |  | 
|  | /// Whether the element is private. | 
|  | /// | 
|  | /// Private elements are visible only within the library in which they are | 
|  | /// declared. | 
|  | bool get isPrivate; | 
|  |  | 
|  | /// Whether the element is public. | 
|  | /// | 
|  | /// Public elements are visible within any library that imports the library | 
|  | /// in which they are declared. | 
|  | bool get isPublic; | 
|  |  | 
|  | /// Whether the element is synthetic. | 
|  | /// | 
|  | /// A synthetic element is an element that is not represented in the source | 
|  | /// code explicitly, but is implied by the source code, such as the default | 
|  | /// constructor for a class that does not explicitly define any constructors. | 
|  | bool get isSynthetic; | 
|  |  | 
|  | /// The kind of element that this is. | 
|  | ElementKind get kind; | 
|  |  | 
|  | /// Library that contains this element. | 
|  | /// | 
|  | /// This will be the element itself if it is a library element. This will be | 
|  | /// `null` if this element is [MultiplyDefinedElement2] that is not contained | 
|  | /// in a library. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | LibraryElement? get library; | 
|  |  | 
|  | /// The location of this element in the element model. | 
|  | /// | 
|  | /// The object can be used to locate this element at a later time. | 
|  | ElementLocation? get location; | 
|  |  | 
|  | /// All of the metadata associated with this element. | 
|  | /// | 
|  | /// The array will be empty if the element does not have any metadata or if | 
|  | /// the library containing this element has not yet been resolved. | 
|  | List<ElementAnnotation> get metadata; | 
|  |  | 
|  | /// The name of this element, or `null` if this element does not have a name. | 
|  | String? get name; | 
|  |  | 
|  | /// The length of the name of this element in the file that contains the | 
|  | /// declaration of this element, or `0` if this element does not have a name. | 
|  | int get nameLength; | 
|  |  | 
|  | /// The offset of the name of this element in the file that contains the | 
|  | /// declaration of this element, or `-1` if this element is synthetic, does | 
|  | /// not have a name, or otherwise does not have an offset. | 
|  | int get nameOffset; | 
|  |  | 
|  | /// The non-synthetic element that caused this element to be created. | 
|  | /// | 
|  | /// If this element is not synthetic, then the element itself is returned. | 
|  | /// | 
|  | /// If this element is synthetic, then the corresponding non-synthetic | 
|  | /// element is returned. For example, for a synthetic getter of a | 
|  | /// non-synthetic field the field is returned; for a synthetic constructor | 
|  | /// the enclosing class is returned. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | Element get nonSynthetic; | 
|  |  | 
|  | /// The analysis session in which this element is defined. | 
|  | AnalysisSession? get session; | 
|  |  | 
|  | /// The version where this SDK API was added. | 
|  | /// | 
|  | /// A `@Since()` annotation can be applied to a library declaration, | 
|  | /// any public declaration in a library, or in a class, or to an optional | 
|  | /// parameter, etc. | 
|  | /// | 
|  | /// The returned version is "effective", so that if a library is annotated | 
|  | /// then all elements of the library inherit it; or if a class is annotated | 
|  | /// then all members and constructors of the class inherit it. | 
|  | /// | 
|  | /// If multiple `@Since()` annotations apply to the same element, the latest | 
|  | /// version takes precedence. | 
|  | /// | 
|  | /// Returns `null` if the element is not declared in SDK, or does not have | 
|  | /// a `@Since()` annotation applicable to it. | 
|  | Version? get sinceSdkVersion; | 
|  |  | 
|  | @override | 
|  | Source? get source; | 
|  |  | 
|  | /// Returns the presentation of this element as it should appear when | 
|  | /// presented to users. | 
|  | /// | 
|  | /// If [withNullability] is `true`, then [NullabilitySuffix.question] and | 
|  | /// [NullabilitySuffix.star] in types will be represented as `?` and `*`. | 
|  | /// [NullabilitySuffix.none] does not have any explicit presentation. | 
|  | /// | 
|  | /// If [withNullability] is `false`, nullability suffixes will not be | 
|  | /// included into the presentation. | 
|  | /// | 
|  | /// If [multiline] is `true`, the string may be wrapped over multiple lines | 
|  | /// with newlines to improve formatting. For example function signatures may | 
|  | /// be formatted as if they had trailing commas. | 
|  | /// | 
|  | /// Clients should not depend on the content of the returned value as it will | 
|  | /// be changed if doing so would improve the UX. | 
|  | String getDisplayString({ | 
|  | @Deprecated('Only non-nullable by default mode is supported') | 
|  | bool withNullability = true, | 
|  | bool multiline = false, | 
|  | }); | 
|  |  | 
|  | /// Returns a display name for the given element that includes the path to the | 
|  | /// compilation unit in which the type is defined. If [shortName] is `null` | 
|  | /// then [displayName] will be used as the name of this element. Otherwise | 
|  | /// the provided name will be used. | 
|  | // TODO(brianwilkerson): Make the parameter optional. | 
|  | String getExtendedDisplayName(String? shortName); | 
|  |  | 
|  | /// Whether the element, assuming that it is within scope, is accessible to | 
|  | /// code in the given [library]. | 
|  | /// | 
|  | /// This is defined by the Dart Language Specification in section 6.2: | 
|  | /// <blockquote> | 
|  | /// A declaration <i>m</i> is accessible to a library <i>L</i> if <i>m</i> is | 
|  | /// declared in <i>L</i> or if <i>m</i> is public. | 
|  | /// </blockquote> | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | bool isAccessibleIn(LibraryElement library); | 
|  |  | 
|  | /// Returns either this element or the most immediate ancestor of this element | 
|  | /// for which the [predicate] returns `true`, or `null` if there is no such | 
|  | /// element. | 
|  | @Deprecated('Use Element2.thisOrAncestorMatching2() instead') | 
|  | E? thisOrAncestorMatching<E extends Element>( | 
|  | bool Function(Element) predicate, | 
|  | ); | 
|  |  | 
|  | /// Returns either this element or the most immediate ancestor of this element | 
|  | /// for which the [predicate] returns `true`, or `null` if there is no such | 
|  | /// element. | 
|  | @Deprecated('Use Element2.thisOrAncestorMatching2() instead') | 
|  | E? thisOrAncestorMatching3<E extends Element>( | 
|  | bool Function(Element) predicate, | 
|  | ); | 
|  |  | 
|  | /// Returns either this element or the most immediate ancestor of this element | 
|  | /// that has the given type, or `null` if there is no such element. | 
|  | @Deprecated('Use Element2.thisOrAncestorMatching2() instead') | 
|  | E? thisOrAncestorOfType<E extends Element>(); | 
|  |  | 
|  | /// Returns either this element or the most immediate ancestor of this element | 
|  | /// that has the given type, or `null` if there is no such element. | 
|  | @Deprecated('Use Element2.thisOrAncestorMatching2() instead') | 
|  | E? thisOrAncestorOfType3<E extends Element>(); | 
|  | } | 
|  |  | 
|  | /// A single annotation associated with an element. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class ElementAnnotation implements ConstantEvaluationTarget { | 
|  | /// The errors that were produced while computing a value for this | 
|  | /// annotation, or `null` if no value has been computed. | 
|  | /// | 
|  | /// If a value has been produced but no errors were generated, then the | 
|  | /// list will be empty. | 
|  | List<AnalysisError>? get constantEvaluationErrors; | 
|  |  | 
|  | /// Returns the element referenced by this annotation. | 
|  | /// | 
|  | /// In valid code this element can be a [PropertyAccessorElement] getter | 
|  | /// of a constant top-level variable, or a constant static field of a | 
|  | /// class; or a constant [ConstructorElement]. | 
|  | /// | 
|  | /// In invalid code this element can be `null`, or a reference to any | 
|  | /// other element. | 
|  | @Deprecated('Use element2 instead') | 
|  | Element? get element; | 
|  |  | 
|  | /// Returns the element referenced by this annotation. | 
|  | /// | 
|  | /// In valid code this element can be a [GetterElement] of a constant | 
|  | /// top-level variable, or a constant static field of a class; or a | 
|  | /// constant [ConstructorElement2]. | 
|  | /// | 
|  | /// In invalid code this element can be `null`, or a reference to any | 
|  | /// other element. | 
|  | Element2? get element2; | 
|  |  | 
|  | /// Whether the annotation marks the associated function as always throwing. | 
|  | bool get isAlwaysThrows; | 
|  |  | 
|  | /// Whether the annotation marks the associated element as being deprecated. | 
|  | bool get isDeprecated; | 
|  |  | 
|  | /// Whether the annotation marks the associated element as not to be stored. | 
|  | bool get isDoNotStore; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as not to be used. | 
|  | bool get isDoNotSubmit; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as a factory. | 
|  | bool get isFactory; | 
|  |  | 
|  | /// Whether the annotation marks the associated class and its subclasses as | 
|  | /// being immutable. | 
|  | bool get isImmutable; | 
|  |  | 
|  | /// Whether the annotation marks the associated element as being internal to | 
|  | /// its package. | 
|  | bool get isInternal; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as running a single | 
|  | /// test. | 
|  | bool get isIsTest; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as running a test | 
|  | /// group. | 
|  | bool get isIsTestGroup; | 
|  |  | 
|  | /// Whether the annotation marks the associated element with the `JS` | 
|  | /// annotation. | 
|  | bool get isJS; | 
|  |  | 
|  | /// Whether the annotation marks the associated constructor as being literal. | 
|  | bool get isLiteral; | 
|  |  | 
|  | /// Whether the annotation marks the associated returned element as | 
|  | /// requiring a constant argument. | 
|  | bool get isMustBeConst; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as requiring | 
|  | /// subclasses to override this member. | 
|  | bool get isMustBeOverridden; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as requiring | 
|  | /// overriding methods to call super. | 
|  | bool get isMustCallSuper; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being non-virtual. | 
|  | bool get isNonVirtual; | 
|  |  | 
|  | /// Whether the annotation marks the associated type as having "optional" | 
|  | /// type arguments. | 
|  | bool get isOptionalTypeArgs; | 
|  |  | 
|  | /// Whether the annotation marks the associated method as being expected to | 
|  | /// override an inherited method. | 
|  | bool get isOverride; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being protected. | 
|  | bool get isProtected; | 
|  |  | 
|  | /// Whether the annotation marks the associated class as implementing a proxy | 
|  | /// object. | 
|  | bool get isProxy; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as redeclaring. | 
|  | bool get isRedeclare; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being reopened. | 
|  | bool get isReopen; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being required. | 
|  | bool get isRequired; | 
|  |  | 
|  | /// Whether the annotation marks the associated class as being sealed. | 
|  | bool get isSealed; | 
|  |  | 
|  | /// Whether the annotation marks the associated class as being intended to | 
|  | /// be used as an annotation. | 
|  | bool get isTarget; | 
|  |  | 
|  | /// Whether the annotation marks the associated returned element as | 
|  | /// requiring use. | 
|  | bool get isUseResult; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being visible for | 
|  | /// overriding only. | 
|  | bool get isVisibleForOverriding; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being visible for | 
|  | /// template files. | 
|  | bool get isVisibleForTemplate; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being visible for | 
|  | /// testing. | 
|  | bool get isVisibleForTesting; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being visible | 
|  | /// outside of template files. | 
|  | bool get isVisibleOutsideTemplate; | 
|  |  | 
|  | /// Whether the annotation marks the associated member as being a widget | 
|  | /// factory. | 
|  | bool get isWidgetFactory; | 
|  |  | 
|  | /// Returns a representation of the value of this annotation, forcing the | 
|  | /// value to be computed if it had not previously been computed, or `null` | 
|  | /// if the value of this annotation could not be computed because of errors. | 
|  | DartObject? computeConstantValue(); | 
|  |  | 
|  | /// Returns a textual description of this annotation in a form approximating | 
|  | /// valid source. | 
|  | /// | 
|  | /// The returned string will not be valid source primarily in the case where | 
|  | /// the annotation itself is not well-formed. | 
|  | String toSource(); | 
|  | } | 
|  |  | 
|  | /// The kind of elements in the element model. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | class ElementKind implements Comparable<ElementKind> { | 
|  | static const ElementKind AUGMENTATION_IMPORT = | 
|  | ElementKind('AUGMENTATION_IMPORT', 0, "augmentation import"); | 
|  |  | 
|  | static const ElementKind CLASS = ElementKind('CLASS', 1, "class"); | 
|  |  | 
|  | static const ElementKind CLASS_AUGMENTATION = | 
|  | ElementKind('CLASS_AUGMENTATION', 2, "class augmentation"); | 
|  |  | 
|  | static const ElementKind COMPILATION_UNIT = | 
|  | ElementKind('COMPILATION_UNIT', 3, "compilation unit"); | 
|  |  | 
|  | static const ElementKind CONSTRUCTOR = | 
|  | ElementKind('CONSTRUCTOR', 4, "constructor"); | 
|  |  | 
|  | static const ElementKind DYNAMIC = ElementKind('DYNAMIC', 5, "<dynamic>"); | 
|  |  | 
|  | static const ElementKind ENUM = ElementKind('ENUM', 6, "enum"); | 
|  |  | 
|  | static const ElementKind ERROR = ElementKind('ERROR', 7, "<error>"); | 
|  |  | 
|  | static const ElementKind EXPORT = | 
|  | ElementKind('EXPORT', 8, "export directive"); | 
|  |  | 
|  | static const ElementKind EXTENSION = ElementKind('EXTENSION', 9, "extension"); | 
|  |  | 
|  | static const ElementKind EXTENSION_TYPE = | 
|  | ElementKind('EXTENSION_TYPE', 10, "extension type"); | 
|  |  | 
|  | static const ElementKind FIELD = ElementKind('FIELD', 11, "field"); | 
|  |  | 
|  | static const ElementKind FUNCTION = ElementKind('FUNCTION', 12, "function"); | 
|  |  | 
|  | static const ElementKind GENERIC_FUNCTION_TYPE = | 
|  | ElementKind('GENERIC_FUNCTION_TYPE', 13, 'generic function type'); | 
|  |  | 
|  | static const ElementKind GETTER = ElementKind('GETTER', 14, "getter"); | 
|  |  | 
|  | static const ElementKind IMPORT = | 
|  | ElementKind('IMPORT', 15, "import directive"); | 
|  |  | 
|  | static const ElementKind LABEL = ElementKind('LABEL', 16, "label"); | 
|  |  | 
|  | static const ElementKind LIBRARY = ElementKind('LIBRARY', 17, "library"); | 
|  |  | 
|  | static const ElementKind LIBRARY_AUGMENTATION = | 
|  | ElementKind('LIBRARY_AUGMENTATION', 18, "library augmentation"); | 
|  |  | 
|  | static const ElementKind LOCAL_VARIABLE = | 
|  | ElementKind('LOCAL_VARIABLE', 19, "local variable"); | 
|  |  | 
|  | static const ElementKind METHOD = ElementKind('METHOD', 20, "method"); | 
|  |  | 
|  | static const ElementKind MIXIN = ElementKind('MIXIN', 21, "mixin"); | 
|  |  | 
|  | static const ElementKind NAME = ElementKind('NAME', 22, "<name>"); | 
|  |  | 
|  | static const ElementKind NEVER = ElementKind('NEVER', 23, "<never>"); | 
|  |  | 
|  | static const ElementKind PARAMETER = | 
|  | ElementKind('PARAMETER', 24, "parameter"); | 
|  |  | 
|  | static const ElementKind PART = ElementKind('PART', 25, "part"); | 
|  |  | 
|  | static const ElementKind PREFIX = ElementKind('PREFIX', 26, "import prefix"); | 
|  |  | 
|  | static const ElementKind RECORD = ElementKind('RECORD', 27, "record"); | 
|  |  | 
|  | static const ElementKind SETTER = ElementKind('SETTER', 28, "setter"); | 
|  |  | 
|  | static const ElementKind TOP_LEVEL_VARIABLE = | 
|  | ElementKind('TOP_LEVEL_VARIABLE', 29, "top level variable"); | 
|  |  | 
|  | static const ElementKind FUNCTION_TYPE_ALIAS = | 
|  | ElementKind('FUNCTION_TYPE_ALIAS', 30, "function type alias"); | 
|  |  | 
|  | static const ElementKind TYPE_PARAMETER = | 
|  | ElementKind('TYPE_PARAMETER', 31, "type parameter"); | 
|  |  | 
|  | static const ElementKind TYPE_ALIAS = | 
|  | ElementKind('TYPE_ALIAS', 32, "type alias"); | 
|  |  | 
|  | static const ElementKind UNIVERSE = ElementKind('UNIVERSE', 33, "<universe>"); | 
|  |  | 
|  | static const List<ElementKind> values = [ | 
|  | CLASS, | 
|  | CLASS_AUGMENTATION, | 
|  | COMPILATION_UNIT, | 
|  | CONSTRUCTOR, | 
|  | DYNAMIC, | 
|  | ENUM, | 
|  | ERROR, | 
|  | EXPORT, | 
|  | EXTENSION, | 
|  | EXTENSION_TYPE, | 
|  | FIELD, | 
|  | FUNCTION, | 
|  | GENERIC_FUNCTION_TYPE, | 
|  | GETTER, | 
|  | IMPORT, | 
|  | LABEL, | 
|  | LIBRARY, | 
|  | LOCAL_VARIABLE, | 
|  | METHOD, | 
|  | MIXIN, | 
|  | NAME, | 
|  | NEVER, | 
|  | PARAMETER, | 
|  | PART, | 
|  | PREFIX, | 
|  | RECORD, | 
|  | SETTER, | 
|  | TOP_LEVEL_VARIABLE, | 
|  | FUNCTION_TYPE_ALIAS, | 
|  | TYPE_PARAMETER, | 
|  | UNIVERSE | 
|  | ]; | 
|  |  | 
|  | /// The name of this element kind. | 
|  | final String name; | 
|  |  | 
|  | /// The ordinal value of the element kind. | 
|  | final int ordinal; | 
|  |  | 
|  | /// The name displayed in the UI for this kind of element. | 
|  | final String displayName; | 
|  |  | 
|  | /// Initialize a newly created element kind to have the given [displayName]. | 
|  | const ElementKind(this.name, this.ordinal, this.displayName); | 
|  |  | 
|  | @override | 
|  | int compareTo(ElementKind other) => ordinal - other.ordinal; | 
|  |  | 
|  | @override | 
|  | String toString() => name; | 
|  | } | 
|  |  | 
|  | /// The location of an element within the element model. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class ElementLocation { | 
|  | /// The path to the element whose location is represented by this object. | 
|  | /// | 
|  | /// Clients must not modify the returned array. | 
|  | List<String> get components; | 
|  |  | 
|  | /// The encoded representation of this location that can be used to create a | 
|  | /// location that is equal to this location. | 
|  | String get encoding; | 
|  | } | 
|  |  | 
|  | /// An element representing an executable object, including functions, methods, | 
|  | /// constructors, getters, and setters. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use ExecutableElement2 instead') | 
|  | abstract class ExecutableElement implements FunctionTypedElement { | 
|  | @override | 
|  | ExecutableElement get declaration; | 
|  |  | 
|  | @override | 
|  | String get displayName; | 
|  |  | 
|  | @override | 
|  | Element get enclosingElement3; | 
|  |  | 
|  | /// Whether the executable element did not have an explicit return type | 
|  | /// specified for it in the original source. | 
|  | bool get hasImplicitReturnType; | 
|  |  | 
|  | /// Whether the executable element is abstract. | 
|  | /// | 
|  | /// Executable elements are abstract if they are not external, and have no | 
|  | /// body. | 
|  | bool get isAbstract; | 
|  |  | 
|  | /// Whether the executable element has body marked as being asynchronous. | 
|  | bool get isAsynchronous; | 
|  |  | 
|  | /// Whether the element is an augmentation. | 
|  | /// | 
|  | /// If `true`, declaration has the explicit `augment` modifier. | 
|  | bool get isAugmentation; | 
|  |  | 
|  | /// Whether the executable element is an extension type member. | 
|  | bool get isExtensionTypeMember; | 
|  |  | 
|  | /// Whether the executable element is external. | 
|  | /// | 
|  | /// Executable elements are external if they are explicitly marked as such | 
|  | /// using the 'external' keyword. | 
|  | bool get isExternal; | 
|  |  | 
|  | /// Whether the executable element has a body marked as being a generator. | 
|  | bool get isGenerator; | 
|  |  | 
|  | /// Whether the executable element is an operator. | 
|  | /// | 
|  | /// The test may be based on the name of the executable element, in which | 
|  | /// case the result will be correct when the name is legal. | 
|  | bool get isOperator; | 
|  |  | 
|  | /// Whether the element is a static element. | 
|  | /// | 
|  | /// A static element is an element that is not associated with a particular | 
|  | /// instance, but rather with an entire library or class. | 
|  | bool get isStatic; | 
|  |  | 
|  | /// Whether the executable element has a body marked as being synchronous. | 
|  | bool get isSynchronous; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  | } | 
|  |  | 
|  | /// A field defined within a class. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use FieldElement2 instead') | 
|  | abstract class FieldElement | 
|  | implements ClassMemberElement, PropertyInducingElement { | 
|  | @override | 
|  | FieldElement get declaration; | 
|  |  | 
|  | /// Whether the field is abstract. | 
|  | /// | 
|  | /// Executable fields are abstract if they are declared with the `abstract` | 
|  | /// keyword. | 
|  | bool get isAbstract; | 
|  |  | 
|  | /// Whether the field was explicitly marked as being covariant. | 
|  | bool get isCovariant; | 
|  |  | 
|  | /// Whether the element is an enum constant. | 
|  | bool get isEnumConstant; | 
|  |  | 
|  | /// Whether the field was explicitly marked as being external. | 
|  | bool get isExternal; | 
|  |  | 
|  | /// Whether the field can be type promoted. | 
|  | bool get isPromotable; | 
|  |  | 
|  | /// Whether the element is a static element. | 
|  | /// | 
|  | /// A static element is an element that is not associated with a particular | 
|  | /// instance, but rather with an entire library or class. | 
|  | @override | 
|  | bool get isStatic; | 
|  | } | 
|  |  | 
|  | /// A field formal parameter defined within a constructor element. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use FieldFormalParameterElement2 instead') | 
|  | abstract class FieldFormalParameterElement implements ParameterElement { | 
|  | /// The field element associated with this field formal parameter, or `null` | 
|  | /// if the parameter references a field that doesn't exist. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | FieldElement? get field; | 
|  | } | 
|  |  | 
|  | /// A (non-method) function. This can be either a top-level function, a local | 
|  | /// function, a closure, or the initialization expression for a field or | 
|  | /// variable. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TopLevelFunctionElement or LocalFunctionElement') | 
|  | abstract class FunctionElement implements ExecutableElement, LocalElement { | 
|  | /// The name of the method that can be implemented by a class to allow its | 
|  | /// instances to be invoked as if they were a function. | 
|  | static final String CALL_METHOD_NAME = "call"; | 
|  |  | 
|  | /// The name of the synthetic function defined for libraries that are | 
|  | /// deferred. | 
|  | static final String LOAD_LIBRARY_NAME = "loadLibrary"; | 
|  |  | 
|  | /// The name of the function used as an entry point. | 
|  | static const String MAIN_FUNCTION_NAME = "main"; | 
|  |  | 
|  | /// The name of the method that will be invoked if an attempt is made to | 
|  | /// invoke an undefined method on an object. | 
|  | static final String NO_SUCH_METHOD_METHOD_NAME = "noSuchMethod"; | 
|  |  | 
|  | /// Whether the function represents `identical` from the `dart:core` library. | 
|  | bool get isDartCoreIdentical; | 
|  |  | 
|  | /// Whether the function is an entry point, i.e. a top-level function and | 
|  | /// has the name `main`. | 
|  | bool get isEntryPoint; | 
|  | } | 
|  |  | 
|  | /// An element that has a [FunctionType] as its [type]. | 
|  | /// | 
|  | /// This also provides convenient access to the parameters and return type. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use FunctionTypedElement2 instead') | 
|  | abstract class FunctionTypedElement implements TypeParameterizedElement { | 
|  | /// The parameters defined by this executable element. | 
|  | List<ParameterElement> get parameters; | 
|  |  | 
|  | /// The return type defined by this element. | 
|  | DartType get returnType; | 
|  |  | 
|  | /// The type defined by this element. | 
|  | FunctionType get type; | 
|  | } | 
|  |  | 
|  | /// The pseudo-declaration that defines a generic function type. | 
|  | /// | 
|  | /// Clients may not extend, implement, or mix-in this class. | 
|  | @Deprecated('Use GenericFunctionTypeElement2 instead') | 
|  | abstract class GenericFunctionTypeElement implements FunctionTypedElement {} | 
|  |  | 
|  | /// A combinator that causes some of the names in a namespace to be hidden when | 
|  | /// being imported. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class HideElementCombinator implements NamespaceCombinator { | 
|  | /// The names that are not to be made visible in the importing library even | 
|  | /// if they are defined in the imported library. | 
|  | List<String> get hiddenNames; | 
|  | } | 
|  |  | 
|  | /// Usage of a [PrefixElement] in an `import` directive. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PrefixElement2 instead') | 
|  | abstract class ImportElementPrefix { | 
|  | /// The prefix that was specified as part of the import directive, or `null` | 
|  | /// if there was no prefix specified. | 
|  | PrefixElement get element; | 
|  | } | 
|  |  | 
|  | /// An element that has `this`. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use InstanceElement2 instead') | 
|  | abstract class InstanceElement | 
|  | implements TypeDefiningElement, TypeParameterizedElement { | 
|  | /// The declared accessors (getters and setters). | 
|  | List<PropertyAccessorElement> get accessors; | 
|  |  | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | CompilationUnitElement get enclosingElement3; | 
|  |  | 
|  | /// The declared fields. | 
|  | List<FieldElement> get fields; | 
|  |  | 
|  | /// Whether the element is an augmentation. | 
|  | /// | 
|  | /// If `true`, declaration has the explicit `augment` modifier. | 
|  | bool get isAugmentation; | 
|  |  | 
|  | /// The declared methods. | 
|  | List<MethodElement> get methods; | 
|  |  | 
|  | /// The type of `this` expression. | 
|  | /// | 
|  | /// Same as `augmented.thisType`. | 
|  | DartType get thisType; | 
|  | } | 
|  |  | 
|  | /// A pattern variable that is a join of other pattern variables, created | 
|  | /// for a logical-or patterns, or shared `case` bodies in `switch` statements. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated( | 
|  | 'Use JoinPatternVariableFragment and JoinPatternVariableElement2 instead') | 
|  | abstract class JoinPatternVariableElement implements PatternVariableElement { | 
|  | /// Whether the [variables] are consistent, present in all branches, | 
|  | /// and have the same type and finality. | 
|  | bool get isConsistent; | 
|  |  | 
|  | /// The variables that join into this variable. | 
|  | List<PatternVariableElement> get variables; | 
|  | } | 
|  |  | 
|  | /// A label associated with a statement. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LabelElement2 instead') | 
|  | abstract class LabelElement implements Element { | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | ExecutableElement get enclosingElement3; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  | } | 
|  |  | 
|  | /// A library. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LibraryElement2 instead') | 
|  | abstract class LibraryElement implements _ExistingElement { | 
|  | /// The compilation unit that defines this library. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | CompilationUnitElement get definingCompilationUnit; | 
|  |  | 
|  | /// Returns `null`, because libraries are the top-level elements in the model. | 
|  | @override | 
|  | Null get enclosingElement3; | 
|  |  | 
|  | /// The entry point for this library, or `null` if this library does | 
|  | /// not have an entry point. | 
|  | /// | 
|  | /// The entry point is defined to be a zero argument top-level function | 
|  | /// whose name is `main`. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | FunctionElement? get entryPoint; | 
|  |  | 
|  | /// The libraries that are exported from this library. | 
|  | List<LibraryElement> get exportedLibraries; | 
|  |  | 
|  | /// The export [Namespace] of this library. | 
|  | Namespace get exportNamespace; | 
|  |  | 
|  | /// The set of features available to this library. | 
|  | /// | 
|  | /// Determined by the combination of the language version for the enclosing | 
|  | /// package, enabled experiments, and the presence of a `// @dart` language | 
|  | /// version override comment at the top of the file. | 
|  | FeatureSet get featureSet; | 
|  |  | 
|  | /// The identifier that uniquely identifies this element among the children | 
|  | /// of this element's parent. | 
|  | String get identifier; | 
|  |  | 
|  | /// The libraries that are imported into this library. | 
|  | /// | 
|  | /// This includes all of the libraries that are imported using a prefix, and | 
|  | /// those that are imported without a prefix. | 
|  | List<LibraryElement> get importedLibraries; | 
|  |  | 
|  | /// Whether the library is the `dart:async` library. | 
|  | bool get isDartAsync; | 
|  |  | 
|  | /// Whether the library is the `dart:core` library. | 
|  | bool get isDartCore; | 
|  |  | 
|  | /// Whether the library is part of the SDK. | 
|  | bool get isInSdk; | 
|  |  | 
|  | /// The language version for this library. | 
|  | LibraryLanguageVersion get languageVersion; | 
|  |  | 
|  | @override | 
|  | LibraryElement get library; | 
|  |  | 
|  | /// The element representing the synthetic function `loadLibrary` that is | 
|  | /// implicitly defined for this library if the library is imported using a | 
|  | /// deferred import. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | FunctionElement get loadLibraryFunction; | 
|  |  | 
|  | /// The name of this library, possibly the empty string if this library does | 
|  | /// not have an explicit name. | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// The public [Namespace] of this library. | 
|  | Namespace get publicNamespace; | 
|  |  | 
|  | @override | 
|  | AnalysisSession get session; | 
|  |  | 
|  | /// The top-level elements defined in each of the compilation units that are | 
|  | /// included in this library. This includes both public and private elements, | 
|  | /// but does not include imports, exports, or synthetic elements. | 
|  | Iterable<Element> get topLevelElements; | 
|  |  | 
|  | /// The [TypeProvider] that is used in this library. | 
|  | TypeProvider get typeProvider; | 
|  |  | 
|  | /// The [TypeSystem] that is used in this library. | 
|  | TypeSystem get typeSystem; | 
|  |  | 
|  | /// The compilation units this library consists of. | 
|  | /// | 
|  | /// This includes the defining compilation unit and units included using the | 
|  | /// `part` directive. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | List<CompilationUnitElement> get units; | 
|  | } | 
|  |  | 
|  | /// A single export directive within a library. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LibraryExport instead') | 
|  | abstract class LibraryExportElement implements _ExistingElement { | 
|  | /// The combinators that were specified as part of the `export` directive in | 
|  | /// the order in which they were specified. | 
|  | List<NamespaceCombinator> get combinators; | 
|  |  | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | CompilationUnitElement get enclosingElement3; | 
|  |  | 
|  | /// The [LibraryElement], if [uri] is a [DirectiveUriWithLibrary]. | 
|  | LibraryElement? get exportedLibrary; | 
|  |  | 
|  | /// The offset of the `export` keyword. | 
|  | int get exportKeywordOffset; | 
|  |  | 
|  | /// The interpretation of the URI specified in the directive. | 
|  | DirectiveUri get uri; | 
|  | } | 
|  |  | 
|  | /// A single import directive within a library. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LibraryImport instead') | 
|  | abstract class LibraryImportElement implements _ExistingElement { | 
|  | /// The combinators that were specified as part of the `import` directive in | 
|  | /// the order in which they were specified. | 
|  | List<NamespaceCombinator> get combinators; | 
|  |  | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | CompilationUnitElement get enclosingElement3; | 
|  |  | 
|  | /// The [LibraryElement], if [uri] is a [DirectiveUriWithLibrary]. | 
|  | LibraryElement? get importedLibrary; | 
|  |  | 
|  | /// The offset of the `import` keyword. | 
|  | int get importKeywordOffset; | 
|  |  | 
|  | /// The [Namespace] that this directive contributes to the containing library. | 
|  | Namespace get namespace; | 
|  |  | 
|  | /// The prefix that was specified as part of the import directive, or `null` | 
|  | /// if there was no prefix specified. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | ImportElementPrefix? get prefix; | 
|  |  | 
|  | /// The interpretation of the URI specified in the directive. | 
|  | DirectiveUri get uri; | 
|  | } | 
|  |  | 
|  | class LibraryLanguageVersion { | 
|  | /// The version for the whole package that contains this library. | 
|  | final Version package; | 
|  |  | 
|  | /// The version specified using `@dart` override, `null` if absent or invalid. | 
|  | final Version? override; | 
|  |  | 
|  | LibraryLanguageVersion({ | 
|  | required this.package, | 
|  | required this.override, | 
|  | }); | 
|  |  | 
|  | /// The effective language version for the library. | 
|  | Version get effective { | 
|  | return override ?? package; | 
|  | } | 
|  | } | 
|  |  | 
|  | /// An element that can be (but is not required to be) defined within a method | 
|  | /// or function (an [ExecutableElement]). | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LocalElement2 instead') | 
|  | abstract class LocalElement implements Element {} | 
|  |  | 
|  | /// A local variable. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use LocalVariableFragment and LocalVariableElement2 instead') | 
|  | abstract class LocalVariableElement implements PromotableElement { | 
|  | /// Whether the variable has an initializer at declaration. | 
|  | bool get hasInitializer; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  | } | 
|  |  | 
|  | /// An element that represents a method defined within a class. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use MethodElement2 instead') | 
|  | abstract class MethodElement implements ClassMemberElement, ExecutableElement { | 
|  | @override | 
|  | MethodElement get declaration; | 
|  | } | 
|  |  | 
|  | /// An object that controls how namespaces are combined. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | sealed class NamespaceCombinator { | 
|  | /// The offset of the character immediately following the last character of | 
|  | /// this node. | 
|  | int get end; | 
|  |  | 
|  | /// The offset of the first character of this node. | 
|  | int get offset; | 
|  | } | 
|  |  | 
|  | /// A parameter defined within an executable element. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use FormalParameterElement instead') | 
|  | abstract class ParameterElement | 
|  | implements PromotableElement, ConstantEvaluationTarget { | 
|  | @override | 
|  | ParameterElement get declaration; | 
|  |  | 
|  | /// The code of the default value, or `null` if no default value. | 
|  | String? get defaultValueCode; | 
|  |  | 
|  | @experimental | 
|  | FormalParameterElement get element; | 
|  |  | 
|  | /// Whether the parameter has a default value. | 
|  | bool get hasDefaultValue; | 
|  |  | 
|  | /// Whether the parameter is covariant, meaning it is allowed to have a | 
|  | /// narrower type in an override. | 
|  | bool get isCovariant; | 
|  |  | 
|  | /// Whether the parameter is an initializing formal parameter. | 
|  | bool get isInitializingFormal; | 
|  |  | 
|  | /// Whether the parameter is a named parameter. | 
|  | /// | 
|  | /// Named parameters that are annotated with the `@required` annotation are | 
|  | /// considered optional. Named parameters that are annotated with the | 
|  | /// `required` syntax are considered required. | 
|  | bool get isNamed; | 
|  |  | 
|  | /// Whether the parameter is an optional parameter. | 
|  | /// | 
|  | /// Optional parameters can either be positional or named. Named parameters | 
|  | /// that are annotated with the `@required` annotation are considered | 
|  | /// optional. Named parameters that are annotated with the `required` syntax | 
|  | /// are considered required. | 
|  | bool get isOptional; | 
|  |  | 
|  | /// Whether the parameter is both an optional and named parameter. | 
|  | /// | 
|  | /// Named parameters that are annotated with the `@required` annotation are | 
|  | /// considered optional. Named parameters that are annotated with the | 
|  | /// `required` syntax are considered required. | 
|  | bool get isOptionalNamed; | 
|  |  | 
|  | /// Whether the parameter is both an optional and positional parameter. | 
|  | bool get isOptionalPositional; | 
|  |  | 
|  | /// Whether the parameter is a positional parameter. | 
|  | /// | 
|  | /// Positional parameters can either be required or optional. | 
|  | bool get isPositional; | 
|  |  | 
|  | /// Whether the parameter is either a required positional parameter, or a | 
|  | /// named parameter with the `required` keyword. | 
|  | /// | 
|  | /// Note: the presence or absence of the `@required` annotation does not | 
|  | /// change the meaning of this getter. The parameter `{@required int x}` | 
|  | /// will return `false` and the parameter `{@required required int x}` | 
|  | /// will return `true`. | 
|  | bool get isRequired; | 
|  |  | 
|  | /// Whether the parameter is both a required and named parameter. | 
|  | /// | 
|  | /// Named parameters that are annotated with the `@required` annotation are | 
|  | /// considered optional. Named parameters that are annotated with the | 
|  | /// `required` syntax are considered required. | 
|  | bool get isRequiredNamed; | 
|  |  | 
|  | /// Whether the parameter is both a required and positional parameter. | 
|  | bool get isRequiredPositional; | 
|  |  | 
|  | /// Whether the parameter is a super formal parameter. | 
|  | bool get isSuperFormal; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// The kind of this parameter. | 
|  | @Deprecated('Use the getters isOptionalNamed, isOptionalPositional, ' | 
|  | 'isRequiredNamed, and isRequiredPositional') | 
|  | ParameterKind get parameterKind; | 
|  |  | 
|  | /// The parameters defined by this parameter. | 
|  | /// | 
|  | /// A parameter will only define other parameters if it is a function typed | 
|  | /// parameter. | 
|  | List<ParameterElement> get parameters; | 
|  |  | 
|  | /// The type parameters defined by this parameter. | 
|  | /// | 
|  | /// A parameter will only define type parameters if it is a function typed | 
|  | /// parameter. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | List<TypeParameterElement> get typeParameters; | 
|  |  | 
|  | /// Appends the type, name and possibly the default value of this parameter | 
|  | /// to the given [buffer]. | 
|  | void appendToWithoutDelimiters( | 
|  | StringBuffer buffer, { | 
|  | @Deprecated('Only non-nullable by default mode is supported') | 
|  | bool withNullability = true, | 
|  | }); | 
|  | } | 
|  |  | 
|  | /// A 'part' directive within a library. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PartInclude instead') | 
|  | abstract class PartElement implements _ExistingElement { | 
|  | /// The interpretation of the URI specified in the directive. | 
|  | DirectiveUri get uri; | 
|  | } | 
|  |  | 
|  | /// A pattern variable. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PatternVariableFragment and PatternVariableElement2 instead') | 
|  | abstract class PatternVariableElement implements LocalVariableElement { | 
|  | /// The variable in which this variable joins with other pattern variables | 
|  | /// with the same name, in a logical-or pattern, or shared case scope. | 
|  | JoinPatternVariableElement? get join; | 
|  | } | 
|  |  | 
|  | /// A prefix used to import one or more libraries into another library. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PrefixElement2 instead') | 
|  | abstract class PrefixElement implements _ExistingElement { | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | CompilationUnitElement get enclosingElement3; | 
|  |  | 
|  | /// The imports that share this prefix. | 
|  | List<LibraryImportElement> get imports; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// The name lookup scope for this import prefix. | 
|  | /// | 
|  | /// It consists of elements imported into the enclosing library with this | 
|  | /// prefix. The namespace combinators of the import directives are taken | 
|  | /// into account. | 
|  | Scope get scope; | 
|  | } | 
|  |  | 
|  | /// A variable that might be subject to type promotion.  This might be a local | 
|  | /// variable or a parameter. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PromotableElement2 instead') | 
|  | abstract class PromotableElement implements LocalElement, VariableElement { | 
|  | // Promotable elements are guaranteed to have a name. | 
|  | @override | 
|  | String get name; | 
|  | } | 
|  |  | 
|  | /// A getter or a setter. Note that explicitly defined property accessors | 
|  | /// implicitly define a synthetic field. Symmetrically, synthetic accessors are | 
|  | /// implicitly created for explicitly defined fields. The following rules apply: | 
|  | /// | 
|  | /// * Every explicit field is represented by a non-synthetic [FieldElement]. | 
|  | /// * Every explicit field induces a getter and possibly a setter, both of which | 
|  | ///   are represented by synthetic [PropertyAccessorElement]s. | 
|  | /// * Every explicit getter or setter is represented by a non-synthetic | 
|  | ///   [PropertyAccessorElement]. | 
|  | /// * Every explicit getter or setter (or pair thereof if they have the same | 
|  | ///   name) induces a field that is represented by a synthetic [FieldElement]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PropertyAccessorElement2 instead') | 
|  | abstract class PropertyAccessorElement implements ExecutableElement { | 
|  | /// The accessor representing the getter that corresponds to (has the same | 
|  | /// name as) this setter, or `null` if this accessor is not a setter or | 
|  | /// if there is no corresponding getter. | 
|  | PropertyAccessorElement? get correspondingGetter; | 
|  |  | 
|  | /// The accessor representing the setter that corresponds to (has the same | 
|  | /// name as) this getter, or `null` if this accessor is not a getter or | 
|  | /// if there is no corresponding setter. | 
|  | PropertyAccessorElement? get correspondingSetter; | 
|  |  | 
|  | @override | 
|  | PropertyAccessorElement get declaration; | 
|  |  | 
|  | @override | 
|  | Element get enclosingElement3; | 
|  |  | 
|  | /// Whether the accessor represents a getter. | 
|  | bool get isGetter; | 
|  |  | 
|  | /// Whether the accessor represents a setter. | 
|  | bool get isSetter; | 
|  |  | 
|  | /// The field or top-level variable associated with this accessor. | 
|  | /// | 
|  | /// If this accessor was explicitly defined (is not synthetic) then the | 
|  | /// variable associated with it will be synthetic. | 
|  | /// | 
|  | /// If this accessor is an augmentation, and [augmentationTarget] is `null`, | 
|  | /// the variable is `null`. | 
|  | PropertyInducingElement? get variable2; | 
|  | } | 
|  |  | 
|  | /// A variable that has an associated getter and possibly a setter. Note that | 
|  | /// explicitly defined variables implicitly define a synthetic getter and that | 
|  | /// non-`final` explicitly defined variables implicitly define a synthetic | 
|  | /// setter. Symmetrically, synthetic fields are implicitly created for | 
|  | /// explicitly defined getters and setters. The following rules apply: | 
|  | /// | 
|  | /// * Every explicit variable is represented by a non-synthetic | 
|  | ///   [PropertyInducingElement]. | 
|  | /// * Every explicit variable induces a getter and possibly a setter, both of | 
|  | ///   which are represented by synthetic [PropertyAccessorElement]s. | 
|  | /// * Every explicit getter or setter is represented by a non-synthetic | 
|  | ///   [PropertyAccessorElement]. | 
|  | /// * Every explicit getter or setter (or pair thereof if they have the same | 
|  | ///   name) induces a variable that is represented by a synthetic | 
|  | ///   [PropertyInducingElement]. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use PropertyInducingElement2 instead') | 
|  | abstract class PropertyInducingElement implements VariableElement { | 
|  | @override | 
|  | String get displayName; | 
|  |  | 
|  | /// The getter associated with this variable. | 
|  | /// | 
|  | /// If this variable was explicitly defined (is not synthetic) then the | 
|  | /// getter associated with it will be synthetic. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | PropertyAccessorElement? get getter; | 
|  |  | 
|  | /// Whether the variable has an initializer at declaration. | 
|  | bool get hasInitializer; | 
|  |  | 
|  | /// Whether the element is an augmentation. | 
|  | /// | 
|  | /// If `true`, declaration has the explicit `augment` modifier. | 
|  | bool get isAugmentation; | 
|  |  | 
|  | @override | 
|  | LibraryElement get library; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// The setter associated with this variable, or `null` if the variable | 
|  | /// is effectively `final` and therefore does not have a setter associated | 
|  | /// with it. | 
|  | /// | 
|  | /// This can happen either because the variable is explicitly defined as | 
|  | /// being `final` or because the variable is induced by an explicit getter | 
|  | /// that does not have a corresponding setter. If this variable was | 
|  | /// explicitly defined (is not synthetic) then the setter associated with | 
|  | /// it will be synthetic. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | PropertyAccessorElement? get setter; | 
|  | } | 
|  |  | 
|  | /// A combinator that cause some of the names in a namespace to be visible (and | 
|  | /// the rest hidden) when being imported. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | abstract class ShowElementCombinator implements NamespaceCombinator { | 
|  | /// The names that are to be made visible in the importing library if they | 
|  | /// are defined in the imported library. | 
|  | List<String> get shownNames; | 
|  | } | 
|  |  | 
|  | /// A super formal parameter defined within a constructor element. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use SuperFormalParameterElement2 instead') | 
|  | abstract class SuperFormalParameterElement implements ParameterElement { | 
|  | /// The associated super-constructor parameter, from the super-constructor | 
|  | /// that is referenced by the implicit or explicit super-constructor | 
|  | /// invocation. | 
|  | /// | 
|  | /// Can be `null` for erroneous code - not existing super-constructor, | 
|  | /// no corresponding parameter in the super-constructor. | 
|  | ParameterElement? get superConstructorParameter; | 
|  | } | 
|  |  | 
|  | /// A top-level variable. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TopLevelVariableElement2 instead') | 
|  | abstract class TopLevelVariableElement implements PropertyInducingElement { | 
|  | @override | 
|  | TopLevelVariableElement get declaration; | 
|  |  | 
|  | /// Whether the field was explicitly marked as being external. | 
|  | bool get isExternal; | 
|  | } | 
|  |  | 
|  | /// A type alias (`typedef`). | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TypeAliasElement2 instead') | 
|  | abstract class TypeAliasElement | 
|  | implements TypeParameterizedElement, TypeDefiningElement { | 
|  | /// If the aliased type has structure, return the corresponding element. | 
|  | /// For example it could be [GenericFunctionTypeElement]. | 
|  | /// | 
|  | /// If there is no structure, return `null`. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | Element? get aliasedElement; | 
|  |  | 
|  | /// The aliased type. | 
|  | /// | 
|  | /// If non-function type aliases feature is enabled for the enclosing library, | 
|  | /// this type might be just anything. If the feature is disabled, return | 
|  | /// a [FunctionType]. | 
|  | DartType get aliasedType; | 
|  |  | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | CompilationUnitElement get enclosingElement3; | 
|  |  | 
|  | /// Whether the element is an augmentation. | 
|  | /// | 
|  | /// If `true`, declaration has the explicit `augment` modifier. | 
|  | bool get isAugmentation; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// Produces the type resulting from instantiating this typedef with the given | 
|  | /// [typeArguments] and [nullabilitySuffix]. | 
|  | /// | 
|  | /// Note that this always instantiates the typedef itself, so for a | 
|  | /// [TypeAliasElement] the returned [DartType] might still be a generic | 
|  | /// type, with type formals. For example, if the typedef is: | 
|  | /// | 
|  | ///     typedef F<T> = void Function<U>(T, U); | 
|  | /// | 
|  | /// then `F<int>` will produce `void Function<U>(int, U)`. | 
|  | DartType instantiate({ | 
|  | required List<DartType> typeArguments, | 
|  | required NullabilitySuffix nullabilitySuffix, | 
|  | }); | 
|  | } | 
|  |  | 
|  | /// An element that defines a type. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TypeDefiningElement2 instead') | 
|  | abstract class TypeDefiningElement implements Element {} | 
|  |  | 
|  | /// A type parameter. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TypeParameterElement2 instead') | 
|  | abstract class TypeParameterElement implements TypeDefiningElement { | 
|  | /// The type representing the bound associated with this parameter, or `null` | 
|  | /// if this parameter does not have an explicit bound. Being able to | 
|  | /// distinguish between an implicit and explicit bound is needed by the | 
|  | /// instantiate to bounds algorithm. | 
|  | DartType? get bound; | 
|  |  | 
|  | @override | 
|  | TypeParameterElement get declaration; | 
|  |  | 
|  | @override | 
|  | String get displayName; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// Creates the [TypeParameterType] with the given [nullabilitySuffix] for | 
|  | /// this type parameter. | 
|  | TypeParameterType instantiate({ | 
|  | required NullabilitySuffix nullabilitySuffix, | 
|  | }); | 
|  | } | 
|  |  | 
|  | /// An element that has type parameters, such as a class or a typedef. This also | 
|  | /// includes functions and methods if support for generic methods is enabled. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use TypeParameterizedElement2 instead') | 
|  | abstract class TypeParameterizedElement implements _ExistingElement { | 
|  | /// If the element defines a type, indicates whether the type may safely | 
|  | /// appear without explicit type parameters as the bounds of a type parameter | 
|  | /// declaration. | 
|  | /// | 
|  | /// If the element does not define a type, returns `true`. | 
|  | bool get isSimplyBounded; | 
|  |  | 
|  | /// The type parameters declared by this element directly. | 
|  | /// | 
|  | /// This does not include type parameters that are declared by any enclosing | 
|  | /// elements. | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | List<TypeParameterElement> get typeParameters; | 
|  | } | 
|  |  | 
|  | /// A pseudo-elements that represents names that are undefined. This situation | 
|  | /// is not allowed by the language, so objects implementing this interface | 
|  | /// always represent an error. As a result, most of the normal operations on | 
|  | /// elements do not make sense and will return useless results. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Not used anymore') | 
|  | abstract class UndefinedElement implements Element {} | 
|  |  | 
|  | /// An element included into a library using some URI. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use Element2 instead') | 
|  | abstract class UriReferencedElement implements _ExistingElement { | 
|  | /// The URI that is used to include this element into the enclosing library, | 
|  | /// or `null` if this is the defining compilation unit of a library. | 
|  | String? get uri; | 
|  |  | 
|  | /// The offset of the character immediately following the last character of | 
|  | /// this node's URI, or `-1` for synthetic import. | 
|  | int get uriEnd; | 
|  |  | 
|  | /// The offset of the URI in the file, or `-1` if this element is synthetic. | 
|  | int get uriOffset; | 
|  | } | 
|  |  | 
|  | /// A variable. There are more specific subclasses for more specific kinds of | 
|  | /// variables. | 
|  | /// | 
|  | /// Clients may not extend, implement or mix-in this class. | 
|  | @Deprecated('Use VariableElement2 instead') | 
|  | abstract class VariableElement implements Element, ConstantEvaluationTarget { | 
|  | @override | 
|  | VariableElement get declaration; | 
|  |  | 
|  | /// Whether the variable element did not have an explicit type specified | 
|  | /// for it. | 
|  | bool get hasImplicitType; | 
|  |  | 
|  | /// Whether the variable was declared with the 'const' modifier. | 
|  | bool get isConst; | 
|  |  | 
|  | /// Whether the variable was declared with the 'final' modifier. | 
|  | /// | 
|  | /// Variables that are declared with the 'const' modifier will return `false` | 
|  | /// even though they are implicitly final. | 
|  | bool get isFinal; | 
|  |  | 
|  | /// Whether the variable uses late evaluation semantics. | 
|  | /// | 
|  | /// This will always return `false` unless the experiment 'non-nullable' is | 
|  | /// enabled. | 
|  | bool get isLate; | 
|  |  | 
|  | /// Whether the element is a static variable, as per section 8 of the Dart | 
|  | /// Language Specification: | 
|  | /// | 
|  | /// > A static variable is a variable that is not associated with a particular | 
|  | /// > instance, but rather with an entire library or class. Static variables | 
|  | /// > include library variables and class variables. Class variables are | 
|  | /// > variables whose declaration is immediately nested inside a class | 
|  | /// > declaration and includes the modifier static. A library variable is | 
|  | /// > implicitly static. | 
|  | bool get isStatic; | 
|  |  | 
|  | @override | 
|  | String get name; | 
|  |  | 
|  | /// The declared type of this variable. | 
|  | DartType get type; | 
|  |  | 
|  | /// Returns a representation of the value of this variable, forcing the value | 
|  | /// to be computed if it had not previously been computed, or `null` if either | 
|  | /// this variable was not declared with the 'const' modifier or if the value | 
|  | /// of this variable could not be computed because of errors. | 
|  | DartObject? computeConstantValue(); | 
|  | } | 
|  |  | 
|  | /// This class exists to provide non-nullable overrides for existing elements, | 
|  | /// as opposite to artificial "multiply defined" element. | 
|  | @Deprecated('Use Element2 instead') | 
|  | @AnalyzerPublicApi( | 
|  | message: 'Exposed because it is implemented by various elements') | 
|  | abstract class _ExistingElement implements Element { | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | Element get declaration; | 
|  |  | 
|  | @Deprecated(elementModelDeprecationMsg) | 
|  | @override | 
|  | LibraryElement get library; | 
|  |  | 
|  | @override | 
|  | Source get librarySource; | 
|  |  | 
|  | @override | 
|  | Source get source; | 
|  | } |