Index: pkg/analyzer_experimental/lib/src/generated/element.dart |
diff --git a/pkg/analyzer_experimental/lib/src/generated/element.dart b/pkg/analyzer_experimental/lib/src/generated/element.dart |
deleted file mode 100644 |
index a43b3cba4938d28f4b1309d17fe5a1fa821f6b31..0000000000000000000000000000000000000000 |
--- a/pkg/analyzer_experimental/lib/src/generated/element.dart |
+++ /dev/null |
@@ -1,7797 +0,0 @@ |
-// This code was auto-generated, is not intended to be edited, and is subject to |
-// significant change. Please see the README file for more information. |
-library engine.element; |
-import 'dart:collection'; |
-import 'java_core.dart'; |
-import 'java_engine.dart'; |
-import 'utilities_collection.dart'; |
-import 'source.dart'; |
-import 'scanner.dart' show Keyword; |
-import 'ast.dart' show Identifier, LibraryIdentifier; |
-import 'sdk.dart' show DartSdk; |
-import 'html.dart' show XmlTagNode; |
-import 'engine.dart' show AnalysisContext; |
-import 'constant.dart' show EvaluationResultImpl; |
-import 'utilities_dart.dart'; |
-/** |
- * The interface `ClassElement` defines the behavior of elements that represent a class. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ClassElement implements Element { |
- |
- /** |
- * Return an array containing all of the accessors (getters and setters) declared in this class. |
- * |
- * @return the accessors declared in this class |
- */ |
- List<PropertyAccessorElement> get accessors; |
- |
- /** |
- * Return an array containing all the supertypes defined for this class and its supertypes. This |
- * includes superclasses, mixins and interfaces. |
- * |
- * @return all the supertypes of this class, including mixins |
- */ |
- List<InterfaceType> get allSupertypes; |
- |
- /** |
- * Return an array containing all of the constructors declared in this class. |
- * |
- * @return the constructors declared in this class |
- */ |
- List<ConstructorElement> get constructors; |
- |
- /** |
- * Return an array containing all of the fields declared in this class. |
- * |
- * @return the fields declared in this class |
- */ |
- List<FieldElement> get fields; |
- |
- /** |
- * Return the element representing the getter with the given name that is declared in this class, |
- * or `null` if this class does not declare a getter with the given name. |
- * |
- * @param getterName the name of the getter to be returned |
- * @return the getter declared in this class with the given name |
- */ |
- PropertyAccessorElement getGetter(String getterName); |
- |
- /** |
- * Return an array containing all of the interfaces that are implemented by this class. |
- * |
- * <b>Note:</b> Because the element model represents the state of the code, it is possible for it |
- * to be semantically invalid. In particular, it is not safe to assume that the inheritance |
- * structure of a class does not contain a cycle. Clients that traverse the inheritance structure |
- * must explicitly guard against infinite loops. |
- * |
- * @return the interfaces that are implemented by this class |
- */ |
- List<InterfaceType> get interfaces; |
- |
- /** |
- * Return the element representing the method with the given name that is declared in this class, |
- * or `null` if this class does not declare a method with the given name. |
- * |
- * @param methodName the name of the method to be returned |
- * @return the method declared in this class with the given name |
- */ |
- MethodElement getMethod(String methodName); |
- |
- /** |
- * Return an array containing all of the methods declared in this class. |
- * |
- * @return the methods declared in this class |
- */ |
- List<MethodElement> get methods; |
- |
- /** |
- * Return an array containing all of the mixins that are applied to the class being extended in |
- * order to derive the superclass of this class. |
- * |
- * <b>Note:</b> Because the element model represents the state of the code, it is possible for it |
- * to be semantically invalid. In particular, it is not safe to assume that the inheritance |
- * structure of a class does not contain a cycle. Clients that traverse the inheritance structure |
- * must explicitly guard against infinite loops. |
- * |
- * @return the mixins that are applied to derive the superclass of this class |
- */ |
- List<InterfaceType> get mixins; |
- |
- /** |
- * Return the named constructor declared in this class with the given name, or `null` if |
- * this class does not declare a named constructor with the given name. |
- * |
- * @param name the name of the constructor to be returned |
- * @return the element representing the specified constructor |
- */ |
- ConstructorElement getNamedConstructor(String name); |
- |
- /** |
- * Return the element representing the setter with the given name that is declared in this class, |
- * or `null` if this class does not declare a setter with the given name. |
- * |
- * @param setterName the name of the getter to be returned |
- * @return the setter declared in this class with the given name |
- */ |
- PropertyAccessorElement getSetter(String setterName); |
- |
- /** |
- * Return the superclass of this class, or `null` if the class represents the class |
- * 'Object'. All other classes will have a non-`null` superclass. If the superclass was not |
- * explicitly declared then the implicit superclass 'Object' will be returned. |
- * |
- * <b>Note:</b> Because the element model represents the state of the code, it is possible for it |
- * to be semantically invalid. In particular, it is not safe to assume that the inheritance |
- * structure of a class does not contain a cycle. Clients that traverse the inheritance structure |
- * must explicitly guard against infinite loops. |
- * |
- * @return the superclass of this class |
- */ |
- InterfaceType get supertype; |
- |
- /** |
- * Return the type defined by the class. |
- * |
- * @return the type defined by the class |
- */ |
- InterfaceType get type; |
- |
- /** |
- * Return an array containing all of the type parameters declared for this class. |
- * |
- * @return the type parameters declared for this class |
- */ |
- List<TypeParameterElement> get typeParameters; |
- |
- /** |
- * Return the unnamed constructor declared in this class, or `null` if this class does not |
- * declare an unnamed constructor but does declare named constructors. The returned constructor |
- * will be synthetic if this class does not declare any constructors, in which case it will |
- * represent the default constructor for the class. |
- * |
- * @return the unnamed constructor defined in this class |
- */ |
- ConstructorElement get unnamedConstructor; |
- |
- /** |
- * Return `true` if this class or its superclass declares a non-final instance field. |
- * |
- * @return `true` if this class or its superclass declares a non-final instance field |
- */ |
- bool hasNonFinalField(); |
- |
- /** |
- * Return `true` if this class has reference to super (so, for example, cannot be used as a |
- * mixin). |
- * |
- * @return `true` if this class has reference to super |
- */ |
- bool hasReferenceToSuper(); |
- |
- /** |
- * Return `true` if this class is abstract. A class is abstract if it has an explicit |
- * `abstract` modifier. Note, that this definition of <i>abstract</i> is different from |
- * <i>has unimplemented members</i>. |
- * |
- * @return `true` if this class is abstract |
- */ |
- bool get isAbstract; |
- |
- /** |
- * Return `true` if this class is defined by a typedef construct. |
- * |
- * @return `true` if this class is defined by a typedef construct |
- */ |
- bool get isTypedef; |
- |
- /** |
- * Return `true` if this class can validly be used as a mixin when defining another class. |
- * The behavior of this method is defined by the Dart Language Specification in section 9: |
- * <blockquote>It is a compile-time error if a declared or derived mixin refers to super. It is a |
- * compile-time error if a declared or derived mixin explicitly declares a constructor. It is a |
- * compile-time error if a mixin is derived from a class whose superclass is not |
- * Object.</blockquote> |
- * |
- * @return `true` if this class can validly be used as a mixin |
- */ |
- bool get isValidMixin; |
- |
- /** |
- * Return the element representing the getter that results from looking up the given getter in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.15.1: |
- * <blockquote>The result of looking up getter (respectively setter) <i>m</i> in class <i>C</i> |
- * with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param getterName the name of the getter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given getter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library); |
- |
- /** |
- * Return the element representing the method that results from looking up the given method in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.15.1: |
- * <blockquote> The result of looking up method <i>m</i> in class <i>C</i> with respect to library |
- * <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance method named <i>m</i> that is accessible to <i>L</i>, then |
- * that method is the result of the lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then |
- * the result of the lookup is the result of looking up method <i>m</i> in <i>S</i> with respect |
- * to <i>L</i>. Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param methodName the name of the method being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given method in this class with respect to the given |
- * library |
- */ |
- MethodElement lookUpMethod(String methodName, LibraryElement library); |
- |
- /** |
- * Return the element representing the setter that results from looking up the given setter in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.16: |
- * <blockquote> The result of looking up getter (respectively setter) <i>m</i> in class <i>C</i> |
- * with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param setterName the name of the setter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given setter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library); |
-} |
-/** |
- * The interface `ClassMemberElement` defines the behavior of elements that are contained |
- * within a [ClassElement]. |
- */ |
-abstract class ClassMemberElement implements Element { |
- |
- /** |
- * Return the type in which this member is defined. |
- * |
- * @return the type in which this member is defined |
- */ |
- ClassElement get enclosingElement; |
- |
- /** |
- * Return `true` if this 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. |
- * |
- * @return `true` if this executable element is a static element |
- */ |
- bool get isStatic; |
-} |
-/** |
- * The interface `CompilationUnitElement` defines the behavior of elements representing a |
- * compilation unit. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class CompilationUnitElement implements Element, UriReferencedElement { |
- |
- /** |
- * Return an array containing all of the top-level accessors (getters and setters) contained in |
- * this compilation unit. |
- * |
- * @return the top-level accessors contained in this compilation unit |
- */ |
- List<PropertyAccessorElement> get accessors; |
- |
- /** |
- * Return the library in which this compilation unit is defined. |
- * |
- * @return the library in which this compilation unit is defined |
- */ |
- LibraryElement get enclosingElement; |
- |
- /** |
- * Return an array containing all of the top-level functions contained in this compilation unit. |
- * |
- * @return the top-level functions contained in this compilation unit |
- */ |
- List<FunctionElement> get functions; |
- |
- /** |
- * Return an array containing all of the function type aliases contained in this compilation unit. |
- * |
- * @return the function type aliases contained in this compilation unit |
- */ |
- List<FunctionTypeAliasElement> get functionTypeAliases; |
- |
- /** |
- * Return an array containing all of the top-level variables contained in this compilation unit. |
- * |
- * @return the top-level variables contained in this compilation unit |
- */ |
- List<TopLevelVariableElement> get topLevelVariables; |
- |
- /** |
- * Return the class defined in this compilation unit that has the given name, or `null` if |
- * this compilation unit does not define a class with the given name. |
- * |
- * @param className the name of the class to be returned |
- * @return the class with the given name that is defined in this compilation unit |
- */ |
- ClassElement getType(String className); |
- |
- /** |
- * Return an array containing all of the classes contained in this compilation unit. |
- * |
- * @return the classes contained in this compilation unit |
- */ |
- List<ClassElement> get types; |
-} |
-/** |
- * The interface `ConstructorElement` defines the behavior of elements representing a |
- * constructor or a factory method defined within a type. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ConstructorElement implements ClassMemberElement, ExecutableElement { |
- |
- /** |
- * Return the constructor to which this constructor is redirecting. |
- * |
- * @return the constructor to which this constructor is redirecting |
- */ |
- ConstructorElement get redirectedConstructor; |
- |
- /** |
- * Return `true` if this constructor is a const constructor. |
- * |
- * @return `true` if this constructor is a const constructor |
- */ |
- bool get isConst; |
- |
- /** |
- * Return `true` if this constructor can be used as a default constructor - unnamed and has |
- * no required parameters. |
- * |
- * @return `true` if this constructor can be used as a default constructor. |
- */ |
- bool get isDefaultConstructor; |
- |
- /** |
- * Return `true` if this constructor represents a factory constructor. |
- * |
- * @return `true` if this constructor represents a factory constructor |
- */ |
- bool get isFactory; |
-} |
-/** |
- * The interface `Element` defines the behavior common to 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. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class Element { |
- |
- /** |
- * A comparator that can be used to sort elements by their name offset. Elements with a smaller |
- * offset will be sorted to be before elements with a larger name offset. |
- */ |
- static final Comparator<Element> SORT_BY_OFFSET = (Element firstElement, Element secondElement) => firstElement.nameOffset - secondElement.nameOffset; |
- |
- /** |
- * Use the given visitor to visit this element. |
- * |
- * @param visitor the visitor that will visit this element |
- * @return the value returned by the visitor as a result of visiting this element |
- */ |
- accept(ElementVisitor visitor); |
- |
- /** |
- * Return the documentation comment for this element as it appears in the original source |
- * (complete with the beginning and ending delimiters), or `null` if this element does not |
- * have a documentation comment associated with it. This can be a long-running operation if the |
- * information needed to access the comment is not cached. |
- * |
- * @return this element's documentation comment |
- * @throws AnalysisException if the documentation comment could not be determined because the |
- * analysis could not be performed |
- */ |
- String computeDocumentationComment(); |
- |
- /** |
- * Return the element of the given class that most immediately encloses this element, or |
- * `null` if there is no enclosing element of the given class. |
- * |
- * @param elementClass the class of the element to be returned |
- * @return the element that encloses this element |
- */ |
- Element getAncestor(Type elementClass); |
- |
- /** |
- * Return the analysis context in which this element is defined. |
- * |
- * @return the analysis context in which this element is defined |
- */ |
- AnalysisContext get context; |
- |
- /** |
- * Return the display name of this element, or `null` if this 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`. |
- * |
- * @return the display name of this element |
- */ |
- String get displayName; |
- |
- /** |
- * Return the element that either physically or logically encloses this element. This will be |
- * `null` if this element is a library because libraries are the top-level elements in the |
- * model. |
- * |
- * @return the element that encloses this element |
- */ |
- Element get enclosingElement; |
- |
- /** |
- * Return the kind of element that this is. |
- * |
- * @return the kind of this element |
- */ |
- ElementKind get kind; |
- |
- /** |
- * Return the 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 an HTML file because HTML files |
- * are not contained in libraries. |
- * |
- * @return the library that contains this element |
- */ |
- LibraryElement get library; |
- |
- /** |
- * Return an object representing the location of this element in the element model. The object can |
- * be used to locate this element at a later time. |
- * |
- * @return the location of this element in the element model |
- */ |
- ElementLocation get location; |
- |
- /** |
- * Return an array containing all of the metadata associated with this element. |
- * |
- * @return the metadata associated with this element |
- */ |
- List<ElementAnnotation> get metadata; |
- |
- /** |
- * Return the name of this element, or `null` if this element does not have a name. |
- * |
- * @return the name of this element |
- */ |
- String get name; |
- |
- /** |
- * Return 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. |
- * |
- * @return the offset of the name of this element |
- */ |
- int get nameOffset; |
- |
- /** |
- * Return the source that contains this element, or `null` if this element is not contained |
- * in a source. |
- * |
- * @return the source that contains this element |
- */ |
- Source get source; |
- |
- /** |
- * Return `true` if this 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 3.2: |
- * <blockquote> A declaration <i>m</i> is accessible to library <i>L</i> if <i>m</i> is declared |
- * in <i>L</i> or if <i>m</i> is public. </blockquote> |
- * |
- * @param library the library in which a possible reference to this element would occur |
- * @return `true` if this element is accessible to code in the given library |
- */ |
- bool isAccessibleIn(LibraryElement library); |
- |
- /** |
- * Return `true` if this 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. |
- * |
- * @return `true` if this element is synthetic |
- */ |
- bool get isSynthetic; |
- |
- /** |
- * Use the given visitor to visit all of the children of this element. There is no guarantee of |
- * the order in which the children will be visited. |
- * |
- * @param visitor the visitor that will be used to visit the children of this element |
- */ |
- void visitChildren(ElementVisitor visitor); |
-} |
-/** |
- * The interface `ElementAnnotation` defines the behavior of objects representing a single |
- * annotation associated with an element. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ElementAnnotation { |
- |
- /** |
- * Return the element representing the field, variable, or const constructor being used as an |
- * annotation. |
- * |
- * @return the field, variable, or constructor being used as an annotation |
- */ |
- Element get element; |
-} |
-/** |
- * The enumeration `ElementKind` defines the various kinds of elements in the element model. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ElementKind extends Enum<ElementKind> { |
- static final ElementKind CLASS = new ElementKind('CLASS', 0, "class"); |
- static final ElementKind COMPILATION_UNIT = new ElementKind('COMPILATION_UNIT', 1, "compilation unit"); |
- static final ElementKind CONSTRUCTOR = new ElementKind('CONSTRUCTOR', 2, "constructor"); |
- static final ElementKind DYNAMIC = new ElementKind('DYNAMIC', 3, "<dynamic>"); |
- static final ElementKind EMBEDDED_HTML_SCRIPT = new ElementKind('EMBEDDED_HTML_SCRIPT', 4, "embedded html script"); |
- static final ElementKind ERROR = new ElementKind('ERROR', 5, "<error>"); |
- static final ElementKind EXPORT = new ElementKind('EXPORT', 6, "export directive"); |
- static final ElementKind EXTERNAL_HTML_SCRIPT = new ElementKind('EXTERNAL_HTML_SCRIPT', 7, "external html script"); |
- static final ElementKind FIELD = new ElementKind('FIELD', 8, "field"); |
- static final ElementKind FUNCTION = new ElementKind('FUNCTION', 9, "function"); |
- static final ElementKind GETTER = new ElementKind('GETTER', 10, "getter"); |
- static final ElementKind HTML = new ElementKind('HTML', 11, "html"); |
- static final ElementKind IMPORT = new ElementKind('IMPORT', 12, "import directive"); |
- static final ElementKind LABEL = new ElementKind('LABEL', 13, "label"); |
- static final ElementKind LIBRARY = new ElementKind('LIBRARY', 14, "library"); |
- static final ElementKind LOCAL_VARIABLE = new ElementKind('LOCAL_VARIABLE', 15, "local variable"); |
- static final ElementKind METHOD = new ElementKind('METHOD', 16, "method"); |
- static final ElementKind NAME = new ElementKind('NAME', 17, "<name>"); |
- static final ElementKind PARAMETER = new ElementKind('PARAMETER', 18, "parameter"); |
- static final ElementKind PREFIX = new ElementKind('PREFIX', 19, "import prefix"); |
- static final ElementKind SETTER = new ElementKind('SETTER', 20, "setter"); |
- static final ElementKind TOP_LEVEL_VARIABLE = new ElementKind('TOP_LEVEL_VARIABLE', 21, "top level variable"); |
- static final ElementKind FUNCTION_TYPE_ALIAS = new ElementKind('FUNCTION_TYPE_ALIAS', 22, "function type alias"); |
- static final ElementKind TYPE_PARAMETER = new ElementKind('TYPE_PARAMETER', 23, "type parameter"); |
- static final ElementKind UNIVERSE = new ElementKind('UNIVERSE', 24, "<universe>"); |
- static final List<ElementKind> values = [ |
- CLASS, |
- COMPILATION_UNIT, |
- CONSTRUCTOR, |
- DYNAMIC, |
- EMBEDDED_HTML_SCRIPT, |
- ERROR, |
- EXPORT, |
- EXTERNAL_HTML_SCRIPT, |
- FIELD, |
- FUNCTION, |
- GETTER, |
- HTML, |
- IMPORT, |
- LABEL, |
- LIBRARY, |
- LOCAL_VARIABLE, |
- METHOD, |
- NAME, |
- PARAMETER, |
- PREFIX, |
- SETTER, |
- TOP_LEVEL_VARIABLE, |
- FUNCTION_TYPE_ALIAS, |
- TYPE_PARAMETER, |
- UNIVERSE]; |
- |
- /** |
- * Return the kind of the given element, or [ERROR] if the element is `null`. This is |
- * a utility method that can reduce the need for null checks in other places. |
- * |
- * @param element the element whose kind is to be returned |
- * @return the kind of the given element |
- */ |
- static ElementKind of(Element element) { |
- if (element == null) { |
- return ERROR; |
- } |
- return element.kind; |
- } |
- |
- /** |
- * The name displayed in the UI for this kind of element. |
- */ |
- String displayName; |
- |
- /** |
- * Initialize a newly created element kind to have the given display name. |
- * |
- * @param displayName the name displayed in the UI for this kind of element |
- */ |
- ElementKind(String name, int ordinal, String displayName) : super(name, ordinal) { |
- this.displayName = displayName; |
- } |
-} |
-/** |
- * The interface `ElementLocation` defines the behavior of objects that represent the location |
- * of an element within the element model. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ElementLocation { |
- |
- /** |
- * Return an encoded representation of this location that can be used to create a location that is |
- * equal to this location. |
- * |
- * @return an encoded representation of this location |
- */ |
- String get encoding; |
-} |
-/** |
- * The interface `ElementVisitor` defines the behavior of objects that can be used to visit an |
- * element structure. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ElementVisitor<R> { |
- R visitClassElement(ClassElement element); |
- R visitCompilationUnitElement(CompilationUnitElement element); |
- R visitConstructorElement(ConstructorElement element); |
- R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element); |
- R visitExportElement(ExportElement element); |
- R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element); |
- R visitFieldElement(FieldElement element); |
- R visitFieldFormalParameterElement(FieldFormalParameterElement element); |
- R visitFunctionElement(FunctionElement element); |
- R visitFunctionTypeAliasElement(FunctionTypeAliasElement element); |
- R visitHtmlElement(HtmlElement element); |
- R visitImportElement(ImportElement element); |
- R visitLabelElement(LabelElement element); |
- R visitLibraryElement(LibraryElement element); |
- R visitLocalVariableElement(LocalVariableElement element); |
- R visitMethodElement(MethodElement element); |
- R visitMultiplyDefinedElement(MultiplyDefinedElement element); |
- R visitParameterElement(ParameterElement element); |
- R visitPrefixElement(PrefixElement element); |
- R visitPropertyAccessorElement(PropertyAccessorElement element); |
- R visitTopLevelVariableElement(TopLevelVariableElement element); |
- R visitTypeParameterElement(TypeParameterElement element); |
-} |
-/** |
- * The interface `EmbeddedHtmlScriptElement` defines the behavior of elements representing a |
- * script tag in an HTML file having content that defines a Dart library. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class EmbeddedHtmlScriptElement implements HtmlScriptElement { |
- |
- /** |
- * Return the library element defined by the content of the script tag. |
- * |
- * @return the library element (not `null`) |
- */ |
- LibraryElement get scriptLibrary; |
-} |
-/** |
- * The interface `ExecutableElement` defines the behavior of elements representing an |
- * executable object, including functions, methods, constructors, getters, and setters. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ExecutableElement implements Element { |
- |
- /** |
- * Return an array containing all of the functions defined within this executable element. |
- * |
- * @return the functions defined within this executable element |
- */ |
- List<FunctionElement> get functions; |
- |
- /** |
- * Return an array containing all of the labels defined within this executable element. |
- * |
- * @return the labels defined within this executable element |
- */ |
- List<LabelElement> get labels; |
- |
- /** |
- * Return an array containing all of the local variables defined within this executable element. |
- * |
- * @return the local variables defined within this executable element |
- */ |
- List<LocalVariableElement> get localVariables; |
- |
- /** |
- * Return an array containing all of the parameters defined by this executable element. |
- * |
- * @return the parameters defined by this executable element |
- */ |
- List<ParameterElement> get parameters; |
- |
- /** |
- * Return the return type defined by this executable element. |
- * |
- * @return the return type defined by this executable element |
- */ |
- Type2 get returnType; |
- |
- /** |
- * Return the type of function defined by this executable element. |
- * |
- * @return the type of function defined by this executable element |
- */ |
- FunctionType get type; |
- |
- /** |
- * Return `true` if this 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. |
- * |
- * @return `true` if this executable element is an operator |
- */ |
- bool get isOperator; |
- |
- /** |
- * Return `true` if this 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. |
- * |
- * @return `true` if this executable element is a static element |
- */ |
- bool get isStatic; |
-} |
-/** |
- * The interface `ExportElement` defines the behavior of objects representing information |
- * about a single export directive within a library. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ExportElement implements Element, UriReferencedElement { |
- |
- /** |
- * An empty array of export elements. |
- */ |
- static final List<ExportElement> EMPTY_ARRAY = new List<ExportElement>(0); |
- |
- /** |
- * Return an array containing the combinators that were specified as part of the export directive |
- * in the order in which they were specified. |
- * |
- * @return the combinators specified in the export directive |
- */ |
- List<NamespaceCombinator> get combinators; |
- |
- /** |
- * Return the library that is exported from this library by this export directive. |
- * |
- * @return the library that is exported from this library |
- */ |
- LibraryElement get exportedLibrary; |
-} |
-/** |
- * The interface `ExternalHtmlScriptElement` defines the behavior of elements representing a |
- * script tag in an HTML file having a `source` attribute that references a Dart library |
- * source file. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ExternalHtmlScriptElement implements HtmlScriptElement { |
- |
- /** |
- * Return the source referenced by this element, or `null` if this element does not |
- * reference a Dart library source file. |
- * |
- * @return the source for the external Dart library |
- */ |
- Source get scriptSource; |
-} |
-/** |
- * The interface `FieldElement` defines the behavior of elements representing a field defined |
- * within a type. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class FieldElement implements ClassMemberElement, PropertyInducingElement { |
-} |
-/** |
- * The interface `FieldFormalParameterElement` defines the behavior of elements representing a |
- * field formal parameter defined within a constructor element. |
- */ |
-abstract class FieldFormalParameterElement implements ParameterElement { |
- |
- /** |
- * Return the field element associated with this field formal parameter, or `null` if the |
- * parameter references a field that doesn't exist. |
- * |
- * @return the field element associated with this field formal parameter |
- */ |
- FieldElement get field; |
-} |
-/** |
- * The interface `FunctionElement` defines the behavior of elements representing a function. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class FunctionElement implements ExecutableElement, LocalElement { |
-} |
-/** |
- * The interface `FunctionTypeAliasElement` defines the behavior of elements representing a |
- * function type alias (`typedef`). |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class FunctionTypeAliasElement implements Element { |
- |
- /** |
- * Return the compilation unit in which this type alias is defined. |
- * |
- * @return the compilation unit in which this type alias is defined |
- */ |
- CompilationUnitElement get enclosingElement; |
- |
- /** |
- * Return an array containing all of the parameters defined by this type alias. |
- * |
- * @return the parameters defined by this type alias |
- */ |
- List<ParameterElement> get parameters; |
- |
- /** |
- * Return the return type defined by this type alias. |
- * |
- * @return the return type defined by this type alias |
- */ |
- Type2 get returnType; |
- |
- /** |
- * Return the type of function defined by this type alias. |
- * |
- * @return the type of function defined by this type alias |
- */ |
- FunctionType get type; |
- |
- /** |
- * Return an array containing all of the type parameters defined for this type. |
- * |
- * @return the type parameters defined for this type |
- */ |
- List<TypeParameterElement> get typeParameters; |
-} |
-/** |
- * The interface `HideElementCombinator` defines the behavior of combinators that cause some |
- * of the names in a namespace to be hidden when being imported. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class HideElementCombinator implements NamespaceCombinator { |
- |
- /** |
- * Return an array containing the names that are not to be made visible in the importing library |
- * even if they are defined in the imported library. |
- * |
- * @return the names from the imported library that are hidden from the importing library |
- */ |
- List<String> get hiddenNames; |
-} |
-/** |
- * The interface `HtmlElement` defines the behavior of elements representing an HTML file. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class HtmlElement implements Element { |
- |
- /** |
- * Return an array containing all of the script elements contained in the HTML file. This includes |
- * scripts with libraries that are defined by the content of a script tag as well as libraries |
- * that are referenced in the {@core source} attribute of a script tag. |
- * |
- * @return the script elements in the HTML file (not `null`, contains no `null`s) |
- */ |
- List<HtmlScriptElement> get scripts; |
-} |
-/** |
- * The interface `HtmlScriptElement` defines the behavior of elements representing a script |
- * tag in an HTML file. |
- * |
- * @see EmbeddedHtmlScriptElement |
- * @see ExternalHtmlScriptElement |
- * @coverage dart.engine.element |
- */ |
-abstract class HtmlScriptElement implements Element { |
-} |
-/** |
- * The interface `ImportElement` defines the behavior of objects representing information |
- * about a single import directive within a library. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ImportElement implements Element, UriReferencedElement { |
- |
- /** |
- * An empty array of import elements. |
- */ |
- static final List<ImportElement> EMPTY_ARRAY = new List<ImportElement>(0); |
- |
- /** |
- * Return an array containing the combinators that were specified as part of the import directive |
- * in the order in which they were specified. |
- * |
- * @return the combinators specified in the import directive |
- */ |
- List<NamespaceCombinator> get combinators; |
- |
- /** |
- * Return the library that is imported into this library by this import directive. |
- * |
- * @return the library that is imported into this library |
- */ |
- LibraryElement get importedLibrary; |
- |
- /** |
- * Return the prefix that was specified as part of the import directive, or `null` if there |
- * was no prefix specified. |
- * |
- * @return the prefix that was specified as part of the import directive |
- */ |
- PrefixElement get prefix; |
- |
- /** |
- * Return the offset of the prefix of this import in the file that contains this import directive, |
- * or `-1` if this import is synthetic, does not have a prefix, or otherwise does not have |
- * an offset. |
- * |
- * @return the offset of the prefix of this import |
- */ |
- int get prefixOffset; |
- |
- /** |
- * Return the offset of the character immediately following the last character of this node's URI, |
- * or `-1` for synthetic import. |
- * |
- * @return the offset of the character just past the node's URI |
- */ |
- int get uriEnd; |
-} |
-/** |
- * The interface `LabelElement` defines the behavior of elements representing a label |
- * associated with a statement. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class LabelElement implements Element { |
- |
- /** |
- * Return the executable element in which this label is defined. |
- * |
- * @return the executable element in which this label is defined |
- */ |
- ExecutableElement get enclosingElement; |
-} |
-/** |
- * The interface `LibraryElement` defines the behavior of elements representing a library. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class LibraryElement implements Element { |
- |
- /** |
- * Return the compilation unit that defines this library. |
- * |
- * @return the compilation unit that defines this library |
- */ |
- CompilationUnitElement get definingCompilationUnit; |
- |
- /** |
- * Return 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`. |
- * |
- * @return the entry point for this library |
- */ |
- FunctionElement get entryPoint; |
- |
- /** |
- * Return an array containing all of the libraries that are exported from this library. |
- * |
- * @return an array containing all of the libraries that are exported from this library |
- */ |
- List<LibraryElement> get exportedLibraries; |
- |
- /** |
- * Return an array containing all of the exports defined in this library. |
- * |
- * @return the exports defined in this library |
- */ |
- List<ExportElement> get exports; |
- |
- /** |
- * Return an array containing all of the libraries that are imported into this library. This |
- * includes all of the libraries that are imported using a prefix (also available through the |
- * prefixes returned by [getPrefixes]) and those that are imported without a prefix. |
- * |
- * @return an array containing all of the libraries that are imported into this library |
- */ |
- List<LibraryElement> get importedLibraries; |
- |
- /** |
- * Return an array containing all of the imports defined in this library. |
- * |
- * @return the imports defined in this library |
- */ |
- List<ImportElement> get imports; |
- |
- /** |
- * Return an array containing all of the compilation units that are included in this library using |
- * a `part` directive. This does not include the defining compilation unit that contains the |
- * `part` directives. |
- * |
- * @return the compilation units that are included in this library |
- */ |
- List<CompilationUnitElement> get parts; |
- |
- /** |
- * Return an array containing elements for each of the prefixes used to `import` libraries |
- * into this library. Each prefix can be used in more than one `import` directive. |
- * |
- * @return the prefixes used to `import` libraries into this library |
- */ |
- List<PrefixElement> get prefixes; |
- |
- /** |
- * Return the class defined in this library that has the given name, or `null` if this |
- * library does not define a class with the given name. |
- * |
- * @param className the name of the class to be returned |
- * @return the class with the given name that is defined in this library |
- */ |
- ClassElement getType(String className); |
- |
- /** |
- * Answer `true` if this library is an application that can be run in the browser. |
- * |
- * @return `true` if this library is an application that can be run in the browser |
- */ |
- bool get isBrowserApplication; |
- |
- /** |
- * Return `true` if this library is the dart:core library. |
- * |
- * @return `true` if this library is the dart:core library |
- */ |
- bool get isDartCore; |
- |
- /** |
- * Return `true` if this library is the dart:core library. |
- * |
- * @return `true` if this library is the dart:core library |
- */ |
- bool get isInSdk; |
- |
- /** |
- * Return `true` if this library is up to date with respect to the given time stamp. If any |
- * transitively referenced Source is newer than the time stamp, this method returns false. |
- * |
- * @param timeStamp the time stamp to compare against |
- * @return `true` if this library is up to date with respect to the given time stamp |
- */ |
- bool isUpToDate2(int timeStamp); |
-} |
-/** |
- * The interface `LocalElement` defines the behavior of elements that can be (but are not |
- * required to be) defined within a method or function (an [ExecutableElement]). |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class LocalElement implements Element { |
- |
- /** |
- * Return a source range that covers the approximate portion of the source in which the name of |
- * this element is visible, or `null` if there is no single range of characters within which |
- * the element name is visible. |
- * |
- * * For a local variable, this includes everything from the end of the variable's initializer |
- * to the end of the block that encloses the variable declaration. |
- * * For a parameter, this includes the body of the method or function that declares the |
- * parameter. |
- * * For a local function, this includes everything from the beginning of the function's body to |
- * the end of the block that encloses the function declaration. |
- * * For top-level functions, `null` will be returned because they are potentially visible |
- * in multiple sources. |
- * |
- * |
- * @return the range of characters in which the name of this element is visible |
- */ |
- SourceRange get visibleRange; |
-} |
-/** |
- * The interface `LocalVariableElement` defines the behavior common to elements that represent |
- * a local variable. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class LocalVariableElement implements LocalElement, VariableElement { |
-} |
-/** |
- * The interface `MethodElement` defines the behavior of elements that represent a method |
- * defined within a type. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class MethodElement implements ClassMemberElement, ExecutableElement { |
- |
- /** |
- * Return `true` if this method is abstract. Methods are abstract if they are not external |
- * and have no body. |
- * |
- * @return `true` if this method is abstract |
- */ |
- bool get isAbstract; |
-} |
-/** |
- * The interface `MultiplyDefinedElement` defines the behavior of pseudo-elements that |
- * represent multiple elements defined within a single scope that have the same name. 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. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class MultiplyDefinedElement implements Element { |
- |
- /** |
- * Return an array containing all of the elements that were defined within the scope to have the |
- * same name. |
- * |
- * @return the elements that were defined with the same name |
- */ |
- List<Element> get conflictingElements; |
- |
- /** |
- * Return the type of this element as the dynamic type. |
- * |
- * @return the type of this element as the dynamic type |
- */ |
- Type2 get type; |
-} |
-/** |
- * The interface `NamespaceCombinator` defines the behavior common to objects that control how |
- * namespaces are combined. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class NamespaceCombinator { |
- |
- /** |
- * An empty array of namespace combinators. |
- */ |
- static final List<NamespaceCombinator> EMPTY_ARRAY = new List<NamespaceCombinator>(0); |
-} |
-/** |
- * The interface `ParameterElement` defines the behavior of elements representing a parameter |
- * defined within an executable element. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ParameterElement implements LocalElement, VariableElement { |
- |
- /** |
- * Return a source range that covers the portion of the source in which the default value for this |
- * parameter is specified, or `null` if there is no default value. |
- * |
- * @return the range of characters in which the default value of this parameter is specified |
- */ |
- SourceRange get defaultValueRange; |
- |
- /** |
- * Return the kind of this parameter. |
- * |
- * @return the kind of this parameter |
- */ |
- ParameterKind get parameterKind; |
- |
- /** |
- * Return an array containing all of the parameters defined by this parameter. A parameter will |
- * only define other parameters if it is a function typed parameter. |
- * |
- * @return the parameters defined by this parameter element |
- */ |
- List<ParameterElement> get parameters; |
- |
- /** |
- * Return `true` if this parameter is an initializing formal parameter. |
- * |
- * @return `true` if this parameter is an initializing formal parameter |
- */ |
- bool get isInitializingFormal; |
-} |
-/** |
- * The interface `PrefixElement` defines the behavior common to elements that represent a |
- * prefix used to import one or more libraries into another library. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class PrefixElement implements Element { |
- |
- /** |
- * Return the library into which other libraries are imported using this prefix. |
- * |
- * @return the library into which other libraries are imported using this prefix |
- */ |
- LibraryElement get enclosingElement; |
- |
- /** |
- * Return an array containing all of the libraries that are imported using this prefix. |
- * |
- * @return the libraries that are imported using this prefix |
- */ |
- List<LibraryElement> get importedLibraries; |
-} |
-/** |
- * The interface `PropertyAccessorElement` defines the behavior of elements representing 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]. |
- * |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class PropertyAccessorElement implements ExecutableElement { |
- |
- /** |
- * Return 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. |
- * |
- * @return the getter that corresponds to this setter |
- */ |
- PropertyAccessorElement get correspondingGetter; |
- |
- /** |
- * Return 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. |
- * |
- * @return the setter that corresponds to this getter |
- */ |
- PropertyAccessorElement get correspondingSetter; |
- |
- /** |
- * Return 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. |
- * |
- * @return the variable associated with this accessor |
- */ |
- PropertyInducingElement get variable; |
- |
- /** |
- * Return `true` if this accessor is abstract. Accessors are abstract if they are not |
- * external and have no body. |
- * |
- * @return `true` if this accessor is abstract |
- */ |
- bool get isAbstract; |
- |
- /** |
- * Return `true` if this accessor represents a getter. |
- * |
- * @return `true` if this accessor represents a getter |
- */ |
- bool get isGetter; |
- |
- /** |
- * Return `true` if this accessor represents a setter. |
- * |
- * @return `true` if this accessor represents a setter |
- */ |
- bool get isSetter; |
-} |
-/** |
- * The interface `PropertyInducingElement` defines the behavior of elements representing 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]. |
- * |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class PropertyInducingElement implements VariableElement { |
- |
- /** |
- * Return the getter associated with this variable. If this variable was explicitly defined (is |
- * not synthetic) then the getter associated with it will be synthetic. |
- * |
- * @return the getter associated with this variable |
- */ |
- PropertyAccessorElement get getter; |
- |
- /** |
- * Return 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. |
- * |
- * @return the setter associated with this variable |
- */ |
- PropertyAccessorElement get setter; |
- |
- /** |
- * Return `true` if this 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. |
- * |
- * @return `true` if this executable element is a static element |
- */ |
- bool get isStatic; |
-} |
-/** |
- * The interface `ShowElementCombinator` defines the behavior of combinators that cause some |
- * of the names in a namespace to be visible (and the rest hidden) when being imported. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ShowElementCombinator implements NamespaceCombinator { |
- |
- /** |
- * Return the offset of the character immediately following the last character of this node. |
- * |
- * @return the offset of the character just past this node |
- */ |
- int get end; |
- |
- /** |
- * Return the offset of the 'show' keyword of this element. |
- * |
- * @return the offset of the 'show' keyword of this element |
- */ |
- int get offset; |
- |
- /** |
- * Return an array containing the names that are to be made visible in the importing library if |
- * they are defined in the imported library. |
- * |
- * @return the names from the imported library that are visible in the importing library |
- */ |
- List<String> get shownNames; |
-} |
-/** |
- * The interface `TopLevelVariableElement` defines the behavior of elements representing a |
- * top-level variable. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class TopLevelVariableElement implements PropertyInducingElement { |
-} |
-/** |
- * The interface `TypeParameterElement` defines the behavior of elements representing a type |
- * parameter. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class TypeParameterElement implements Element { |
- |
- /** |
- * Return the type representing the bound associated with this parameter, or `null` if this |
- * parameter does not have an explicit bound. |
- * |
- * @return the type representing the bound associated with this parameter |
- */ |
- Type2 get bound; |
- |
- /** |
- * Return the type defined by this type parameter. |
- * |
- * @return the type defined by this type parameter |
- */ |
- TypeParameterType get type; |
-} |
-/** |
- * The interface `UndefinedElement` defines the behavior of pseudo-elements that represent |
- * 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. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class UndefinedElement implements Element { |
-} |
-/** |
- * The interface `UriReferencedElement` defines the behavior of objects included into a |
- * library using some URI. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class UriReferencedElement implements Element { |
- |
- /** |
- * Return 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. |
- * |
- * @return the URI that is used to include this element into the enclosing library |
- */ |
- String get uri; |
-} |
-/** |
- * The interface `VariableElement` defines the behavior common to elements that represent a |
- * variable. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class VariableElement implements Element { |
- |
- /** |
- * Return a synthetic function representing this variable's initializer, or `null` if this |
- * variable does not have an initializer. The function will have no parameters. The return type of |
- * the function will be the compile-time type of the initialization expression. |
- * |
- * @return a synthetic function representing this variable's initializer |
- */ |
- FunctionElement get initializer; |
- |
- /** |
- * Return the declared type of this variable, or `null` if the variable did not have a |
- * declared type (such as if it was declared using the keyword 'var'). |
- * |
- * @return the declared type of this variable |
- */ |
- Type2 get type; |
- |
- /** |
- * Return `true` if this variable was declared with the 'const' modifier. |
- * |
- * @return `true` if this variable was declared with the 'const' modifier |
- */ |
- bool get isConst; |
- |
- /** |
- * Return `true` if this variable was declared with the 'final' modifier. Variables that are |
- * declared with the 'const' modifier will return `false` even though they are implicitly |
- * final. |
- * |
- * @return `true` if this variable was declared with the 'final' modifier |
- */ |
- bool get isFinal; |
-} |
-/** |
- * Instances of the class `GeneralizingElementVisitor` implement an element visitor that will |
- * recursively visit all of the elements in an element model (like instances of the class |
- * [RecursiveElementVisitor]). In addition, when an element of a specific type is visited not |
- * only will the visit method for that specific type of element be invoked, but additional methods |
- * for the supertypes of that element will also be invoked. For example, using an instance of this |
- * class to visit a [MethodElement] will cause the method |
- * [visitMethodElement] to be invoked but will also cause the methods |
- * [visitExecutableElement] and [visitElement] to be |
- * subsequently invoked. This allows visitors to be written that visit all executable elements |
- * without needing to override the visit method for each of the specific subclasses of |
- * [ExecutableElement]. |
- * |
- * Note, however, that unlike many visitors, element visitors visit objects based on the interfaces |
- * implemented by those elements. Because interfaces form a graph structure rather than a tree |
- * structure the way classes do, and because it is generally undesirable for an object to be visited |
- * more than once, this class flattens the interface graph into a pseudo-tree. In particular, this |
- * class treats elements as if the element types were structured in the following way: |
- * |
- * |
- * <pre> |
- * Element |
- * ClassElement |
- * CompilationUnitElement |
- * ExecutableElement |
- * ConstructorElement |
- * LocalElement |
- * FunctionElement |
- * MethodElement |
- * PropertyAccessorElement |
- * ExportElement |
- * HtmlElement |
- * ImportElement |
- * LabelElement |
- * LibraryElement |
- * MultiplyDefinedElement |
- * PrefixElement |
- * TypeAliasElement |
- * TypeParameterElement |
- * UndefinedElement |
- * VariableElement |
- * PropertyInducingElement |
- * FieldElement |
- * TopLevelVariableElement |
- * LocalElement |
- * LocalVariableElement |
- * ParameterElement |
- * FieldFormalParameterElement |
- * </pre> |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or |
- * explicitly invoke the more general visit method. Failure to do so will cause the visit methods |
- * for superclasses of the element to not be invoked and will cause the children of the visited node |
- * to not be visited. |
- * |
- * @coverage dart.engine.element |
- */ |
-class GeneralizingElementVisitor<R> implements ElementVisitor<R> { |
- R visitClassElement(ClassElement element) => visitElement(element); |
- R visitCompilationUnitElement(CompilationUnitElement element) => visitElement(element); |
- R visitConstructorElement(ConstructorElement element) => visitExecutableElement(element); |
- R visitElement(Element element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) => visitHtmlScriptElement(element); |
- R visitExecutableElement(ExecutableElement element) => visitElement(element); |
- R visitExportElement(ExportElement element) => visitElement(element); |
- R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) => visitHtmlScriptElement(element); |
- R visitFieldElement(FieldElement element) => visitPropertyInducingElement(element); |
- R visitFieldFormalParameterElement(FieldFormalParameterElement element) => visitParameterElement(element); |
- R visitFunctionElement(FunctionElement element) => visitLocalElement(element); |
- R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) => visitElement(element); |
- R visitHtmlElement(HtmlElement element) => visitElement(element); |
- R visitHtmlScriptElement(HtmlScriptElement element) => visitElement(element); |
- R visitImportElement(ImportElement element) => visitElement(element); |
- R visitLabelElement(LabelElement element) => visitElement(element); |
- R visitLibraryElement(LibraryElement element) => visitElement(element); |
- R visitLocalElement(LocalElement element) { |
- if (element is LocalVariableElement) { |
- return visitVariableElement(element as LocalVariableElement); |
- } else if (element is ParameterElement) { |
- return visitVariableElement(element as ParameterElement); |
- } else if (element is FunctionElement) { |
- return visitExecutableElement(element as FunctionElement); |
- } |
- return null; |
- } |
- R visitLocalVariableElement(LocalVariableElement element) => visitLocalElement(element); |
- R visitMethodElement(MethodElement element) => visitExecutableElement(element); |
- R visitMultiplyDefinedElement(MultiplyDefinedElement element) => visitElement(element); |
- R visitParameterElement(ParameterElement element) => visitLocalElement(element); |
- R visitPrefixElement(PrefixElement element) => visitElement(element); |
- R visitPropertyAccessorElement(PropertyAccessorElement element) => visitExecutableElement(element); |
- R visitPropertyInducingElement(PropertyInducingElement element) => visitVariableElement(element); |
- R visitTopLevelVariableElement(TopLevelVariableElement element) => visitPropertyInducingElement(element); |
- R visitTypeParameterElement(TypeParameterElement element) => visitElement(element); |
- R visitVariableElement(VariableElement element) => visitElement(element); |
-} |
-/** |
- * Instances of the class `RecursiveElementVisitor` implement an element visitor that will |
- * recursively visit all of the element in an element model. For example, using an instance of this |
- * class to visit a [CompilationUnitElement] will also cause all of the types in the |
- * compilation unit to be visited. |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or must |
- * explicitly ask the visited element to visit its children. Failure to do so will cause the |
- * children of the visited element to not be visited. |
- * |
- * @coverage dart.engine.element |
- */ |
-class RecursiveElementVisitor<R> implements ElementVisitor<R> { |
- R visitClassElement(ClassElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitCompilationUnitElement(CompilationUnitElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitConstructorElement(ConstructorElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitExportElement(ExportElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitFieldElement(FieldElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitFieldFormalParameterElement(FieldFormalParameterElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitFunctionElement(FunctionElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitHtmlElement(HtmlElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitImportElement(ImportElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitLabelElement(LabelElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitLibraryElement(LibraryElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitLocalVariableElement(LocalVariableElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitMethodElement(MethodElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitMultiplyDefinedElement(MultiplyDefinedElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitParameterElement(ParameterElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitPrefixElement(PrefixElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitPropertyAccessorElement(PropertyAccessorElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitTopLevelVariableElement(TopLevelVariableElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
- R visitTypeParameterElement(TypeParameterElement element) { |
- element.visitChildren(this); |
- return null; |
- } |
-} |
-/** |
- * Instances of the class `SimpleElementVisitor` implement an element visitor that will do |
- * nothing when visiting an element. It is intended to be a superclass for classes that use the |
- * visitor pattern primarily as a dispatch mechanism (and hence don't need to recursively visit a |
- * whole structure) and that only need to visit a small number of element types. |
- * |
- * @coverage dart.engine.element |
- */ |
-class SimpleElementVisitor<R> implements ElementVisitor<R> { |
- R visitClassElement(ClassElement element) => null; |
- R visitCompilationUnitElement(CompilationUnitElement element) => null; |
- R visitConstructorElement(ConstructorElement element) => null; |
- R visitEmbeddedHtmlScriptElement(EmbeddedHtmlScriptElement element) => null; |
- R visitExportElement(ExportElement element) => null; |
- R visitExternalHtmlScriptElement(ExternalHtmlScriptElement element) => null; |
- R visitFieldElement(FieldElement element) => null; |
- R visitFieldFormalParameterElement(FieldFormalParameterElement element) => null; |
- R visitFunctionElement(FunctionElement element) => null; |
- R visitFunctionTypeAliasElement(FunctionTypeAliasElement element) => null; |
- R visitHtmlElement(HtmlElement element) => null; |
- R visitImportElement(ImportElement element) => null; |
- R visitLabelElement(LabelElement element) => null; |
- R visitLibraryElement(LibraryElement element) => null; |
- R visitLocalVariableElement(LocalVariableElement element) => null; |
- R visitMethodElement(MethodElement element) => null; |
- R visitMultiplyDefinedElement(MultiplyDefinedElement element) => null; |
- R visitParameterElement(ParameterElement element) => null; |
- R visitPrefixElement(PrefixElement element) => null; |
- R visitPropertyAccessorElement(PropertyAccessorElement element) => null; |
- R visitTopLevelVariableElement(TopLevelVariableElement element) => null; |
- R visitTypeParameterElement(TypeParameterElement element) => null; |
-} |
-/** |
- * For AST nodes that could be in both the getter and setter contexts ([IndexExpression]s and |
- * [SimpleIdentifier]s), the additional resolved elements are stored in the AST node, in an |
- * [AuxiliaryElements]. Since resolved elements are either statically resolved or resolved |
- * using propagated type information, this class is a wrapper for a pair of |
- * [ExecutableElement]s, not just a single [ExecutableElement]. |
- */ |
-class AuxiliaryElements { |
- |
- /** |
- * The element based on propagated type information, or `null` if the AST structure has not |
- * been resolved or if this identifier could not be resolved. |
- */ |
- ExecutableElement propagatedElement; |
- |
- /** |
- * The element associated with this identifier based on static type information, or `null` |
- * if the AST structure has not been resolved or if this identifier could not be resolved. |
- */ |
- ExecutableElement staticElement; |
- |
- /** |
- * Create the [AuxiliaryElements] with a static and propagated [ExecutableElement]. |
- * |
- * @param staticElement the static element |
- * @param propagatedElement the propagated element |
- */ |
- AuxiliaryElements(ExecutableElement staticElement, ExecutableElement propagatedElement) { |
- this.staticElement = staticElement; |
- this.propagatedElement = propagatedElement; |
- } |
-} |
-/** |
- * Instances of the class `ClassElementImpl` implement a `ClassElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ClassElementImpl extends ElementImpl implements ClassElement { |
- |
- /** |
- * An array containing all of the accessors (getters and setters) contained in this class. |
- */ |
- List<PropertyAccessorElement> _accessors = PropertyAccessorElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the constructors contained in this class. |
- */ |
- List<ConstructorElement> _constructors = ConstructorElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the fields contained in this class. |
- */ |
- List<FieldElement> _fields = FieldElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the mixins that are applied to the class being extended in order to |
- * derive the superclass of this class. |
- */ |
- List<InterfaceType> _mixins = InterfaceTypeImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the interfaces that are implemented by this class. |
- */ |
- List<InterfaceType> _interfaces = InterfaceTypeImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the methods contained in this class. |
- */ |
- List<MethodElement> _methods = MethodElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The superclass of the class, or `null` if the class does not have an explicit superclass. |
- */ |
- InterfaceType _supertype; |
- |
- /** |
- * The type defined by the class. |
- */ |
- InterfaceType _type; |
- |
- /** |
- * An array containing all of the type parameters defined for this class. |
- */ |
- List<TypeParameterElement> _typeParameters = TypeParameterElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An empty array of type elements. |
- */ |
- static List<ClassElement> EMPTY_ARRAY = new List<ClassElement>(0); |
- |
- /** |
- * Initialize a newly created class element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ClassElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitClassElement(this); |
- List<PropertyAccessorElement> get accessors => _accessors; |
- List<InterfaceType> get allSupertypes { |
- List<InterfaceType> list = new List<InterfaceType>(); |
- collectAllSupertypes(list); |
- return new List.from(list); |
- } |
- ElementImpl getChild(String identifier) { |
- for (PropertyAccessorElement accessor in _accessors) { |
- if (((accessor as PropertyAccessorElementImpl)).identifier == identifier) { |
- return accessor as PropertyAccessorElementImpl; |
- } |
- } |
- for (ConstructorElement constructor in _constructors) { |
- if (((constructor as ConstructorElementImpl)).identifier == identifier) { |
- return constructor as ConstructorElementImpl; |
- } |
- } |
- for (FieldElement field in _fields) { |
- if (((field as FieldElementImpl)).identifier == identifier) { |
- return field as FieldElementImpl; |
- } |
- } |
- for (MethodElement method in _methods) { |
- if (((method as MethodElementImpl)).identifier == identifier) { |
- return method as MethodElementImpl; |
- } |
- } |
- for (TypeParameterElement typeParameter in _typeParameters) { |
- if (((typeParameter as TypeParameterElementImpl)).identifier == identifier) { |
- return typeParameter as TypeParameterElementImpl; |
- } |
- } |
- return null; |
- } |
- List<ConstructorElement> get constructors => _constructors; |
- |
- /** |
- * Given some name, this returns the [FieldElement] with the matching name, if there is no |
- * such field, then `null` is returned. |
- * |
- * @param name some name to lookup a field element with |
- * @return the matching field element, or `null` if no such element was found |
- */ |
- FieldElement getField(String name) { |
- for (FieldElement fieldElement in _fields) { |
- if (name == fieldElement.name) { |
- return fieldElement; |
- } |
- } |
- return null; |
- } |
- List<FieldElement> get fields => _fields; |
- PropertyAccessorElement getGetter(String getterName) { |
- for (PropertyAccessorElement accessor in _accessors) { |
- if (accessor.isGetter && accessor.name == getterName) { |
- return accessor; |
- } |
- } |
- return null; |
- } |
- List<InterfaceType> get interfaces => _interfaces; |
- ElementKind get kind => ElementKind.CLASS; |
- MethodElement getMethod(String methodName) { |
- for (MethodElement method in _methods) { |
- if (method.name == methodName) { |
- return method; |
- } |
- } |
- return null; |
- } |
- List<MethodElement> get methods => _methods; |
- List<InterfaceType> get mixins => _mixins; |
- ConstructorElement getNamedConstructor(String name) { |
- for (ConstructorElement element in constructors) { |
- String elementName = element.name; |
- if (elementName != null && elementName == name) { |
- return element; |
- } |
- } |
- return null; |
- } |
- PropertyAccessorElement getSetter(String setterName) { |
- if (!setterName.endsWith("=")) { |
- setterName += '='; |
- } |
- for (PropertyAccessorElement accessor in _accessors) { |
- if (accessor.isSetter && accessor.name == setterName) { |
- return accessor; |
- } |
- } |
- return null; |
- } |
- InterfaceType get supertype => _supertype; |
- InterfaceType get type => _type; |
- List<TypeParameterElement> get typeParameters => _typeParameters; |
- ConstructorElement get unnamedConstructor { |
- for (ConstructorElement element in constructors) { |
- String name = element.displayName; |
- if (name == null || name.isEmpty) { |
- return element; |
- } |
- } |
- return null; |
- } |
- bool hasNonFinalField() { |
- List<ClassElement> classesToVisit = new List<ClassElement>(); |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- classesToVisit.add(this); |
- while (!classesToVisit.isEmpty) { |
- ClassElement currentElement = classesToVisit.removeAt(0); |
- if (javaSetAdd(visitedClasses, currentElement)) { |
- for (FieldElement field in currentElement.fields) { |
- if (!field.isFinal && !field.isConst && !field.isStatic && !field.isSynthetic) { |
- return true; |
- } |
- } |
- for (InterfaceType mixinType in currentElement.mixins) { |
- ClassElement mixinElement = mixinType.element; |
- classesToVisit.add(mixinElement); |
- } |
- InterfaceType supertype = currentElement.supertype; |
- if (supertype != null) { |
- ClassElement superElement = supertype.element; |
- if (superElement != null) { |
- classesToVisit.add(superElement); |
- } |
- } |
- } |
- } |
- return false; |
- } |
- bool hasReferenceToSuper() => hasModifier(Modifier.REFERENCES_SUPER); |
- bool get isAbstract => hasModifier(Modifier.ABSTRACT); |
- bool get isTypedef => hasModifier(Modifier.TYPEDEF); |
- bool get isValidMixin => hasModifier(Modifier.MIXIN); |
- PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library) { |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- ClassElement currentElement = this; |
- while (currentElement != null && !visitedClasses.contains(currentElement)) { |
- javaSetAdd(visitedClasses, currentElement); |
- PropertyAccessorElement element = currentElement.getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in currentElement.mixins) { |
- ClassElement mixinElement = mixin.element; |
- if (mixinElement != null) { |
- element = mixinElement.getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- } |
- InterfaceType supertype = currentElement.supertype; |
- if (supertype == null) { |
- return null; |
- } |
- currentElement = supertype.element; |
- } |
- return null; |
- } |
- MethodElement lookUpMethod(String methodName, LibraryElement library) { |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- ClassElement currentElement = this; |
- while (currentElement != null && !visitedClasses.contains(currentElement)) { |
- javaSetAdd(visitedClasses, currentElement); |
- MethodElement element = currentElement.getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in currentElement.mixins) { |
- ClassElement mixinElement = mixin.element; |
- if (mixinElement != null) { |
- element = mixinElement.getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- } |
- InterfaceType supertype = currentElement.supertype; |
- if (supertype == null) { |
- return null; |
- } |
- currentElement = supertype.element; |
- } |
- return null; |
- } |
- PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library) { |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- ClassElement currentElement = this; |
- while (currentElement != null && !visitedClasses.contains(currentElement)) { |
- javaSetAdd(visitedClasses, currentElement); |
- PropertyAccessorElement element = currentElement.getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in currentElement.mixins) { |
- ClassElement mixinElement = mixin.element; |
- if (mixinElement != null) { |
- element = mixinElement.getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- } |
- InterfaceType supertype = currentElement.supertype; |
- if (supertype == null) { |
- return null; |
- } |
- currentElement = supertype.element; |
- } |
- return null; |
- } |
- |
- /** |
- * Set whether this class is abstract to correspond to the given value. |
- * |
- * @param isAbstract `true` if the class is abstract |
- */ |
- void set abstract(bool isAbstract) { |
- setModifier(Modifier.ABSTRACT, isAbstract); |
- } |
- |
- /** |
- * Set the accessors contained in this class to the given accessors. |
- * |
- * @param accessors the accessors contained in this class |
- */ |
- void set accessors(List<PropertyAccessorElement> accessors) { |
- for (PropertyAccessorElement accessor in accessors) { |
- ((accessor as PropertyAccessorElementImpl)).enclosingElement = this; |
- } |
- this._accessors = accessors; |
- } |
- |
- /** |
- * Set the constructors contained in this class to the given constructors. |
- * |
- * @param constructors the constructors contained in this class |
- */ |
- void set constructors(List<ConstructorElement> constructors) { |
- for (ConstructorElement constructor in constructors) { |
- ((constructor as ConstructorElementImpl)).enclosingElement = this; |
- } |
- this._constructors = constructors; |
- } |
- |
- /** |
- * Set the fields contained in this class to the given fields. |
- * |
- * @param fields the fields contained in this class |
- */ |
- void set fields(List<FieldElement> fields) { |
- for (FieldElement field in fields) { |
- ((field as FieldElementImpl)).enclosingElement = this; |
- } |
- this._fields = fields; |
- } |
- |
- /** |
- * Set whether this class references 'super' to the given value. |
- * |
- * @param isReferencedSuper `true` references 'super' |
- */ |
- void set hasReferenceToSuper2(bool isReferencedSuper) { |
- setModifier(Modifier.REFERENCES_SUPER, isReferencedSuper); |
- } |
- |
- /** |
- * Set the interfaces that are implemented by this class to the given types. |
- * |
- * @param the interfaces that are implemented by this class |
- */ |
- void set interfaces(List<InterfaceType> interfaces) { |
- this._interfaces = interfaces; |
- } |
- |
- /** |
- * Set the methods contained in this class to the given methods. |
- * |
- * @param methods the methods contained in this class |
- */ |
- void set methods(List<MethodElement> methods) { |
- for (MethodElement method in methods) { |
- ((method as MethodElementImpl)).enclosingElement = this; |
- } |
- this._methods = methods; |
- } |
- |
- /** |
- * Set the mixins that are applied to the class being extended in order to derive the superclass |
- * of this class to the given types. |
- * |
- * @param mixins the mixins that are applied to derive the superclass of this class |
- */ |
- void set mixins(List<InterfaceType> mixins) { |
- this._mixins = mixins; |
- } |
- |
- /** |
- * Set the superclass of the class to the given type. |
- * |
- * @param supertype the superclass of the class |
- */ |
- void set supertype(InterfaceType supertype) { |
- this._supertype = supertype; |
- } |
- |
- /** |
- * Set the type defined by the class to the given type. |
- * |
- * @param type the type defined by the class |
- */ |
- void set type(InterfaceType type) { |
- this._type = type; |
- } |
- |
- /** |
- * Set whether this class is defined by a typedef construct to correspond to the given value. |
- * |
- * @param isTypedef `true` if the class is defined by a typedef construct |
- */ |
- void set typedef(bool isTypedef) { |
- setModifier(Modifier.TYPEDEF, isTypedef); |
- } |
- |
- /** |
- * Set the type parameters defined for this class to the given type parameters. |
- * |
- * @param typeParameters the type parameters defined for this class |
- */ |
- void set typeParameters(List<TypeParameterElement> typeParameters) { |
- for (TypeParameterElement typeParameter in typeParameters) { |
- ((typeParameter as TypeParameterElementImpl)).enclosingElement = this; |
- } |
- this._typeParameters = typeParameters; |
- } |
- |
- /** |
- * Set whether this class is a valid mixin to correspond to the given value. |
- * |
- * @param isValidMixin `true` if this class can be used as a mixin |
- */ |
- void set validMixin(bool isValidMixin) { |
- setModifier(Modifier.MIXIN, isValidMixin); |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_accessors, visitor); |
- safelyVisitChildren(_constructors, visitor); |
- safelyVisitChildren(_fields, visitor); |
- safelyVisitChildren(_methods, visitor); |
- safelyVisitChildren(_typeParameters, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- String name = displayName; |
- if (name == null) { |
- builder.append("{unnamed class}"); |
- } else { |
- builder.append(name); |
- } |
- int variableCount = _typeParameters.length; |
- if (variableCount > 0) { |
- builder.append("<"); |
- for (int i = 0; i < variableCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_typeParameters[i] as TypeParameterElementImpl)).appendTo(builder); |
- } |
- builder.append(">"); |
- } |
- } |
- void collectAllSupertypes(List<InterfaceType> supertypes) { |
- List<InterfaceType> typesToVisit = new List<InterfaceType>(); |
- List<ClassElement> visitedClasses = new List<ClassElement>(); |
- typesToVisit.add(this.type); |
- while (!typesToVisit.isEmpty) { |
- InterfaceType currentType = typesToVisit.removeAt(0); |
- ClassElement currentElement = currentType.element; |
- if (!visitedClasses.contains(currentElement)) { |
- visitedClasses.add(currentElement); |
- if (currentType != this.type) { |
- supertypes.add(currentType); |
- } |
- InterfaceType supertype = currentType.superclass; |
- if (supertype != null) { |
- typesToVisit.add(supertype); |
- } |
- for (InterfaceType type in currentElement.interfaces) { |
- typesToVisit.add(type); |
- } |
- for (InterfaceType type in currentElement.mixins) { |
- ClassElement element = type.element; |
- if (!visitedClasses.contains(element)) { |
- supertypes.add(type); |
- } |
- } |
- } |
- } |
- } |
-} |
-/** |
- * Instances of the class `CompilationUnitElementImpl` implement a |
- * [CompilationUnitElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitElement { |
- |
- /** |
- * An empty array of compilation unit elements. |
- */ |
- static List<CompilationUnitElement> EMPTY_ARRAY = new List<CompilationUnitElement>(0); |
- |
- /** |
- * An array containing all of the top-level accessors (getters and setters) contained in this |
- * compilation unit. |
- */ |
- List<PropertyAccessorElement> _accessors = PropertyAccessorElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the top-level functions contained in this compilation unit. |
- */ |
- List<FunctionElement> _functions = FunctionElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the variables contained in this compilation unit. |
- */ |
- List<TopLevelVariableElement> _variables = TopLevelVariableElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The source that corresponds to this compilation unit. |
- */ |
- Source _source; |
- |
- /** |
- * An array containing all of the function type aliases contained in this compilation unit. |
- */ |
- List<FunctionTypeAliasElement> _typeAliases = FunctionTypeAliasElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the types contained in this compilation unit. |
- */ |
- List<ClassElement> _types = ClassElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The URI that is specified by the "part" directive in the enclosing library, or `null` if |
- * this is the defining compilation unit of a library. |
- */ |
- String _uri; |
- |
- /** |
- * Initialize a newly created compilation unit element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- CompilationUnitElementImpl(String name) : super.con2(name, -1); |
- accept(ElementVisitor visitor) => visitor.visitCompilationUnitElement(this); |
- bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && _source == ((object as CompilationUnitElementImpl)).source; |
- List<PropertyAccessorElement> get accessors => _accessors; |
- ElementImpl getChild(String identifier) { |
- for (PropertyAccessorElement accessor in _accessors) { |
- if (((accessor as PropertyAccessorElementImpl)).identifier == identifier) { |
- return accessor as PropertyAccessorElementImpl; |
- } |
- } |
- for (VariableElement variable in _variables) { |
- if (((variable as VariableElementImpl)).identifier == identifier) { |
- return variable as VariableElementImpl; |
- } |
- } |
- for (ExecutableElement function in _functions) { |
- if (((function as ExecutableElementImpl)).identifier == identifier) { |
- return function as ExecutableElementImpl; |
- } |
- } |
- for (FunctionTypeAliasElement typeAlias in _typeAliases) { |
- if (((typeAlias as FunctionTypeAliasElementImpl)).identifier == identifier) { |
- return typeAlias as FunctionTypeAliasElementImpl; |
- } |
- } |
- for (ClassElement type in _types) { |
- if (((type as ClassElementImpl)).identifier == identifier) { |
- return type as ClassElementImpl; |
- } |
- } |
- return null; |
- } |
- LibraryElement get enclosingElement => super.enclosingElement as LibraryElement; |
- List<FunctionElement> get functions => _functions; |
- List<FunctionTypeAliasElement> get functionTypeAliases => _typeAliases; |
- ElementKind get kind => ElementKind.COMPILATION_UNIT; |
- Source get source => _source; |
- List<TopLevelVariableElement> get topLevelVariables => _variables; |
- ClassElement getType(String className) { |
- for (ClassElement type in _types) { |
- if (type.name == className) { |
- return type; |
- } |
- } |
- return null; |
- } |
- List<ClassElement> get types => _types; |
- String get uri => _uri; |
- int get hashCode => _source.hashCode; |
- |
- /** |
- * Set the top-level accessors (getters and setters) contained in this compilation unit to the |
- * given accessors. |
- * |
- * @param the top-level accessors (getters and setters) contained in this compilation unit |
- */ |
- void set accessors(List<PropertyAccessorElement> accessors) { |
- for (PropertyAccessorElement accessor in accessors) { |
- ((accessor as PropertyAccessorElementImpl)).enclosingElement = this; |
- } |
- this._accessors = accessors; |
- } |
- |
- /** |
- * Set the top-level functions contained in this compilation unit to the given functions. |
- * |
- * @param functions the top-level functions contained in this compilation unit |
- */ |
- void set functions(List<FunctionElement> functions) { |
- for (FunctionElement function in functions) { |
- ((function as FunctionElementImpl)).enclosingElement = this; |
- } |
- this._functions = functions; |
- } |
- |
- /** |
- * Set the source that corresponds to this compilation unit to the given source. |
- * |
- * @param source the source that corresponds to this compilation unit |
- */ |
- void set source(Source source) { |
- this._source = source; |
- } |
- |
- /** |
- * Set the top-level variables contained in this compilation unit to the given variables. |
- * |
- * @param variables the top-level variables contained in this compilation unit |
- */ |
- void set topLevelVariables(List<TopLevelVariableElement> variables) { |
- for (TopLevelVariableElement field in variables) { |
- ((field as TopLevelVariableElementImpl)).enclosingElement = this; |
- } |
- this._variables = variables; |
- } |
- |
- /** |
- * Set the function type aliases contained in this compilation unit to the given type aliases. |
- * |
- * @param typeAliases the function type aliases contained in this compilation unit |
- */ |
- void set typeAliases(List<FunctionTypeAliasElement> typeAliases) { |
- for (FunctionTypeAliasElement typeAlias in typeAliases) { |
- ((typeAlias as FunctionTypeAliasElementImpl)).enclosingElement = this; |
- } |
- this._typeAliases = typeAliases; |
- } |
- |
- /** |
- * Set the types contained in this compilation unit to the given types. |
- * |
- * @param types types contained in this compilation unit |
- */ |
- void set types(List<ClassElement> types) { |
- for (ClassElement type in types) { |
- ((type as ClassElementImpl)).enclosingElement = this; |
- } |
- this._types = types; |
- } |
- |
- /** |
- * Set the URI that is specified by the "part" directive in the enclosing library. |
- * |
- * @param uri the URI that is specified by the "part" directive in the enclosing library. |
- */ |
- void set uri(String uri) { |
- this._uri = uri; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_accessors, visitor); |
- safelyVisitChildren(_functions, visitor); |
- safelyVisitChildren(_typeAliases, visitor); |
- safelyVisitChildren(_types, visitor); |
- safelyVisitChildren(_variables, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- if (_source == null) { |
- builder.append("{compilation unit}"); |
- } else { |
- builder.append(_source.fullName); |
- } |
- } |
- String get identifier => source.encoding; |
-} |
-/** |
- * Instances of the class `ConstFieldElementImpl` implement a `FieldElement` for a |
- * 'const' field that has an initializer. |
- */ |
-class ConstFieldElementImpl extends FieldElementImpl { |
- |
- /** |
- * The result of evaluating this variable's initializer. |
- */ |
- EvaluationResultImpl _result; |
- |
- /** |
- * Initialize a newly created field element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ConstFieldElementImpl(Identifier name) : super.con1(name); |
- EvaluationResultImpl get evaluationResult => _result; |
- void set evaluationResult(EvaluationResultImpl result) { |
- this._result = result; |
- } |
-} |
-/** |
- * Instances of the class `ConstLocalVariableElementImpl` implement a |
- * `LocalVariableElement` for a local 'const' variable that has an initializer. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ConstLocalVariableElementImpl extends LocalVariableElementImpl { |
- |
- /** |
- * The result of evaluating this variable's initializer. |
- */ |
- EvaluationResultImpl _result; |
- |
- /** |
- * Initialize a newly created local variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ConstLocalVariableElementImpl(Identifier name) : super(name); |
- EvaluationResultImpl get evaluationResult => _result; |
- void set evaluationResult(EvaluationResultImpl result) { |
- this._result = result; |
- } |
-} |
-/** |
- * Instances of the class `ConstTopLevelVariableElementImpl` implement a |
- * `TopLevelVariableElement` for a top-level 'const' variable that has an initializer. |
- */ |
-class ConstTopLevelVariableElementImpl extends TopLevelVariableElementImpl { |
- |
- /** |
- * The result of evaluating this variable's initializer. |
- */ |
- EvaluationResultImpl _result; |
- |
- /** |
- * Initialize a newly created top-level variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ConstTopLevelVariableElementImpl(Identifier name) : super.con1(name); |
- EvaluationResultImpl get evaluationResult => _result; |
- void set evaluationResult(EvaluationResultImpl result) { |
- this._result = result; |
- } |
-} |
-/** |
- * Instances of the class `ConstructorElementImpl` implement a `ConstructorElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ConstructorElementImpl extends ExecutableElementImpl implements ConstructorElement { |
- |
- /** |
- * An empty array of constructor elements. |
- */ |
- static List<ConstructorElement> EMPTY_ARRAY = new List<ConstructorElement>(0); |
- |
- /** |
- * The constructor to which this constructor is redirecting. |
- */ |
- ConstructorElement _redirectedConstructor; |
- |
- /** |
- * Initialize a newly created constructor element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ConstructorElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitConstructorElement(this); |
- ClassElement get enclosingElement => super.enclosingElement as ClassElement; |
- ElementKind get kind => ElementKind.CONSTRUCTOR; |
- ConstructorElement get redirectedConstructor => _redirectedConstructor; |
- bool get isConst => hasModifier(Modifier.CONST); |
- bool get isDefaultConstructor { |
- String name = this.name; |
- if (name != null && name.length != 0) { |
- return false; |
- } |
- for (ParameterElement parameter in parameters) { |
- if (identical(parameter.parameterKind, ParameterKind.REQUIRED)) { |
- return false; |
- } |
- } |
- return true; |
- } |
- bool get isFactory => hasModifier(Modifier.FACTORY); |
- bool get isStatic => false; |
- |
- /** |
- * Set whether this constructor represents a 'const' constructor to the given value. |
- * |
- * @param isConst `true` if this constructor represents a 'const' constructor |
- */ |
- void set const2(bool isConst) { |
- setModifier(Modifier.CONST, isConst); |
- } |
- |
- /** |
- * Set whether this constructor represents a factory method to the given value. |
- * |
- * @param isFactory `true` if this constructor represents a factory method |
- */ |
- void set factory(bool isFactory) { |
- setModifier(Modifier.FACTORY, isFactory); |
- } |
- |
- /** |
- * Sets the constructor to which this constructor is redirecting. |
- * |
- * @param redirectedConstructor the constructor to which this constructor is redirecting |
- */ |
- void set redirectedConstructor(ConstructorElement redirectedConstructor) { |
- this._redirectedConstructor = redirectedConstructor; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(enclosingElement.displayName); |
- String name = displayName; |
- if (name != null && !name.isEmpty) { |
- builder.append("."); |
- builder.append(name); |
- } |
- super.appendTo(builder); |
- } |
-} |
-/** |
- * Instances of the class `DefaultFieldFormalParameterElementImpl` implement a |
- * `FieldFormalParameterElementImpl` for parameters that have an initializer. |
- * |
- * @coverage dart.engine.element |
- */ |
-class DefaultFieldFormalParameterElementImpl extends FieldFormalParameterElementImpl { |
- |
- /** |
- * The result of evaluating this variable's initializer. |
- */ |
- EvaluationResultImpl _result; |
- |
- /** |
- * Initialize a newly created parameter element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- DefaultFieldFormalParameterElementImpl(Identifier name) : super(name); |
- EvaluationResultImpl get evaluationResult => _result; |
- void set evaluationResult(EvaluationResultImpl result) { |
- this._result = result; |
- } |
-} |
-/** |
- * Instances of the class `DefaultParameterElementImpl` implement a `ParameterElement` |
- * for parameters that have an initializer. |
- * |
- * @coverage dart.engine.element |
- */ |
-class DefaultParameterElementImpl extends ParameterElementImpl { |
- |
- /** |
- * The result of evaluating this variable's initializer. |
- */ |
- EvaluationResultImpl _result; |
- |
- /** |
- * Initialize a newly created parameter element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- DefaultParameterElementImpl(Identifier name) : super.con1(name); |
- EvaluationResultImpl get evaluationResult => _result; |
- void set evaluationResult(EvaluationResultImpl result) { |
- this._result = result; |
- } |
-} |
-/** |
- * Instances of the class `DynamicElementImpl` represent the synthetic element representing |
- * the declaration of the type `dynamic`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class DynamicElementImpl extends ElementImpl { |
- |
- /** |
- * Return the unique instance of this class. |
- * |
- * @return the unique instance of this class |
- */ |
- static DynamicElementImpl get instance => DynamicTypeImpl.instance.element as DynamicElementImpl; |
- |
- /** |
- * The type defined by this element. |
- */ |
- DynamicTypeImpl type; |
- |
- /** |
- * Initialize a newly created instance of this class. Instances of this class should <b>not</b> be |
- * created except as part of creating the type associated with this element. The single instance |
- * of this class should be accessed through the method [getInstance]. |
- */ |
- DynamicElementImpl() : super.con2(Keyword.DYNAMIC.syntax, -1) { |
- setModifier(Modifier.SYNTHETIC, true); |
- } |
- accept(ElementVisitor visitor) => null; |
- ElementKind get kind => ElementKind.DYNAMIC; |
-} |
-/** |
- * Instances of the class `ElementAnnotationImpl` implement an [ElementAnnotation]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ElementAnnotationImpl implements ElementAnnotation { |
- |
- /** |
- * The element representing the field, variable, or constructor being used as an annotation. |
- */ |
- Element _element; |
- |
- /** |
- * An empty array of annotations. |
- */ |
- static List<ElementAnnotationImpl> EMPTY_ARRAY = new List<ElementAnnotationImpl>(0); |
- |
- /** |
- * Initialize a newly created annotation. |
- * |
- * @param element the element representing the field, variable, or constructor being used as an |
- * annotation |
- */ |
- ElementAnnotationImpl(Element element) { |
- this._element = element; |
- } |
- Element get element => _element; |
- String toString() => "@${_element.toString()}"; |
-} |
-/** |
- * The abstract class `ElementImpl` implements the behavior common to objects that implement |
- * an [Element]. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ElementImpl implements Element { |
- |
- /** |
- * The enclosing element of this element, or `null` if this element is at the root of the |
- * element structure. |
- */ |
- ElementImpl _enclosingElement; |
- |
- /** |
- * The name of this element. |
- */ |
- String _name; |
- |
- /** |
- * The offset of the name of this element in the file that contains the declaration of this |
- * element. |
- */ |
- int _nameOffset = 0; |
- |
- /** |
- * A bit-encoded form of the modifiers associated with this element. |
- */ |
- int _modifiers = 0; |
- |
- /** |
- * An array containing all of the metadata associated with this element. |
- */ |
- List<ElementAnnotation> _metadata = ElementAnnotationImpl.EMPTY_ARRAY; |
- |
- /** |
- * A cached copy of the calculated hashCode for this element. |
- */ |
- int _cachedHashCode = 0; |
- |
- /** |
- * Initialize a newly created element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ElementImpl.con1(Identifier name) : this.con2(name == null ? "" : name.name, name == null ? -1 : name.offset); |
- |
- /** |
- * Initialize a newly created element to have the given name. |
- * |
- * @param name the name of this element |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- ElementImpl.con2(String name, int nameOffset) { |
- this._name = StringUtilities.intern(name); |
- this._nameOffset = nameOffset; |
- } |
- String computeDocumentationComment() { |
- AnalysisContext context = this.context; |
- if (context == null) { |
- return null; |
- } |
- return context.computeDocumentationComment(this); |
- } |
- bool operator ==(Object object) { |
- if (identical(this, object)) { |
- return true; |
- } |
- if (object == null || hashCode != object.hashCode) { |
- return false; |
- } |
- return object.runtimeType == runtimeType && ((object as Element)).location == location; |
- } |
- Element getAncestor(Type elementClass) { |
- Element ancestor = _enclosingElement; |
- while (ancestor != null && !isInstanceOf(ancestor, elementClass)) { |
- ancestor = ancestor.enclosingElement; |
- } |
- return ancestor as Element; |
- } |
- |
- /** |
- * Return the child of this element that is uniquely identified by the given identifier, or |
- * `null` if there is no such child. |
- * |
- * @param identifier the identifier used to select a child |
- * @return the child of this element with the given identifier |
- */ |
- ElementImpl getChild(String identifier) => null; |
- AnalysisContext get context { |
- if (_enclosingElement == null) { |
- return null; |
- } |
- return _enclosingElement.context; |
- } |
- String get displayName => _name; |
- Element get enclosingElement => _enclosingElement; |
- LibraryElement get library => getAncestor(LibraryElement); |
- ElementLocation get location => new ElementLocationImpl.con1(this); |
- List<ElementAnnotation> get metadata => _metadata; |
- String get name => _name; |
- int get nameOffset => _nameOffset; |
- Source get source { |
- if (_enclosingElement == null) { |
- return null; |
- } |
- return _enclosingElement.source; |
- } |
- int get hashCode { |
- if (_cachedHashCode == 0) { |
- _cachedHashCode = location.hashCode; |
- } |
- return _cachedHashCode; |
- } |
- bool isAccessibleIn(LibraryElement library) { |
- if (Identifier.isPrivateName(_name)) { |
- return library == this.library; |
- } |
- return true; |
- } |
- bool get isSynthetic => hasModifier(Modifier.SYNTHETIC); |
- |
- /** |
- * Set the metadata associate with this element to the given array of annotations. |
- * |
- * @param metadata the metadata to be associated with this element |
- */ |
- void set metadata(List<ElementAnnotation> metadata) { |
- this._metadata = metadata; |
- } |
- |
- /** |
- * Set the offset of the name of this element in the file that contains the declaration of this |
- * element to the given value. This is normally done via the constructor, but this method is |
- * provided to support unnamed constructors. |
- * |
- * @param nameOffset the offset to the beginning of the name |
- */ |
- void set nameOffset(int nameOffset) { |
- this._nameOffset = nameOffset; |
- } |
- |
- /** |
- * Set whether this element is synthetic to correspond to the given value. |
- * |
- * @param isSynthetic `true` if the element is synthetic |
- */ |
- void set synthetic(bool isSynthetic) { |
- setModifier(Modifier.SYNTHETIC, isSynthetic); |
- } |
- String toString() { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- appendTo(builder); |
- return builder.toString(); |
- } |
- void visitChildren(ElementVisitor visitor) { |
- } |
- |
- /** |
- * Append a textual representation of this type to the given builder. |
- * |
- * @param builder the builder to which the text is to be appended |
- */ |
- void appendTo(JavaStringBuilder builder) { |
- if (_name == null) { |
- builder.append("<unnamed "); |
- builder.append(runtimeType.toString()); |
- builder.append(">"); |
- } else { |
- builder.append(_name); |
- } |
- } |
- |
- /** |
- * Return an identifier that uniquely identifies this element among the children of this element's |
- * parent. |
- * |
- * @return an identifier that uniquely identifies this element relative to its parent |
- */ |
- String get identifier => name; |
- |
- /** |
- * Return `true` if this element has the given modifier associated with it. |
- * |
- * @param modifier the modifier being tested for |
- * @return `true` if this element has the given modifier associated with it |
- */ |
- bool hasModifier(Modifier modifier) => BooleanArray.get(_modifiers, modifier); |
- |
- /** |
- * If the given child is not `null`, use the given visitor to visit it. |
- * |
- * @param child the child to be visited |
- * @param visitor the visitor to be used to visit the child |
- */ |
- void safelyVisitChild(Element child, ElementVisitor visitor) { |
- if (child != null) { |
- child.accept(visitor); |
- } |
- } |
- |
- /** |
- * Use the given visitor to visit all of the children in the given array. |
- * |
- * @param children the children to be visited |
- * @param visitor the visitor being used to visit the children |
- */ |
- void safelyVisitChildren(List<Element> children, ElementVisitor visitor) { |
- if (children != null) { |
- for (Element child in children) { |
- child.accept(visitor); |
- } |
- } |
- } |
- |
- /** |
- * Set the enclosing element of this element to the given element. |
- * |
- * @param element the enclosing element of this element |
- */ |
- void set enclosingElement(Element element) { |
- _enclosingElement = element as ElementImpl; |
- } |
- |
- /** |
- * Set whether the given modifier is associated with this element to correspond to the given |
- * value. |
- * |
- * @param modifier the modifier to be set |
- * @param value `true` if the modifier is to be associated with this element |
- */ |
- void setModifier(Modifier modifier, bool value) { |
- _modifiers = BooleanArray.set(_modifiers, modifier, value); |
- } |
-} |
-/** |
- * Instances of the class `ElementLocationImpl` implement an [ElementLocation]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ElementLocationImpl implements ElementLocation { |
- |
- /** |
- * The path to the element whose location is represented by this object. |
- */ |
- List<String> components; |
- |
- /** |
- * The character used to separate components in the encoded form. |
- */ |
- static int _SEPARATOR_CHAR = 0x3B; |
- |
- /** |
- * Initialize a newly created location to represent the given element. |
- * |
- * @param element the element whose location is being represented |
- */ |
- ElementLocationImpl.con1(Element element) { |
- List<String> components = new List<String>(); |
- Element ancestor = element; |
- while (ancestor != null) { |
- components.insert(0, ((ancestor as ElementImpl)).identifier); |
- ancestor = ancestor.enclosingElement; |
- } |
- this.components = new List.from(components); |
- } |
- |
- /** |
- * Initialize a newly created location from the given encoded form. |
- * |
- * @param encoding the encoded form of a location |
- */ |
- ElementLocationImpl.con2(String encoding) { |
- this.components = decode(encoding); |
- } |
- bool operator ==(Object object) { |
- if (identical(this, object)) { |
- return true; |
- } |
- if (object is! ElementLocationImpl) { |
- return false; |
- } |
- ElementLocationImpl location = object as ElementLocationImpl; |
- List<String> otherComponents = location.components; |
- int length = components.length; |
- if (otherComponents.length != length) { |
- return false; |
- } |
- for (int i = length - 1; i >= 2; i--) { |
- if (components[i] != otherComponents[i]) { |
- return false; |
- } |
- } |
- if (length > 1 && !equalSourceComponents(components[1], otherComponents[1])) { |
- return false; |
- } |
- if (length > 0 && !equalSourceComponents(components[0], otherComponents[0])) { |
- return false; |
- } |
- return true; |
- } |
- String get encoding { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- int length = components.length; |
- for (int i = 0; i < length; i++) { |
- if (i > 0) { |
- builder.appendChar(_SEPARATOR_CHAR); |
- } |
- encode(builder, components[i]); |
- } |
- return builder.toString(); |
- } |
- int get hashCode { |
- int result = 1; |
- for (int i = 0; i < components.length; i++) { |
- String component = components[i]; |
- int componentHash; |
- if (i <= 1) { |
- componentHash = hashSourceComponent(component); |
- } else { |
- componentHash = component.hashCode; |
- } |
- result = 31 * result + componentHash; |
- } |
- return result; |
- } |
- String toString() => encoding; |
- |
- /** |
- * Decode the encoded form of a location into an array of components. |
- * |
- * @param encoding the encoded form of a location |
- * @return the components that were encoded |
- */ |
- List<String> decode(String encoding) { |
- List<String> components = new List<String>(); |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- int index = 0; |
- int length = encoding.length; |
- while (index < length) { |
- int currentChar = encoding.codeUnitAt(index); |
- if (currentChar == _SEPARATOR_CHAR) { |
- if (index + 1 < length && encoding.codeUnitAt(index + 1) == _SEPARATOR_CHAR) { |
- builder.appendChar(_SEPARATOR_CHAR); |
- index += 2; |
- } else { |
- components.add(builder.toString()); |
- builder.length = 0; |
- index++; |
- } |
- } else { |
- builder.appendChar(currentChar); |
- index++; |
- } |
- } |
- if (builder.length > 0) { |
- components.add(builder.toString()); |
- } |
- return new List.from(components); |
- } |
- |
- /** |
- * Append an encoded form of the given component to the given builder. |
- * |
- * @param builder the builder to which the encoded component is to be appended |
- * @param component the component to be appended to the builder |
- */ |
- void encode(JavaStringBuilder builder, String component) { |
- int length = component.length; |
- for (int i = 0; i < length; i++) { |
- int currentChar = component.codeUnitAt(i); |
- if (currentChar == _SEPARATOR_CHAR) { |
- builder.appendChar(_SEPARATOR_CHAR); |
- } |
- builder.appendChar(currentChar); |
- } |
- } |
- |
- /** |
- * Return `true` if the given components, when interpreted to be encoded sources with a |
- * leading source type indicator, are equal when the source type's are ignored. |
- * |
- * @param left the left component being compared |
- * @param right the right component being compared |
- * @return `true` if the given components are equal when the source type's are ignored |
- */ |
- bool equalSourceComponents(String left, String right) { |
- if (left == null) { |
- return right == null; |
- } else if (right == null) { |
- return false; |
- } |
- int leftLength = left.length; |
- int rightLength = right.length; |
- if (leftLength != rightLength) { |
- return false; |
- } else if (leftLength <= 1 || rightLength <= 1) { |
- return left == right; |
- } |
- return javaStringRegionMatches(left, 1, right, 1, leftLength - 1); |
- } |
- |
- /** |
- * Return the hash code of the given encoded source component, ignoring the source type indicator. |
- * |
- * @param sourceComponent the component to compute a hash code |
- * @return the hash code of the given encoded source component |
- */ |
- int hashSourceComponent(String sourceComponent) { |
- if (sourceComponent.length <= 1) { |
- return sourceComponent.hashCode; |
- } |
- return sourceComponent.substring(1).hashCode; |
- } |
-} |
-/** |
- * Instances of the class `EmbeddedHtmlScriptElementImpl` implement an |
- * [EmbeddedHtmlScriptElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class EmbeddedHtmlScriptElementImpl extends HtmlScriptElementImpl implements EmbeddedHtmlScriptElement { |
- |
- /** |
- * The library defined by the script tag's content. |
- */ |
- LibraryElement _scriptLibrary; |
- |
- /** |
- * Initialize a newly created script element to have the specified tag name and offset. |
- * |
- * @param node the XML node from which this element is derived (not `null`) |
- */ |
- EmbeddedHtmlScriptElementImpl(XmlTagNode node) : super(node); |
- accept(ElementVisitor visitor) => visitor.visitEmbeddedHtmlScriptElement(this); |
- ElementKind get kind => ElementKind.EMBEDDED_HTML_SCRIPT; |
- LibraryElement get scriptLibrary => _scriptLibrary; |
- |
- /** |
- * Set the script library defined by the script tag's content. |
- * |
- * @param scriptLibrary the library or `null` if none |
- */ |
- void set scriptLibrary(LibraryElementImpl scriptLibrary) { |
- scriptLibrary.enclosingElement = this; |
- this._scriptLibrary = scriptLibrary; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- safelyVisitChild(_scriptLibrary, visitor); |
- } |
-} |
-/** |
- * The abstract class `ExecutableElementImpl` implements the behavior common to |
- * `ExecutableElement`s. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class ExecutableElementImpl extends ElementImpl implements ExecutableElement { |
- |
- /** |
- * An array containing all of the functions defined within this executable element. |
- */ |
- List<FunctionElement> _functions = FunctionElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the labels defined within this executable element. |
- */ |
- List<LabelElement> _labels = LabelElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the local variables defined within this executable element. |
- */ |
- List<LocalVariableElement> _localVariables = LocalVariableElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the parameters defined by this executable element. |
- */ |
- List<ParameterElement> _parameters = ParameterElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The return type defined by this executable element. |
- */ |
- Type2 _returnType; |
- |
- /** |
- * The type of function defined by this executable element. |
- */ |
- FunctionType _type; |
- |
- /** |
- * An empty array of executable elements. |
- */ |
- static List<ExecutableElement> EMPTY_ARRAY = new List<ExecutableElement>(0); |
- |
- /** |
- * Initialize a newly created executable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ExecutableElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created executable element to have the given name. |
- * |
- * @param name the name of this element |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- ExecutableElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset); |
- ElementImpl getChild(String identifier) { |
- for (ExecutableElement function in _functions) { |
- if (((function as ExecutableElementImpl)).identifier == identifier) { |
- return function as ExecutableElementImpl; |
- } |
- } |
- for (LabelElement label in _labels) { |
- if (((label as LabelElementImpl)).identifier == identifier) { |
- return label as LabelElementImpl; |
- } |
- } |
- for (VariableElement variable in _localVariables) { |
- if (((variable as VariableElementImpl)).identifier == identifier) { |
- return variable as VariableElementImpl; |
- } |
- } |
- for (ParameterElement parameter in _parameters) { |
- if (((parameter as ParameterElementImpl)).identifier == identifier) { |
- return parameter as ParameterElementImpl; |
- } |
- } |
- return null; |
- } |
- List<FunctionElement> get functions => _functions; |
- List<LabelElement> get labels => _labels; |
- List<LocalVariableElement> get localVariables => _localVariables; |
- List<ParameterElement> get parameters => _parameters; |
- Type2 get returnType => _returnType; |
- FunctionType get type => _type; |
- bool get isOperator => false; |
- |
- /** |
- * Set the functions defined within this executable element to the given functions. |
- * |
- * @param functions the functions defined within this executable element |
- */ |
- void set functions(List<FunctionElement> functions) { |
- for (FunctionElement function in functions) { |
- ((function as FunctionElementImpl)).enclosingElement = this; |
- } |
- this._functions = functions; |
- } |
- |
- /** |
- * Set the labels defined within this executable element to the given labels. |
- * |
- * @param labels the labels defined within this executable element |
- */ |
- void set labels(List<LabelElement> labels) { |
- for (LabelElement label in labels) { |
- ((label as LabelElementImpl)).enclosingElement = this; |
- } |
- this._labels = labels; |
- } |
- |
- /** |
- * Set the local variables defined within this executable element to the given variables. |
- * |
- * @param localVariables the local variables defined within this executable element |
- */ |
- void set localVariables(List<LocalVariableElement> localVariables) { |
- for (LocalVariableElement variable in localVariables) { |
- ((variable as LocalVariableElementImpl)).enclosingElement = this; |
- } |
- this._localVariables = localVariables; |
- } |
- |
- /** |
- * Set the parameters defined by this executable element to the given parameters. |
- * |
- * @param parameters the parameters defined by this executable element |
- */ |
- void set parameters(List<ParameterElement> parameters) { |
- for (ParameterElement parameter in parameters) { |
- ((parameter as ParameterElementImpl)).enclosingElement = this; |
- } |
- this._parameters = parameters; |
- } |
- |
- /** |
- * Set the return type defined by this executable element. |
- * |
- * @param returnType the return type defined by this executable element |
- */ |
- void set returnType(Type2 returnType) { |
- this._returnType = returnType; |
- } |
- |
- /** |
- * Set the type of function defined by this executable element to the given type. |
- * |
- * @param type the type of function defined by this executable element |
- */ |
- void set type(FunctionType type) { |
- this._type = type; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_functions, visitor); |
- safelyVisitChildren(_labels, visitor); |
- safelyVisitChildren(_localVariables, visitor); |
- safelyVisitChildren(_parameters, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append("("); |
- int parameterCount = _parameters.length; |
- for (int i = 0; i < parameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_parameters[i] as ParameterElementImpl)).appendTo(builder); |
- } |
- builder.append(")"); |
- if (_type != null) { |
- builder.append(" -> "); |
- builder.append(_type.returnType); |
- } |
- } |
-} |
-/** |
- * Instances of the class `ExportElementImpl` implement an [ExportElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ExportElementImpl extends ElementImpl implements ExportElement { |
- |
- /** |
- * The URI that is specified by this directive. |
- */ |
- String _uri; |
- |
- /** |
- * The library that is exported from this library by this export directive. |
- */ |
- LibraryElement _exportedLibrary; |
- |
- /** |
- * The combinators that were specified as part of the export directive in the order in which they |
- * were specified. |
- */ |
- List<NamespaceCombinator> _combinators = NamespaceCombinator.EMPTY_ARRAY; |
- |
- /** |
- * Initialize a newly created export element. |
- */ |
- ExportElementImpl() : super.con1(null); |
- accept(ElementVisitor visitor) => visitor.visitExportElement(this); |
- List<NamespaceCombinator> get combinators => _combinators; |
- LibraryElement get exportedLibrary => _exportedLibrary; |
- ElementKind get kind => ElementKind.EXPORT; |
- String get uri => _uri; |
- |
- /** |
- * Set the combinators that were specified as part of the export directive to the given array of |
- * combinators. |
- * |
- * @param combinators the combinators that were specified as part of the export directive |
- */ |
- void set combinators(List<NamespaceCombinator> combinators) { |
- this._combinators = combinators; |
- } |
- |
- /** |
- * Set the library that is exported from this library by this import directive to the given |
- * library. |
- * |
- * @param exportedLibrary the library that is exported from this library |
- */ |
- void set exportedLibrary(LibraryElement exportedLibrary) { |
- this._exportedLibrary = exportedLibrary; |
- } |
- |
- /** |
- * Set the URI that is specified by this directive. |
- * |
- * @param uri the URI that is specified by this directive. |
- */ |
- void set uri(String uri) { |
- this._uri = uri; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append("export "); |
- ((_exportedLibrary as LibraryElementImpl)).appendTo(builder); |
- } |
- String get identifier => _exportedLibrary.name; |
-} |
-/** |
- * Instances of the class `ExternalHtmlScriptElementImpl` implement an |
- * [ExternalHtmlScriptElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ExternalHtmlScriptElementImpl extends HtmlScriptElementImpl implements ExternalHtmlScriptElement { |
- |
- /** |
- * The source specified in the `source` attribute or `null` if unspecified. |
- */ |
- Source _scriptSource; |
- |
- /** |
- * Initialize a newly created script element to have the specified tag name and offset. |
- * |
- * @param node the XML node from which this element is derived (not `null`) |
- */ |
- ExternalHtmlScriptElementImpl(XmlTagNode node) : super(node); |
- accept(ElementVisitor visitor) => visitor.visitExternalHtmlScriptElement(this); |
- ElementKind get kind => ElementKind.EXTERNAL_HTML_SCRIPT; |
- Source get scriptSource => _scriptSource; |
- |
- /** |
- * Set the source specified in the `source` attribute. |
- * |
- * @param scriptSource the script source or `null` if unspecified |
- */ |
- void set scriptSource(Source scriptSource) { |
- this._scriptSource = scriptSource; |
- } |
-} |
-/** |
- * Instances of the class `FieldElementImpl` implement a `FieldElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class FieldElementImpl extends PropertyInducingElementImpl implements FieldElement { |
- |
- /** |
- * An empty array of field elements. |
- */ |
- static List<FieldElement> EMPTY_ARRAY = new List<FieldElement>(0); |
- |
- /** |
- * Initialize a newly created field element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- FieldElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created synthetic field element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- FieldElementImpl.con2(String name) : super.con2(name); |
- accept(ElementVisitor visitor) => visitor.visitFieldElement(this); |
- ClassElement get enclosingElement => super.enclosingElement as ClassElement; |
- ElementKind get kind => ElementKind.FIELD; |
- bool get isStatic => hasModifier(Modifier.STATIC); |
- |
- /** |
- * Set whether this field is static to correspond to the given value. |
- * |
- * @param isStatic `true` if the field is static |
- */ |
- void set static(bool isStatic) { |
- setModifier(Modifier.STATIC, isStatic); |
- } |
-} |
-/** |
- * Instances of the class `FieldFormalParameterElementImpl` extend |
- * [ParameterElementImpl] to provide the additional information of the [FieldElement] |
- * associated with the parameter. |
- * |
- * @coverage dart.engine.element |
- */ |
-class FieldFormalParameterElementImpl extends ParameterElementImpl implements FieldFormalParameterElement { |
- |
- /** |
- * The field associated with this field formal parameter. |
- */ |
- FieldElement _field; |
- |
- /** |
- * Initialize a newly created parameter element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- FieldFormalParameterElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitFieldFormalParameterElement(this); |
- FieldElement get field => _field; |
- bool get isInitializingFormal => true; |
- |
- /** |
- * Set the field element associated with this field formal parameter to the given element. |
- * |
- * @param field the new field element |
- */ |
- void set field(FieldElement field) { |
- this._field = field; |
- } |
-} |
-/** |
- * Instances of the class `FunctionElementImpl` implement a `FunctionElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class FunctionElementImpl extends ExecutableElementImpl implements FunctionElement { |
- |
- /** |
- * The offset to the beginning of the visible range for this element. |
- */ |
- int _visibleRangeOffset = 0; |
- |
- /** |
- * The length of the visible range for this element, or `-1` if this element does not have a |
- * visible range. |
- */ |
- int _visibleRangeLength = -1; |
- |
- /** |
- * An empty array of function elements. |
- */ |
- static List<FunctionElement> EMPTY_ARRAY = new List<FunctionElement>(0); |
- |
- /** |
- * Initialize a newly created synthetic function element. |
- */ |
- FunctionElementImpl() : super.con2("", -1) { |
- synthetic = true; |
- } |
- |
- /** |
- * Initialize a newly created function element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- FunctionElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created function element to have no name and the given offset. This is used |
- * for function expressions, which have no name. |
- * |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- FunctionElementImpl.con2(int nameOffset) : super.con2("", nameOffset); |
- accept(ElementVisitor visitor) => visitor.visitFunctionElement(this); |
- ElementKind get kind => ElementKind.FUNCTION; |
- SourceRange get visibleRange { |
- if (_visibleRangeLength < 0) { |
- return null; |
- } |
- return new SourceRange(_visibleRangeOffset, _visibleRangeLength); |
- } |
- bool get isStatic => enclosingElement is CompilationUnitElement; |
- |
- /** |
- * Set the visible range for this element to the range starting at the given offset with the given |
- * length. |
- * |
- * @param offset the offset to the beginning of the visible range for this element |
- * @param length the length of the visible range for this element, or `-1` if this element |
- * does not have a visible range |
- */ |
- void setVisibleRange(int offset, int length) { |
- _visibleRangeOffset = offset; |
- _visibleRangeLength = length; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- String name = displayName; |
- if (name != null) { |
- builder.append(name); |
- } |
- super.appendTo(builder); |
- } |
- String get identifier => "${name}@${nameOffset}"; |
-} |
-/** |
- * Instances of the class `FunctionTypeAliasElementImpl` implement a |
- * `FunctionTypeAliasElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class FunctionTypeAliasElementImpl extends ElementImpl implements FunctionTypeAliasElement { |
- |
- /** |
- * An array containing all of the parameters defined by this type alias. |
- */ |
- List<ParameterElement> _parameters = ParameterElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The return type defined by this type alias. |
- */ |
- Type2 _returnType; |
- |
- /** |
- * The type of function defined by this type alias. |
- */ |
- FunctionType _type; |
- |
- /** |
- * An array containing all of the type parameters defined for this type. |
- */ |
- List<TypeParameterElement> _typeParameters = TypeParameterElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An empty array of type alias elements. |
- */ |
- static List<FunctionTypeAliasElement> EMPTY_ARRAY = new List<FunctionTypeAliasElement>(0); |
- |
- /** |
- * Initialize a newly created type alias element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- FunctionTypeAliasElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitFunctionTypeAliasElement(this); |
- ElementImpl getChild(String identifier) { |
- for (VariableElement parameter in _parameters) { |
- if (((parameter as VariableElementImpl)).identifier == identifier) { |
- return parameter as VariableElementImpl; |
- } |
- } |
- for (TypeParameterElement typeParameter in _typeParameters) { |
- if (((typeParameter as TypeParameterElementImpl)).identifier == identifier) { |
- return typeParameter as TypeParameterElementImpl; |
- } |
- } |
- return null; |
- } |
- CompilationUnitElement get enclosingElement => super.enclosingElement as CompilationUnitElement; |
- ElementKind get kind => ElementKind.FUNCTION_TYPE_ALIAS; |
- List<ParameterElement> get parameters => _parameters; |
- Type2 get returnType => _returnType; |
- FunctionType get type => _type; |
- List<TypeParameterElement> get typeParameters => _typeParameters; |
- |
- /** |
- * Set the parameters defined by this type alias to the given parameters. |
- * |
- * @param parameters the parameters defined by this type alias |
- */ |
- void set parameters(List<ParameterElement> parameters) { |
- if (parameters != null) { |
- for (ParameterElement parameter in parameters) { |
- ((parameter as ParameterElementImpl)).enclosingElement = this; |
- } |
- } |
- this._parameters = parameters; |
- } |
- |
- /** |
- * Set the return type defined by this type alias. |
- * |
- * @param returnType the return type defined by this type alias |
- */ |
- void set returnType(Type2 returnType) { |
- this._returnType = returnType; |
- } |
- |
- /** |
- * Set the type of function defined by this type alias to the given type. |
- * |
- * @param type the type of function defined by this type alias |
- */ |
- void set type(FunctionType type) { |
- this._type = type; |
- } |
- |
- /** |
- * Set the type parameters defined for this type to the given parameters. |
- * |
- * @param typeParameters the type parameters defined for this type |
- */ |
- void set typeParameters(List<TypeParameterElement> typeParameters) { |
- for (TypeParameterElement typeParameter in typeParameters) { |
- ((typeParameter as TypeParameterElementImpl)).enclosingElement = this; |
- } |
- this._typeParameters = typeParameters; |
- } |
- |
- /** |
- * Set the parameters defined by this type alias to the given parameters without becoming the |
- * parent of the parameters. This should only be used by the [TypeResolverVisitor] when |
- * creating a synthetic type alias. |
- * |
- * @param parameters the parameters defined by this type alias |
- */ |
- void shareParameters(List<ParameterElement> parameters) { |
- this._parameters = parameters; |
- } |
- |
- /** |
- * Set the type parameters defined for this type to the given parameters without becoming the |
- * parent of the parameters. This should only be used by the [TypeResolverVisitor] when |
- * creating a synthetic type alias. |
- * |
- * @param typeParameters the type parameters defined for this type |
- */ |
- void shareTypeParameters(List<TypeParameterElement> typeParameters) { |
- this._typeParameters = typeParameters; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_parameters, visitor); |
- safelyVisitChildren(_typeParameters, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append("typedef "); |
- builder.append(displayName); |
- int typeParameterCount = _typeParameters.length; |
- if (typeParameterCount > 0) { |
- builder.append("<"); |
- for (int i = 0; i < typeParameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_typeParameters[i] as TypeParameterElementImpl)).appendTo(builder); |
- } |
- builder.append(">"); |
- } |
- builder.append("("); |
- int parameterCount = _parameters.length; |
- for (int i = 0; i < parameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_parameters[i] as ParameterElementImpl)).appendTo(builder); |
- } |
- builder.append(")"); |
- if (_type != null) { |
- builder.append(" -> "); |
- builder.append(_type.returnType); |
- } |
- } |
-} |
-/** |
- * Instances of the class `HideElementCombinatorImpl` implement a |
- * [HideElementCombinator]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class HideElementCombinatorImpl implements HideElementCombinator { |
- |
- /** |
- * The names that are not to be made visible in the importing library even if they are defined in |
- * the imported library. |
- */ |
- List<String> _hiddenNames = StringUtilities.EMPTY_ARRAY; |
- List<String> get hiddenNames => _hiddenNames; |
- |
- /** |
- * Set the names that are not to be made visible in the importing library even if they are defined |
- * in the imported library to the given names. |
- * |
- * @param hiddenNames the names that are not to be made visible in the importing library |
- */ |
- void set hiddenNames(List<String> hiddenNames) { |
- this._hiddenNames = hiddenNames; |
- } |
- String toString() { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append("show "); |
- int count = _hiddenNames.length; |
- for (int i = 0; i < count; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- builder.append(_hiddenNames[i]); |
- } |
- return builder.toString(); |
- } |
-} |
-/** |
- * Instances of the class `HtmlElementImpl` implement an [HtmlElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class HtmlElementImpl extends ElementImpl implements HtmlElement { |
- |
- /** |
- * An empty array of HTML file elements. |
- */ |
- static List<HtmlElement> EMPTY_ARRAY = new List<HtmlElement>(0); |
- |
- /** |
- * The analysis context in which this library is defined. |
- */ |
- AnalysisContext _context; |
- |
- /** |
- * The scripts contained in or referenced from script tags in the HTML file. |
- */ |
- List<HtmlScriptElement> _scripts = HtmlScriptElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The source that corresponds to this HTML file. |
- */ |
- Source _source; |
- |
- /** |
- * Initialize a newly created HTML element to have the given name. |
- * |
- * @param context the analysis context in which the HTML file is defined |
- * @param name the name of this element |
- */ |
- HtmlElementImpl(AnalysisContext context, String name) : super.con2(name, -1) { |
- this._context = context; |
- } |
- accept(ElementVisitor visitor) => visitor.visitHtmlElement(this); |
- bool operator ==(Object object) => runtimeType == object.runtimeType && _source == ((object as CompilationUnitElementImpl)).source; |
- AnalysisContext get context => _context; |
- ElementKind get kind => ElementKind.HTML; |
- List<HtmlScriptElement> get scripts => _scripts; |
- Source get source => _source; |
- int get hashCode => _source.hashCode; |
- |
- /** |
- * Set the scripts contained in the HTML file to the given scripts. |
- * |
- * @param scripts the scripts |
- */ |
- void set scripts(List<HtmlScriptElement> scripts) { |
- if (scripts.length == 0) { |
- scripts = HtmlScriptElementImpl.EMPTY_ARRAY; |
- } |
- for (HtmlScriptElement script in scripts) { |
- ((script as HtmlScriptElementImpl)).enclosingElement = this; |
- } |
- this._scripts = scripts; |
- } |
- |
- /** |
- * Set the source that corresponds to this HTML file to the given source. |
- * |
- * @param source the source that corresponds to this HTML file |
- */ |
- void set source(Source source) { |
- this._source = source; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_scripts, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- if (_source == null) { |
- builder.append("{HTML file}"); |
- } else { |
- builder.append(_source.fullName); |
- } |
- } |
-} |
-/** |
- * Instances of the class `HtmlScriptElementImpl` implement an [HtmlScriptElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class HtmlScriptElementImpl extends ElementImpl implements HtmlScriptElement { |
- |
- /** |
- * An empty array of HTML script elements. |
- */ |
- static List<HtmlScriptElement> EMPTY_ARRAY = new List<HtmlScriptElement>(0); |
- |
- /** |
- * Initialize a newly created script element to have the specified tag name and offset. |
- * |
- * @param node the XML node from which this element is derived (not `null`) |
- */ |
- HtmlScriptElementImpl(XmlTagNode node) : super.con2(node.tag.lexeme, node.tag.offset); |
-} |
-/** |
- * Instances of the class `ImportElementImpl` implement an [ImportElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ImportElementImpl extends ElementImpl implements ImportElement { |
- |
- /** |
- * The offset of this directive, may be `-1` if synthetic. |
- */ |
- int _offset = -1; |
- |
- /** |
- * The offset of the character immediately following the last character of this node's URI, may be |
- * `-1` if synthetic. |
- */ |
- int _uriEnd = -1; |
- |
- /** |
- * The offset of the prefix of this import in the file that contains the this import directive, or |
- * `-1` if this import is synthetic. |
- */ |
- int _prefixOffset = 0; |
- |
- /** |
- * The URI that is specified by this directive. |
- */ |
- String _uri; |
- |
- /** |
- * The library that is imported into this library by this import directive. |
- */ |
- LibraryElement _importedLibrary; |
- |
- /** |
- * The combinators that were specified as part of the import directive in the order in which they |
- * were specified. |
- */ |
- List<NamespaceCombinator> _combinators = NamespaceCombinator.EMPTY_ARRAY; |
- |
- /** |
- * The prefix that was specified as part of the import directive, or `null` if there was no |
- * prefix specified. |
- */ |
- PrefixElement _prefix; |
- |
- /** |
- * Initialize a newly created import element. |
- */ |
- ImportElementImpl() : super.con1(null); |
- accept(ElementVisitor visitor) => visitor.visitImportElement(this); |
- List<NamespaceCombinator> get combinators => _combinators; |
- LibraryElement get importedLibrary => _importedLibrary; |
- ElementKind get kind => ElementKind.IMPORT; |
- PrefixElement get prefix => _prefix; |
- int get prefixOffset => _prefixOffset; |
- String get uri => _uri; |
- int get uriEnd => _uriEnd; |
- |
- /** |
- * Set the combinators that were specified as part of the import directive to the given array of |
- * combinators. |
- * |
- * @param combinators the combinators that were specified as part of the import directive |
- */ |
- void set combinators(List<NamespaceCombinator> combinators) { |
- this._combinators = combinators; |
- } |
- |
- /** |
- * Set the library that is imported into this library by this import directive to the given |
- * library. |
- * |
- * @param importedLibrary the library that is imported into this library |
- */ |
- void set importedLibrary(LibraryElement importedLibrary) { |
- this._importedLibrary = importedLibrary; |
- } |
- |
- /** |
- * Set the offset of this directive. |
- */ |
- void set offset(int offset) { |
- this._offset = offset; |
- } |
- |
- /** |
- * Set the prefix that was specified as part of the import directive to the given prefix. |
- * |
- * @param prefix the prefix that was specified as part of the import directive |
- */ |
- void set prefix(PrefixElement prefix) { |
- this._prefix = prefix; |
- } |
- |
- /** |
- * Set the offset of the prefix of this import in the file that contains the this import |
- * directive. |
- */ |
- void set prefixOffset(int prefixOffset) { |
- this._prefixOffset = prefixOffset; |
- } |
- |
- /** |
- * Set the URI that is specified by this directive. |
- * |
- * @param uri the URI that is specified by this directive. |
- */ |
- void set uri(String uri) { |
- this._uri = uri; |
- } |
- |
- /** |
- * Set the the offset of the character immediately following the last character of this node's |
- * URI. `-1` for synthetic import. |
- */ |
- void set uriEnd(int uriEnd) { |
- this._uriEnd = uriEnd; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_prefix, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append("import "); |
- ((_importedLibrary as LibraryElementImpl)).appendTo(builder); |
- } |
- String get identifier => "${((_importedLibrary as LibraryElementImpl)).identifier}@${_offset}"; |
-} |
-/** |
- * Instances of the class `LabelElementImpl` implement a `LabelElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class LabelElementImpl extends ElementImpl implements LabelElement { |
- |
- /** |
- * A flag indicating whether this label is associated with a `switch` statement. |
- */ |
- bool isOnSwitchStatement = false; |
- |
- /** |
- * A flag indicating whether this label is associated with a `switch` member (`case` |
- * or `default`). |
- */ |
- bool isOnSwitchMember = false; |
- |
- /** |
- * An empty array of label elements. |
- */ |
- static List<LabelElement> EMPTY_ARRAY = new List<LabelElement>(0); |
- |
- /** |
- * Initialize a newly created label element to have the given name. |
- * |
- * @param name the name of this element |
- * @param onSwitchStatement `true` if this label is associated with a `switch` |
- * statement |
- * @param onSwitchMember `true` if this label is associated with a `switch` member |
- */ |
- LabelElementImpl(Identifier name, bool onSwitchStatement, bool onSwitchMember) : super.con1(name) { |
- this.isOnSwitchStatement = onSwitchStatement; |
- this.isOnSwitchMember = onSwitchMember; |
- } |
- accept(ElementVisitor visitor) => visitor.visitLabelElement(this); |
- ExecutableElement get enclosingElement => super.enclosingElement as ExecutableElement; |
- ElementKind get kind => ElementKind.LABEL; |
-} |
-/** |
- * Instances of the class `LibraryElementImpl` implement a `LibraryElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class LibraryElementImpl extends ElementImpl implements LibraryElement { |
- |
- /** |
- * An empty array of library elements. |
- */ |
- static List<LibraryElement> EMPTY_ARRAY = new List<LibraryElement>(0); |
- |
- /** |
- * Determine if the given library is up to date with respect to the given time stamp. |
- * |
- * @param library the library to process |
- * @param timeStamp the time stamp to check against |
- * @param visitedLibraries the set of visited libraries |
- */ |
- static bool isUpToDate(LibraryElement library, int timeStamp, Set<LibraryElement> visitedLibraries) { |
- if (!visitedLibraries.contains(library)) { |
- javaSetAdd(visitedLibraries, library); |
- if (timeStamp < library.definingCompilationUnit.source.modificationStamp) { |
- return false; |
- } |
- for (CompilationUnitElement element in library.parts) { |
- if (timeStamp < element.source.modificationStamp) { |
- return false; |
- } |
- } |
- for (LibraryElement importedLibrary in library.importedLibraries) { |
- if (!isUpToDate(importedLibrary, timeStamp, visitedLibraries)) { |
- return false; |
- } |
- } |
- for (LibraryElement exportedLibrary in library.exportedLibraries) { |
- if (!isUpToDate(exportedLibrary, timeStamp, visitedLibraries)) { |
- return false; |
- } |
- } |
- } |
- return true; |
- } |
- |
- /** |
- * The analysis context in which this library is defined. |
- */ |
- AnalysisContext _context; |
- |
- /** |
- * The compilation unit that defines this library. |
- */ |
- CompilationUnitElement _definingCompilationUnit; |
- |
- /** |
- * The entry point for this library, or `null` if this library does not have an entry point. |
- */ |
- FunctionElement _entryPoint; |
- |
- /** |
- * An array containing specifications of all of the imports defined in this library. |
- */ |
- List<ImportElement> _imports = ImportElement.EMPTY_ARRAY; |
- |
- /** |
- * An array containing specifications of all of the exports defined in this library. |
- */ |
- List<ExportElement> _exports = ExportElement.EMPTY_ARRAY; |
- |
- /** |
- * An array containing all of the compilation units that are included in this library using a |
- * `part` directive. |
- */ |
- List<CompilationUnitElement> _parts = CompilationUnitElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * Initialize a newly created library element to have the given name. |
- * |
- * @param context the analysis context in which the library is defined |
- * @param name the name of this element |
- */ |
- LibraryElementImpl(AnalysisContext context, LibraryIdentifier name) : super.con1(name) { |
- this._context = context; |
- } |
- accept(ElementVisitor visitor) => visitor.visitLibraryElement(this); |
- bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && _definingCompilationUnit == ((object as LibraryElementImpl)).definingCompilationUnit; |
- ElementImpl getChild(String identifier) { |
- if (((_definingCompilationUnit as CompilationUnitElementImpl)).identifier == identifier) { |
- return _definingCompilationUnit as CompilationUnitElementImpl; |
- } |
- for (CompilationUnitElement part in _parts) { |
- if (((part as CompilationUnitElementImpl)).identifier == identifier) { |
- return part as CompilationUnitElementImpl; |
- } |
- } |
- for (ImportElement importElement in _imports) { |
- if (((importElement as ImportElementImpl)).identifier == identifier) { |
- return importElement as ImportElementImpl; |
- } |
- } |
- for (ExportElement exportElement in _exports) { |
- if (((exportElement as ExportElementImpl)).identifier == identifier) { |
- return exportElement as ExportElementImpl; |
- } |
- } |
- return null; |
- } |
- AnalysisContext get context => _context; |
- CompilationUnitElement get definingCompilationUnit => _definingCompilationUnit; |
- FunctionElement get entryPoint => _entryPoint; |
- List<LibraryElement> get exportedLibraries { |
- Set<LibraryElement> libraries = new Set<LibraryElement>(); |
- for (ExportElement element in _exports) { |
- LibraryElement library = element.exportedLibrary; |
- if (library != null) { |
- javaSetAdd(libraries, library); |
- } |
- } |
- return new List.from(libraries); |
- } |
- List<ExportElement> get exports => _exports; |
- List<LibraryElement> get importedLibraries { |
- Set<LibraryElement> libraries = new Set<LibraryElement>(); |
- for (ImportElement element in _imports) { |
- LibraryElement library = element.importedLibrary; |
- if (library != null) { |
- javaSetAdd(libraries, library); |
- } |
- } |
- return new List.from(libraries); |
- } |
- List<ImportElement> get imports => _imports; |
- ElementKind get kind => ElementKind.LIBRARY; |
- LibraryElement get library => this; |
- List<CompilationUnitElement> get parts => _parts; |
- List<PrefixElement> get prefixes { |
- Set<PrefixElement> prefixes = new Set<PrefixElement>(); |
- for (ImportElement element in _imports) { |
- PrefixElement prefix = element.prefix; |
- if (prefix != null) { |
- javaSetAdd(prefixes, prefix); |
- } |
- } |
- return new List.from(prefixes); |
- } |
- Source get source { |
- if (_definingCompilationUnit == null) { |
- return null; |
- } |
- return _definingCompilationUnit.source; |
- } |
- ClassElement getType(String className) { |
- ClassElement type = _definingCompilationUnit.getType(className); |
- if (type != null) { |
- return type; |
- } |
- for (CompilationUnitElement part in _parts) { |
- type = part.getType(className); |
- if (type != null) { |
- return type; |
- } |
- } |
- return null; |
- } |
- int get hashCode => _definingCompilationUnit.hashCode; |
- bool get isBrowserApplication => _entryPoint != null && isOrImportsBrowserLibrary; |
- bool get isDartCore => name == "dart.core"; |
- bool get isInSdk => name.startsWith("dart."); |
- bool isUpToDate2(int timeStamp) { |
- Set<LibraryElement> visitedLibraries = new Set(); |
- return isUpToDate(this, timeStamp, visitedLibraries); |
- } |
- |
- /** |
- * Set the compilation unit that defines this library to the given compilation unit. |
- * |
- * @param definingCompilationUnit the compilation unit that defines this library |
- */ |
- void set definingCompilationUnit(CompilationUnitElement definingCompilationUnit) { |
- ((definingCompilationUnit as CompilationUnitElementImpl)).enclosingElement = this; |
- this._definingCompilationUnit = definingCompilationUnit; |
- } |
- |
- /** |
- * Set the entry point for this library to the given function. |
- * |
- * @param entryPoint the entry point for this library |
- */ |
- void set entryPoint(FunctionElement entryPoint) { |
- this._entryPoint = entryPoint; |
- } |
- |
- /** |
- * Set the specifications of all of the exports defined in this library to the given array. |
- * |
- * @param exports the specifications of all of the exports defined in this library |
- */ |
- void set exports(List<ExportElement> exports) { |
- for (ExportElement exportElement in exports) { |
- ((exportElement as ExportElementImpl)).enclosingElement = this; |
- } |
- this._exports = exports; |
- } |
- |
- /** |
- * Set the specifications of all of the imports defined in this library to the given array. |
- * |
- * @param imports the specifications of all of the imports defined in this library |
- */ |
- void set imports(List<ImportElement> imports) { |
- for (ImportElement importElement in imports) { |
- ((importElement as ImportElementImpl)).enclosingElement = this; |
- PrefixElementImpl prefix = importElement.prefix as PrefixElementImpl; |
- if (prefix != null) { |
- prefix.enclosingElement = this; |
- } |
- } |
- this._imports = imports; |
- } |
- |
- /** |
- * Set the compilation units that are included in this library using a `part` directive. |
- * |
- * @param parts the compilation units that are included in this library using a `part` |
- * directive |
- */ |
- void set parts(List<CompilationUnitElement> parts) { |
- for (CompilationUnitElement compilationUnit in parts) { |
- ((compilationUnit as CompilationUnitElementImpl)).enclosingElement = this; |
- } |
- this._parts = parts; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_definingCompilationUnit, visitor); |
- safelyVisitChildren(_exports, visitor); |
- safelyVisitChildren(_imports, visitor); |
- safelyVisitChildren(_parts, visitor); |
- } |
- String get identifier => _definingCompilationUnit.source.encoding; |
- |
- /** |
- * Answer `true` if the receiver directly or indirectly imports the dart:html libraries. |
- * |
- * @return `true` if the receiver directly or indirectly imports the dart:html libraries |
- */ |
- bool get isOrImportsBrowserLibrary { |
- List<LibraryElement> visited = new List<LibraryElement>(); |
- Source htmlLibSource = _context.sourceFactory.forUri(DartSdk.DART_HTML); |
- visited.add(this); |
- for (int index = 0; index < visited.length; index++) { |
- LibraryElement library = visited[index]; |
- Source source = library.definingCompilationUnit.source; |
- if (source == htmlLibSource) { |
- return true; |
- } |
- for (LibraryElement importedLibrary in library.importedLibraries) { |
- if (!visited.contains(importedLibrary)) { |
- visited.add(importedLibrary); |
- } |
- } |
- for (LibraryElement exportedLibrary in library.exportedLibraries) { |
- if (!visited.contains(exportedLibrary)) { |
- visited.add(exportedLibrary); |
- } |
- } |
- } |
- return false; |
- } |
-} |
-/** |
- * Instances of the class `LocalVariableElementImpl` implement a `LocalVariableElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class LocalVariableElementImpl extends VariableElementImpl implements LocalVariableElement { |
- |
- /** |
- * Is `true` if this variable is potentially mutated somewhere in its scope. |
- */ |
- bool _isPotentiallyMutated2 = false; |
- |
- /** |
- * The offset to the beginning of the visible range for this element. |
- */ |
- int _visibleRangeOffset = 0; |
- |
- /** |
- * The length of the visible range for this element, or `-1` if this element does not have a |
- * visible range. |
- */ |
- int _visibleRangeLength = -1; |
- |
- /** |
- * An empty array of field elements. |
- */ |
- static List<LocalVariableElement> EMPTY_ARRAY = new List<LocalVariableElement>(0); |
- |
- /** |
- * Initialize a newly created local variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- LocalVariableElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitLocalVariableElement(this); |
- ElementKind get kind => ElementKind.LOCAL_VARIABLE; |
- SourceRange get visibleRange { |
- if (_visibleRangeLength < 0) { |
- return null; |
- } |
- return new SourceRange(_visibleRangeOffset, _visibleRangeLength); |
- } |
- bool get isPotentiallyMutated => _isPotentiallyMutated2; |
- |
- /** |
- * Specifies that this variable is potentially mutated somewhere in its scope. |
- */ |
- void markPotentiallyMutated() { |
- _isPotentiallyMutated2 = true; |
- } |
- |
- /** |
- * Set the visible range for this element to the range starting at the given offset with the given |
- * length. |
- * |
- * @param offset the offset to the beginning of the visible range for this element |
- * @param length the length of the visible range for this element, or `-1` if this element |
- * does not have a visible range |
- */ |
- void setVisibleRange(int offset, int length) { |
- _visibleRangeOffset = offset; |
- _visibleRangeLength = length; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(type); |
- builder.append(" "); |
- builder.append(displayName); |
- } |
- String get identifier => "${super.identifier}@${nameOffset}"; |
-} |
-/** |
- * Instances of the class `MethodElementImpl` implement a `MethodElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
- |
- /** |
- * An empty array of method elements. |
- */ |
- static List<MethodElement> EMPTY_ARRAY = new List<MethodElement>(0); |
- |
- /** |
- * Initialize a newly created method element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- MethodElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created method element to have the given name. |
- * |
- * @param name the name of this element |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- MethodElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset); |
- accept(ElementVisitor visitor) => visitor.visitMethodElement(this); |
- ClassElement get enclosingElement => super.enclosingElement as ClassElement; |
- ElementKind get kind => ElementKind.METHOD; |
- String get name { |
- String name = super.name; |
- if (isOperator && name == "-") { |
- if (parameters.length == 0) { |
- return "unary-"; |
- } |
- } |
- return super.name; |
- } |
- bool get isAbstract => hasModifier(Modifier.ABSTRACT); |
- bool get isOperator { |
- String name = displayName; |
- if (name.isEmpty) { |
- return false; |
- } |
- int first = name.codeUnitAt(0); |
- return !((0x61 <= first && first <= 0x7A) || (0x41 <= first && first <= 0x5A) || first == 0x5F || first == 0x24); |
- } |
- bool get isStatic => hasModifier(Modifier.STATIC); |
- |
- /** |
- * Set whether this method is abstract to correspond to the given value. |
- * |
- * @param isAbstract `true` if the method is abstract |
- */ |
- void set abstract(bool isAbstract) { |
- setModifier(Modifier.ABSTRACT, isAbstract); |
- } |
- |
- /** |
- * Set whether this method is static to correspond to the given value. |
- * |
- * @param isStatic `true` if the method is static |
- */ |
- void set static(bool isStatic) { |
- setModifier(Modifier.STATIC, isStatic); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(enclosingElement.displayName); |
- builder.append("."); |
- builder.append(displayName); |
- super.appendTo(builder); |
- } |
-} |
-/** |
- * The enumeration `Modifier` defines constants for all of the modifiers defined by the Dart |
- * language and for a few additional flags that are useful. |
- * |
- * @coverage dart.engine.element |
- */ |
-class Modifier extends Enum<Modifier> { |
- static final Modifier ABSTRACT = new Modifier('ABSTRACT', 0); |
- static final Modifier CONST = new Modifier('CONST', 1); |
- static final Modifier FACTORY = new Modifier('FACTORY', 2); |
- static final Modifier FINAL = new Modifier('FINAL', 3); |
- static final Modifier GETTER = new Modifier('GETTER', 4); |
- static final Modifier MIXIN = new Modifier('MIXIN', 5); |
- static final Modifier REFERENCES_SUPER = new Modifier('REFERENCES_SUPER', 6); |
- static final Modifier SETTER = new Modifier('SETTER', 7); |
- static final Modifier STATIC = new Modifier('STATIC', 8); |
- static final Modifier SYNTHETIC = new Modifier('SYNTHETIC', 9); |
- static final Modifier TYPEDEF = new Modifier('TYPEDEF', 10); |
- static final List<Modifier> values = [ |
- ABSTRACT, |
- CONST, |
- FACTORY, |
- FINAL, |
- GETTER, |
- MIXIN, |
- REFERENCES_SUPER, |
- SETTER, |
- STATIC, |
- SYNTHETIC, |
- TYPEDEF]; |
- Modifier(String name, int ordinal) : super(name, ordinal); |
-} |
-/** |
- * Instances of the class `MultiplyDefinedElementImpl` represent a collection of elements that |
- * have the same name within the same scope. |
- * |
- * @coverage dart.engine.element |
- */ |
-class MultiplyDefinedElementImpl implements MultiplyDefinedElement { |
- |
- /** |
- * Return an element that represents the given conflicting elements. |
- * |
- * @param context the analysis context in which the multiply defined elements are defined |
- * @param firstElement the first element that conflicts |
- * @param secondElement the second element that conflicts |
- */ |
- static Element fromElements(AnalysisContext context, Element firstElement, Element secondElement) { |
- List<Element> conflictingElements = computeConflictingElements(firstElement, secondElement); |
- int length = conflictingElements.length; |
- if (length == 0) { |
- return null; |
- } else if (length == 1) { |
- return conflictingElements[0]; |
- } |
- return new MultiplyDefinedElementImpl(context, conflictingElements); |
- } |
- |
- /** |
- * Add the given element to the list of elements. If the element is a multiply-defined element, |
- * add all of the conflicting elements that it represents. |
- * |
- * @param elements the list to which the element(s) are to be added |
- * @param element the element(s) to be added |
- */ |
- static void add(Set<Element> elements, Element element) { |
- if (element is MultiplyDefinedElementImpl) { |
- for (Element conflictingElement in ((element as MultiplyDefinedElementImpl))._conflictingElements) { |
- javaSetAdd(elements, conflictingElement); |
- } |
- } else { |
- javaSetAdd(elements, element); |
- } |
- } |
- |
- /** |
- * Use the given elements to construct an array of conflicting elements. If either of the given |
- * elements are multiply-defined elements then the conflicting elements they represent will be |
- * included in the array. Otherwise, the element itself will be included. |
- * |
- * @param firstElement the first element to be included |
- * @param secondElement the second element to be included |
- * @return an array containing all of the conflicting elements |
- */ |
- static List<Element> computeConflictingElements(Element firstElement, Element secondElement) { |
- Set<Element> elements = new Set<Element>(); |
- add(elements, firstElement); |
- add(elements, secondElement); |
- return new List.from(elements); |
- } |
- |
- /** |
- * The analysis context in which the multiply defined elements are defined. |
- */ |
- AnalysisContext _context; |
- |
- /** |
- * The name of the conflicting elements. |
- */ |
- String _name; |
- |
- /** |
- * A list containing all of the elements that conflict. |
- */ |
- List<Element> _conflictingElements; |
- |
- /** |
- * Initialize a newly created element to represent a list of conflicting elements. |
- * |
- * @param context the analysis context in which the multiply defined elements are defined |
- * @param conflictingElements the elements that conflict |
- */ |
- MultiplyDefinedElementImpl(AnalysisContext context, List<Element> conflictingElements) { |
- this._context = context; |
- _name = conflictingElements[0].name; |
- this._conflictingElements = conflictingElements; |
- } |
- accept(ElementVisitor visitor) => visitor.visitMultiplyDefinedElement(this); |
- String computeDocumentationComment() => null; |
- Element getAncestor(Type elementClass) => null; |
- List<Element> get conflictingElements => _conflictingElements; |
- AnalysisContext get context => _context; |
- String get displayName => _name; |
- Element get enclosingElement => null; |
- ElementKind get kind => ElementKind.ERROR; |
- LibraryElement get library => null; |
- ElementLocation get location => null; |
- List<ElementAnnotation> get metadata => ElementAnnotationImpl.EMPTY_ARRAY; |
- String get name => _name; |
- int get nameOffset => -1; |
- Source get source => null; |
- Type2 get type => DynamicTypeImpl.instance; |
- bool isAccessibleIn(LibraryElement library) { |
- for (Element element in _conflictingElements) { |
- if (element.isAccessibleIn(library)) { |
- return true; |
- } |
- } |
- return false; |
- } |
- bool get isSynthetic => true; |
- String toString() { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append("["); |
- int count = _conflictingElements.length; |
- for (int i = 0; i < count; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_conflictingElements[i] as ElementImpl)).appendTo(builder); |
- } |
- builder.append("]"); |
- return builder.toString(); |
- } |
- void visitChildren(ElementVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ParameterElementImpl` implement a `ParameterElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ParameterElementImpl extends VariableElementImpl implements ParameterElement { |
- |
- /** |
- * Is `true` if this variable is potentially mutated somewhere in its scope. |
- */ |
- bool _isPotentiallyMutated3 = false; |
- |
- /** |
- * An array containing all of the parameters defined by this parameter element. There will only be |
- * parameters if this parameter is a function typed parameter. |
- */ |
- List<ParameterElement> _parameters = ParameterElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * The kind of this parameter. |
- */ |
- ParameterKind _parameterKind; |
- |
- /** |
- * The offset to the beginning of the default value range for this element. |
- */ |
- int _defaultValueRangeOffset = 0; |
- |
- /** |
- * The length of the default value range for this element, or `-1` if this element does not |
- * have a default value. |
- */ |
- int _defaultValueRangeLength = -1; |
- |
- /** |
- * The offset to the beginning of the visible range for this element. |
- */ |
- int _visibleRangeOffset = 0; |
- |
- /** |
- * The length of the visible range for this element, or `-1` if this element does not have a |
- * visible range. |
- */ |
- int _visibleRangeLength = -1; |
- |
- /** |
- * An empty array of field elements. |
- */ |
- static List<ParameterElement> EMPTY_ARRAY = new List<ParameterElement>(0); |
- |
- /** |
- * Initialize a newly created parameter element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- ParameterElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created parameter element to have the given name. |
- * |
- * @param name the name of this element |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- ParameterElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset); |
- accept(ElementVisitor visitor) => visitor.visitParameterElement(this); |
- SourceRange get defaultValueRange { |
- if (_defaultValueRangeLength < 0) { |
- return null; |
- } |
- return new SourceRange(_defaultValueRangeOffset, _defaultValueRangeLength); |
- } |
- ElementKind get kind => ElementKind.PARAMETER; |
- ParameterKind get parameterKind => _parameterKind; |
- List<ParameterElement> get parameters => _parameters; |
- SourceRange get visibleRange { |
- if (_visibleRangeLength < 0) { |
- return null; |
- } |
- return new SourceRange(_visibleRangeOffset, _visibleRangeLength); |
- } |
- bool get isInitializingFormal => false; |
- bool get isPotentiallyMutated => _isPotentiallyMutated3; |
- |
- /** |
- * Specifies that this variable is potentially mutated somewhere in its scope. |
- */ |
- void markPotentiallyMutated() { |
- _isPotentiallyMutated3 = true; |
- } |
- |
- /** |
- * Set the range of the default value for this parameter to the range starting at the given offset |
- * with the given length. |
- * |
- * @param offset the offset to the beginning of the default value range for this element |
- * @param length the length of the default value range for this element, or `-1` if this |
- * element does not have a default value |
- */ |
- void setDefaultValueRange(int offset, int length) { |
- _defaultValueRangeOffset = offset; |
- _defaultValueRangeLength = length; |
- } |
- |
- /** |
- * Set the kind of this parameter to the given kind. |
- * |
- * @param parameterKind the new kind of this parameter |
- */ |
- void set parameterKind(ParameterKind parameterKind) { |
- this._parameterKind = parameterKind; |
- } |
- |
- /** |
- * Set the parameters defined by this executable element to the given parameters. |
- * |
- * @param parameters the parameters defined by this executable element |
- */ |
- void set parameters(List<ParameterElement> parameters) { |
- for (ParameterElement parameter in parameters) { |
- ((parameter as ParameterElementImpl)).enclosingElement = this; |
- } |
- this._parameters = parameters; |
- } |
- |
- /** |
- * Set the visible range for this element to the range starting at the given offset with the given |
- * length. |
- * |
- * @param offset the offset to the beginning of the visible range for this element |
- * @param length the length of the visible range for this element, or `-1` if this element |
- * does not have a visible range |
- */ |
- void setVisibleRange(int offset, int length) { |
- _visibleRangeOffset = offset; |
- _visibleRangeLength = length; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(_parameters, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- String left = ""; |
- String right = ""; |
- while (true) { |
- if (parameterKind == ParameterKind.NAMED) { |
- left = "{"; |
- right = "}"; |
- } else if (parameterKind == ParameterKind.POSITIONAL) { |
- left = "["; |
- right = "]"; |
- } |
- break; |
- } |
- builder.append(left); |
- builder.append(type); |
- builder.append(" "); |
- builder.append(displayName); |
- builder.append(right); |
- } |
-} |
-/** |
- * Instances of the class `PrefixElementImpl` implement a `PrefixElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class PrefixElementImpl extends ElementImpl implements PrefixElement { |
- |
- /** |
- * An array containing all of the libraries that are imported using this prefix. |
- */ |
- List<LibraryElement> _importedLibraries = LibraryElementImpl.EMPTY_ARRAY; |
- |
- /** |
- * An empty array of prefix elements. |
- */ |
- static List<PrefixElement> EMPTY_ARRAY = new List<PrefixElement>(0); |
- |
- /** |
- * Initialize a newly created prefix element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- PrefixElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitPrefixElement(this); |
- LibraryElement get enclosingElement => super.enclosingElement as LibraryElement; |
- List<LibraryElement> get importedLibraries => _importedLibraries; |
- ElementKind get kind => ElementKind.PREFIX; |
- |
- /** |
- * Set the libraries that are imported using this prefix to the given libraries. |
- * |
- * @param importedLibraries the libraries that are imported using this prefix |
- */ |
- void set importedLibraries(List<LibraryElement> importedLibraries) { |
- for (LibraryElement library in importedLibraries) { |
- ((library as LibraryElementImpl)).enclosingElement = this; |
- } |
- this._importedLibraries = importedLibraries; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append("as "); |
- super.appendTo(builder); |
- } |
- String get identifier => "_${super.identifier}"; |
-} |
-/** |
- * Instances of the class `PropertyAccessorElementImpl` implement a |
- * `PropertyAccessorElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class PropertyAccessorElementImpl extends ExecutableElementImpl implements PropertyAccessorElement { |
- |
- /** |
- * The variable associated with this accessor. |
- */ |
- PropertyInducingElement _variable; |
- |
- /** |
- * An empty array of property accessor elements. |
- */ |
- static List<PropertyAccessorElement> EMPTY_ARRAY = new List<PropertyAccessorElement>(0); |
- |
- /** |
- * Initialize a newly created property accessor element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- PropertyAccessorElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created synthetic property accessor element to be associated with the given |
- * variable. |
- * |
- * @param variable the variable with which this access is associated |
- */ |
- PropertyAccessorElementImpl.con2(PropertyInducingElementImpl variable) : super.con2(variable.name, variable.nameOffset) { |
- this._variable = variable; |
- synthetic = true; |
- } |
- accept(ElementVisitor visitor) => visitor.visitPropertyAccessorElement(this); |
- bool operator ==(Object object) => super == object && identical(isGetter, ((object as PropertyAccessorElement)).isGetter); |
- PropertyAccessorElement get correspondingGetter { |
- if (isGetter || _variable == null) { |
- return null; |
- } |
- return _variable.getter; |
- } |
- PropertyAccessorElement get correspondingSetter { |
- if (isSetter || _variable == null) { |
- return null; |
- } |
- return _variable.setter; |
- } |
- ElementKind get kind { |
- if (isGetter) { |
- return ElementKind.GETTER; |
- } |
- return ElementKind.SETTER; |
- } |
- String get name { |
- if (isSetter) { |
- return "${super.name}="; |
- } |
- return super.name; |
- } |
- PropertyInducingElement get variable => _variable; |
- bool get isAbstract => hasModifier(Modifier.ABSTRACT); |
- bool get isGetter => hasModifier(Modifier.GETTER); |
- bool get isSetter => hasModifier(Modifier.SETTER); |
- bool get isStatic => hasModifier(Modifier.STATIC); |
- |
- /** |
- * Set whether this accessor is abstract to correspond to the given value. |
- * |
- * @param isAbstract `true` if the accessor is abstract |
- */ |
- void set abstract(bool isAbstract) { |
- setModifier(Modifier.ABSTRACT, isAbstract); |
- } |
- |
- /** |
- * Set whether this accessor is a getter to correspond to the given value. |
- * |
- * @param isGetter `true` if the accessor is a getter |
- */ |
- void set getter(bool isGetter) { |
- setModifier(Modifier.GETTER, isGetter); |
- } |
- |
- /** |
- * Set whether this accessor is a setter to correspond to the given value. |
- * |
- * @param isSetter `true` if the accessor is a setter |
- */ |
- void set setter(bool isSetter) { |
- setModifier(Modifier.SETTER, isSetter); |
- } |
- |
- /** |
- * Set whether this accessor is static to correspond to the given value. |
- * |
- * @param isStatic `true` if the accessor is static |
- */ |
- void set static(bool isStatic) { |
- setModifier(Modifier.STATIC, isStatic); |
- } |
- |
- /** |
- * Set the variable associated with this accessor to the given variable. |
- * |
- * @param variable the variable associated with this accessor |
- */ |
- void set variable(PropertyInducingElement variable) { |
- this._variable = variable; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(isGetter ? "get " : "set "); |
- builder.append(variable.displayName); |
- super.appendTo(builder); |
- } |
-} |
-/** |
- * Instances of the class `PropertyInducingElementImpl` implement a |
- * `PropertyInducingElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class PropertyInducingElementImpl extends VariableElementImpl implements PropertyInducingElement { |
- |
- /** |
- * The getter associated with this element. |
- */ |
- PropertyAccessorElement _getter; |
- |
- /** |
- * The setter associated with this element, or `null` if the element is effectively |
- * `final` and therefore does not have a setter associated with it. |
- */ |
- PropertyAccessorElement _setter; |
- |
- /** |
- * An empty array of elements. |
- */ |
- static List<PropertyInducingElement> EMPTY_ARRAY = new List<PropertyInducingElement>(0); |
- |
- /** |
- * Initialize a newly created element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- PropertyInducingElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created synthetic element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- PropertyInducingElementImpl.con2(String name) : super.con2(name, -1) { |
- synthetic = true; |
- } |
- PropertyAccessorElement get getter => _getter; |
- PropertyAccessorElement get setter => _setter; |
- |
- /** |
- * Set the getter associated with this element to the given accessor. |
- * |
- * @param getter the getter associated with this element |
- */ |
- void set getter(PropertyAccessorElement getter) { |
- this._getter = getter; |
- } |
- |
- /** |
- * Set the setter associated with this element to the given accessor. |
- * |
- * @param setter the setter associated with this element |
- */ |
- void set setter(PropertyAccessorElement setter) { |
- this._setter = setter; |
- } |
-} |
-/** |
- * Instances of the class `ShowElementCombinatorImpl` implement a |
- * [ShowElementCombinator]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class ShowElementCombinatorImpl implements ShowElementCombinator { |
- |
- /** |
- * The names that are to be made visible in the importing library if they are defined in the |
- * imported library. |
- */ |
- List<String> _shownNames = StringUtilities.EMPTY_ARRAY; |
- |
- /** |
- * The offset of the character immediately following the last character of this node. |
- */ |
- int _end = -1; |
- |
- /** |
- * The offset of the 'show' keyword of this element. |
- */ |
- int _offset = 0; |
- int get end => _end; |
- int get offset => _offset; |
- List<String> get shownNames => _shownNames; |
- |
- /** |
- * Set the the offset of the character immediately following the last character of this node. |
- */ |
- void set end(int endOffset) { |
- this._end = endOffset; |
- } |
- |
- /** |
- * Sets the offset of the 'show' keyword of this directive. |
- */ |
- void set offset(int offset) { |
- this._offset = offset; |
- } |
- |
- /** |
- * Set the names that are to be made visible in the importing library if they are defined in the |
- * imported library to the given names. |
- * |
- * @param shownNames the names that are to be made visible in the importing library |
- */ |
- void set shownNames(List<String> shownNames) { |
- this._shownNames = shownNames; |
- } |
- String toString() { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append("show "); |
- int count = _shownNames.length; |
- for (int i = 0; i < count; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- builder.append(_shownNames[i]); |
- } |
- return builder.toString(); |
- } |
-} |
-/** |
- * Instances of the class `TopLevelVariableElementImpl` implement a |
- * `TopLevelVariableElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-class TopLevelVariableElementImpl extends PropertyInducingElementImpl implements TopLevelVariableElement { |
- |
- /** |
- * An empty array of top-level variable elements. |
- */ |
- static List<TopLevelVariableElement> EMPTY_ARRAY = new List<TopLevelVariableElement>(0); |
- |
- /** |
- * Initialize a newly created top-level variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- TopLevelVariableElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created synthetic top-level variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- TopLevelVariableElementImpl.con2(String name) : super.con2(name); |
- accept(ElementVisitor visitor) => visitor.visitTopLevelVariableElement(this); |
- ElementKind get kind => ElementKind.TOP_LEVEL_VARIABLE; |
- bool get isStatic => true; |
-} |
-/** |
- * Instances of the class `TypeParameterElementImpl` implement a [TypeParameterElement]. |
- * |
- * @coverage dart.engine.element |
- */ |
-class TypeParameterElementImpl extends ElementImpl implements TypeParameterElement { |
- |
- /** |
- * The type defined by this type parameter. |
- */ |
- TypeParameterType _type; |
- |
- /** |
- * The type representing the bound associated with this parameter, or `null` if this |
- * parameter does not have an explicit bound. |
- */ |
- Type2 _bound; |
- |
- /** |
- * An empty array of type parameter elements. |
- */ |
- static List<TypeParameterElement> EMPTY_ARRAY = new List<TypeParameterElement>(0); |
- |
- /** |
- * Initialize a newly created type parameter element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- TypeParameterElementImpl(Identifier name) : super.con1(name); |
- accept(ElementVisitor visitor) => visitor.visitTypeParameterElement(this); |
- Type2 get bound => _bound; |
- ElementKind get kind => ElementKind.TYPE_PARAMETER; |
- TypeParameterType get type => _type; |
- |
- /** |
- * Set the type representing the bound associated with this parameter to the given type. |
- * |
- * @param bound the type representing the bound associated with this parameter |
- */ |
- void set bound(Type2 bound) { |
- this._bound = bound; |
- } |
- |
- /** |
- * Set the type defined by this type parameter to the given type |
- * |
- * @param type the type defined by this type parameter |
- */ |
- void set type(TypeParameterType type) { |
- this._type = type; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(displayName); |
- if (_bound != null) { |
- builder.append(" extends "); |
- builder.append(_bound); |
- } |
- } |
-} |
-/** |
- * Instances of the class `VariableElementImpl` implement a `VariableElement`. |
- * |
- * @coverage dart.engine.element |
- */ |
-abstract class VariableElementImpl extends ElementImpl implements VariableElement { |
- |
- /** |
- * The declared type of this variable. |
- */ |
- Type2 _type; |
- |
- /** |
- * A synthetic function representing this variable's initializer, or `null` if this variable |
- * does not have an initializer. |
- */ |
- FunctionElement _initializer; |
- |
- /** |
- * An empty array of variable elements. |
- */ |
- static List<VariableElement> EMPTY_ARRAY = new List<VariableElement>(0); |
- |
- /** |
- * Initialize a newly created variable element to have the given name. |
- * |
- * @param name the name of this element |
- */ |
- VariableElementImpl.con1(Identifier name) : super.con1(name); |
- |
- /** |
- * Initialize a newly created variable element to have the given name. |
- * |
- * @param name the name of this element |
- * @param nameOffset the offset of the name of this element in the file that contains the |
- * declaration of this element |
- */ |
- VariableElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset); |
- |
- /** |
- * Return the result of evaluating this variable's initializer as a compile-time constant |
- * expression, or `null` if this variable is not a 'const' variable or does not have an |
- * initializer. |
- * |
- * @return the result of evaluating this variable's initializer |
- */ |
- EvaluationResultImpl get evaluationResult => null; |
- FunctionElement get initializer => _initializer; |
- Type2 get type => _type; |
- bool get isConst => hasModifier(Modifier.CONST); |
- bool get isFinal => hasModifier(Modifier.FINAL); |
- |
- /** |
- * Return `true` if this variable is potentially mutated somewhere in its scope. This |
- * information is only available for local variables (including parameters). |
- * |
- * @return `true` if this variable is potentially mutated somewhere in its scope |
- */ |
- bool get isPotentiallyMutated => false; |
- |
- /** |
- * Set whether this variable is const to correspond to the given value. |
- * |
- * @param isConst `true` if the variable is const |
- */ |
- void set const3(bool isConst) { |
- setModifier(Modifier.CONST, isConst); |
- } |
- |
- /** |
- * Set the result of evaluating this variable's initializer as a compile-time constant expression |
- * to the given result. |
- * |
- * @param result the result of evaluating this variable's initializer |
- */ |
- void set evaluationResult(EvaluationResultImpl result) { |
- throw new IllegalStateException("Invalid attempt to set a compile-time constant result"); |
- } |
- |
- /** |
- * Set whether this variable is final to correspond to the given value. |
- * |
- * @param isFinal `true` if the variable is final |
- */ |
- void set final2(bool isFinal) { |
- setModifier(Modifier.FINAL, isFinal); |
- } |
- |
- /** |
- * Set the function representing this variable's initializer to the given function. |
- * |
- * @param initializer the function representing this variable's initializer |
- */ |
- void set initializer(FunctionElement initializer) { |
- if (initializer != null) { |
- ((initializer as FunctionElementImpl)).enclosingElement = this; |
- } |
- this._initializer = initializer; |
- } |
- |
- /** |
- * Set the declared type of this variable to the given type. |
- * |
- * @param type the declared type of this variable |
- */ |
- void set type(Type2 type) { |
- this._type = type; |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_initializer, visitor); |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(type); |
- builder.append(" "); |
- builder.append(displayName); |
- } |
-} |
-/** |
- * Instances of the class `ConstructorMember` represent a constructor element defined in a |
- * parameterized type where the values of the type parameters are known. |
- */ |
-class ConstructorMember extends ExecutableMember implements ConstructorElement { |
- |
- /** |
- * If the given constructor's type is different when any type parameters from the defining type's |
- * declaration are replaced with the actual type arguments from the defining type, create a |
- * constructor member representing the given constructor. Return the member that was created, or |
- * the base constructor if no member was created. |
- * |
- * @param baseConstructor the base constructor for which a member might be created |
- * @param definingType the type defining the parameters and arguments to be used in the |
- * substitution |
- * @return the constructor element that will return the correctly substituted types |
- */ |
- static ConstructorElement from(ConstructorElement baseConstructor, InterfaceType definingType) { |
- if (baseConstructor == null || definingType.typeArguments.length == 0) { |
- return baseConstructor; |
- } |
- FunctionType baseType = baseConstructor.type; |
- if (baseType == null) { |
- return baseConstructor; |
- } |
- List<Type2> argumentTypes = definingType.typeArguments; |
- List<Type2> parameterTypes = definingType.element.type.typeArguments; |
- FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes); |
- if (baseType == substitutedType) { |
- return baseConstructor; |
- } |
- return new ConstructorMember(baseConstructor, definingType); |
- } |
- |
- /** |
- * Initialize a newly created element to represent a constructor of the given parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- ConstructorMember(ConstructorElement baseElement, InterfaceType definingType) : super(baseElement, definingType); |
- accept(ElementVisitor visitor) => visitor.visitConstructorElement(this); |
- ConstructorElement get baseElement => super.baseElement as ConstructorElement; |
- ClassElement get enclosingElement => baseElement.enclosingElement; |
- ConstructorElement get redirectedConstructor => from(baseElement.redirectedConstructor, definingType); |
- bool get isConst => baseElement.isConst; |
- bool get isDefaultConstructor => baseElement.isDefaultConstructor; |
- bool get isFactory => baseElement.isFactory; |
- String toString() { |
- ConstructorElement baseElement = this.baseElement; |
- List<ParameterElement> parameters = this.parameters; |
- FunctionType type = this.type; |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append(baseElement.enclosingElement.displayName); |
- String name = displayName; |
- if (name != null && !name.isEmpty) { |
- builder.append("."); |
- builder.append(name); |
- } |
- builder.append("("); |
- int parameterCount = parameters.length; |
- for (int i = 0; i < parameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- builder.append(parameters[i]).toString(); |
- } |
- builder.append(")"); |
- if (type != null) { |
- builder.append(" -> "); |
- builder.append(type.returnType); |
- } |
- return builder.toString(); |
- } |
- InterfaceType get definingType => super.definingType as InterfaceType; |
-} |
-/** |
- * The abstract class `ExecutableMember` defines the behavior common to members that represent |
- * an executable element defined in a parameterized type where the values of the type parameters are |
- * known. |
- */ |
-abstract class ExecutableMember extends Member implements ExecutableElement { |
- |
- /** |
- * Initialize a newly created element to represent an executable element of the given |
- * parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- ExecutableMember(ExecutableElement baseElement, InterfaceType definingType) : super(baseElement, definingType); |
- ExecutableElement get baseElement => super.baseElement as ExecutableElement; |
- List<FunctionElement> get functions { |
- throw new UnsupportedOperationException(); |
- } |
- List<LabelElement> get labels => baseElement.labels; |
- List<LocalVariableElement> get localVariables { |
- throw new UnsupportedOperationException(); |
- } |
- List<ParameterElement> get parameters { |
- List<ParameterElement> baseParameters = baseElement.parameters; |
- int parameterCount = baseParameters.length; |
- if (parameterCount == 0) { |
- return baseParameters; |
- } |
- List<ParameterElement> parameterizedParameters = new List<ParameterElement>(parameterCount); |
- for (int i = 0; i < parameterCount; i++) { |
- parameterizedParameters[i] = ParameterMember.from(baseParameters[i], definingType); |
- } |
- return parameterizedParameters; |
- } |
- Type2 get returnType => substituteFor(baseElement.returnType); |
- FunctionType get type => substituteFor(baseElement.type); |
- bool get isOperator => baseElement.isOperator; |
- bool get isStatic => baseElement.isStatic; |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(baseElement.functions, visitor); |
- safelyVisitChildren(labels, visitor); |
- safelyVisitChildren(baseElement.localVariables, visitor); |
- safelyVisitChildren(parameters, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FieldMember` represent a field element defined in a parameterized |
- * type where the values of the type parameters are known. |
- */ |
-class FieldMember extends VariableMember implements FieldElement { |
- |
- /** |
- * If the given field's type is different when any type parameters from the defining type's |
- * declaration are replaced with the actual type arguments from the defining type, create a field |
- * member representing the given field. Return the member that was created, or the base field if |
- * no member was created. |
- * |
- * @param baseField the base field for which a member might be created |
- * @param definingType the type defining the parameters and arguments to be used in the |
- * substitution |
- * @return the field element that will return the correctly substituted types |
- */ |
- static FieldElement from(FieldElement baseField, InterfaceType definingType) { |
- if (baseField == null || definingType.typeArguments.length == 0) { |
- return baseField; |
- } |
- Type2 baseType = baseField.type; |
- if (baseType == null) { |
- return baseField; |
- } |
- List<Type2> argumentTypes = definingType.typeArguments; |
- List<Type2> parameterTypes = definingType.element.type.typeArguments; |
- Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes); |
- if (baseType == substitutedType) { |
- return baseField; |
- } |
- return new FieldMember(baseField, definingType); |
- } |
- |
- /** |
- * Initialize a newly created element to represent a field of the given parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- FieldMember(FieldElement baseElement, InterfaceType definingType) : super(baseElement, definingType); |
- accept(ElementVisitor visitor) => visitor.visitFieldElement(this); |
- FieldElement get baseElement => super.baseElement as FieldElement; |
- ClassElement get enclosingElement => baseElement.enclosingElement; |
- PropertyAccessorElement get getter => PropertyAccessorMember.from(baseElement.getter, definingType); |
- PropertyAccessorElement get setter => PropertyAccessorMember.from(baseElement.setter, definingType); |
- bool get isStatic => baseElement.isStatic; |
- InterfaceType get definingType => super.definingType as InterfaceType; |
-} |
-/** |
- * The abstract class `Member` defines the behavior common to elements that represent members |
- * of parameterized types. |
- */ |
-abstract class Member implements Element { |
- |
- /** |
- * The element on which the parameterized element was created. |
- */ |
- Element _baseElement; |
- |
- /** |
- * The type in which the element is defined. |
- */ |
- ParameterizedType _definingType; |
- |
- /** |
- * Initialize a newly created element to represent the member of the given parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- Member(Element baseElement, ParameterizedType definingType) { |
- this._baseElement = baseElement; |
- this._definingType = definingType; |
- } |
- String computeDocumentationComment() => _baseElement.computeDocumentationComment(); |
- Element getAncestor(Type elementClass) => baseElement.getAncestor(elementClass); |
- |
- /** |
- * Return the element on which the parameterized element was created. |
- * |
- * @return the element on which the parameterized element was created |
- */ |
- Element get baseElement => _baseElement; |
- AnalysisContext get context => _baseElement.context; |
- String get displayName => _baseElement.displayName; |
- ElementKind get kind => _baseElement.kind; |
- LibraryElement get library => _baseElement.library; |
- ElementLocation get location => _baseElement.location; |
- List<ElementAnnotation> get metadata => _baseElement.metadata; |
- String get name => _baseElement.name; |
- int get nameOffset => _baseElement.nameOffset; |
- Source get source => _baseElement.source; |
- bool isAccessibleIn(LibraryElement library) => _baseElement.isAccessibleIn(library); |
- bool get isSynthetic => _baseElement.isSynthetic; |
- void visitChildren(ElementVisitor visitor) { |
- } |
- |
- /** |
- * Return the type in which the element is defined. |
- * |
- * @return the type in which the element is defined |
- */ |
- ParameterizedType get definingType => _definingType; |
- |
- /** |
- * If the given child is not `null`, use the given visitor to visit it. |
- * |
- * @param child the child to be visited |
- * @param visitor the visitor to be used to visit the child |
- */ |
- void safelyVisitChild(Element child, ElementVisitor visitor) { |
- if (child != null) { |
- child.accept(visitor); |
- } |
- } |
- |
- /** |
- * Use the given visitor to visit all of the children in the given array. |
- * |
- * @param children the children to be visited |
- * @param visitor the visitor being used to visit the children |
- */ |
- void safelyVisitChildren(List<Element> children, ElementVisitor visitor) { |
- if (children != null) { |
- for (Element child in children) { |
- child.accept(visitor); |
- } |
- } |
- } |
- |
- /** |
- * Return the type that results from replacing the type parameters in the given type with the type |
- * arguments. |
- * |
- * @param type the type to be transformed |
- * @return the result of transforming the type |
- */ |
- Type2 substituteFor(Type2 type) { |
- List<Type2> argumentTypes = _definingType.typeArguments; |
- List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(_definingType.typeParameters); |
- return type.substitute2(argumentTypes, parameterTypes) as Type2; |
- } |
- |
- /** |
- * Return the array of types that results from replacing the type parameters in the given types |
- * with the type arguments. |
- * |
- * @param types the types to be transformed |
- * @return the result of transforming the types |
- */ |
- List<InterfaceType> substituteFor2(List<InterfaceType> types) { |
- int count = types.length; |
- List<InterfaceType> substitutedTypes = new List<InterfaceType>(count); |
- for (int i = 0; i < count; i++) { |
- substitutedTypes[i] = substituteFor(types[i]); |
- } |
- return substitutedTypes; |
- } |
-} |
-/** |
- * Instances of the class `MethodMember` represent a method element defined in a parameterized |
- * type where the values of the type parameters are known. |
- */ |
-class MethodMember extends ExecutableMember implements MethodElement { |
- |
- /** |
- * If the given method's type is different when any type parameters from the defining type's |
- * declaration are replaced with the actual type arguments from the defining type, create a method |
- * member representing the given method. Return the member that was created, or the base method if |
- * no member was created. |
- * |
- * @param baseMethod the base method for which a member might be created |
- * @param definingType the type defining the parameters and arguments to be used in the |
- * substitution |
- * @return the method element that will return the correctly substituted types |
- */ |
- static MethodElement from(MethodElement baseMethod, InterfaceType definingType) { |
- if (baseMethod == null || definingType.typeArguments.length == 0) { |
- return baseMethod; |
- } |
- FunctionType baseType = baseMethod.type; |
- List<Type2> argumentTypes = definingType.typeArguments; |
- List<Type2> parameterTypes = definingType.element.type.typeArguments; |
- FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes); |
- if (baseType == substitutedType) { |
- return baseMethod; |
- } |
- return new MethodMember(baseMethod, definingType); |
- } |
- |
- /** |
- * Initialize a newly created element to represent a method of the given parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- MethodMember(MethodElement baseElement, InterfaceType definingType) : super(baseElement, definingType); |
- accept(ElementVisitor visitor) => visitor.visitMethodElement(this); |
- MethodElement get baseElement => super.baseElement as MethodElement; |
- ClassElement get enclosingElement => baseElement.enclosingElement; |
- bool get isAbstract => baseElement.isAbstract; |
- String toString() { |
- MethodElement baseElement = this.baseElement; |
- List<ParameterElement> parameters = this.parameters; |
- FunctionType type = this.type; |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append(baseElement.enclosingElement.displayName); |
- builder.append("."); |
- builder.append(baseElement.displayName); |
- builder.append("("); |
- int parameterCount = parameters.length; |
- for (int i = 0; i < parameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- builder.append(parameters[i]).toString(); |
- } |
- builder.append(")"); |
- if (type != null) { |
- builder.append(" -> "); |
- builder.append(type.returnType); |
- } |
- return builder.toString(); |
- } |
-} |
-/** |
- * Instances of the class `ParameterMember` represent a parameter element defined in a |
- * parameterized type where the values of the type parameters are known. |
- */ |
-class ParameterMember extends VariableMember implements ParameterElement { |
- |
- /** |
- * If the given parameter's type is different when any type parameters from the defining type's |
- * declaration are replaced with the actual type arguments from the defining type, create a |
- * parameter member representing the given parameter. Return the member that was created, or the |
- * base parameter if no member was created. |
- * |
- * @param baseParameter the base parameter for which a member might be created |
- * @param definingType the type defining the parameters and arguments to be used in the |
- * substitution |
- * @return the parameter element that will return the correctly substituted types |
- */ |
- static ParameterElement from(ParameterElement baseParameter, ParameterizedType definingType) { |
- if (baseParameter == null || definingType.typeArguments.length == 0) { |
- return baseParameter; |
- } |
- if (baseParameter is! FieldFormalParameterElement) { |
- Type2 baseType = baseParameter.type; |
- List<Type2> argumentTypes = definingType.typeArguments; |
- List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(definingType.typeParameters); |
- Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes); |
- if (baseType == substitutedType) { |
- return baseParameter; |
- } |
- } |
- return new ParameterMember(baseParameter, definingType); |
- } |
- |
- /** |
- * Initialize a newly created element to represent a parameter of the given parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- ParameterMember(ParameterElement baseElement, ParameterizedType definingType) : super(baseElement, definingType); |
- accept(ElementVisitor visitor) => visitor.visitParameterElement(this); |
- Element getAncestor(Type elementClass) { |
- Element element = baseElement.getAncestor(elementClass); |
- ParameterizedType definingType = this.definingType; |
- if (definingType is InterfaceType) { |
- InterfaceType definingInterfaceType = definingType as InterfaceType; |
- if (element is ConstructorElement) { |
- return ConstructorMember.from(element as ConstructorElement, definingInterfaceType) as Element; |
- } else if (element is MethodElement) { |
- return MethodMember.from(element as MethodElement, definingInterfaceType) as Element; |
- } else if (element is PropertyAccessorElement) { |
- return PropertyAccessorMember.from(element as PropertyAccessorElement, definingInterfaceType) as Element; |
- } |
- } |
- return element; |
- } |
- ParameterElement get baseElement => super.baseElement as ParameterElement; |
- SourceRange get defaultValueRange => baseElement.defaultValueRange; |
- Element get enclosingElement => baseElement.enclosingElement; |
- ParameterKind get parameterKind => baseElement.parameterKind; |
- List<ParameterElement> get parameters { |
- List<ParameterElement> baseParameters = baseElement.parameters; |
- int parameterCount = baseParameters.length; |
- if (parameterCount == 0) { |
- return baseParameters; |
- } |
- List<ParameterElement> parameterizedParameters = new List<ParameterElement>(parameterCount); |
- for (int i = 0; i < parameterCount; i++) { |
- parameterizedParameters[i] = ParameterMember.from(baseParameters[i], definingType); |
- } |
- return parameterizedParameters; |
- } |
- SourceRange get visibleRange => baseElement.visibleRange; |
- bool get isInitializingFormal => baseElement.isInitializingFormal; |
- String toString() { |
- ParameterElement baseElement = this.baseElement; |
- String left = ""; |
- String right = ""; |
- while (true) { |
- if (baseElement.parameterKind == ParameterKind.NAMED) { |
- left = "{"; |
- right = "}"; |
- } else if (baseElement.parameterKind == ParameterKind.POSITIONAL) { |
- left = "["; |
- right = "]"; |
- } |
- break; |
- } |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append(left); |
- builder.append(type); |
- builder.append(" "); |
- builder.append(baseElement.displayName); |
- builder.append(right); |
- return builder.toString(); |
- } |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChildren(parameters, visitor); |
- } |
-} |
-/** |
- * Instances of the class `PropertyAccessorMember` represent a property accessor element |
- * defined in a parameterized type where the values of the type parameters are known. |
- */ |
-class PropertyAccessorMember extends ExecutableMember implements PropertyAccessorElement { |
- |
- /** |
- * If the given property accessor's type is different when any type parameters from the defining |
- * type's declaration are replaced with the actual type arguments from the defining type, create a |
- * property accessor member representing the given property accessor. Return the member that was |
- * created, or the base accessor if no member was created. |
- * |
- * @param baseAccessor the base property accessor for which a member might be created |
- * @param definingType the type defining the parameters and arguments to be used in the |
- * substitution |
- * @return the property accessor element that will return the correctly substituted types |
- */ |
- static PropertyAccessorElement from(PropertyAccessorElement baseAccessor, InterfaceType definingType) { |
- if (baseAccessor == null || definingType.typeArguments.length == 0) { |
- return baseAccessor; |
- } |
- FunctionType baseType = baseAccessor.type; |
- List<Type2> argumentTypes = definingType.typeArguments; |
- List<Type2> parameterTypes = definingType.element.type.typeArguments; |
- FunctionType substitutedType = baseType.substitute2(argumentTypes, parameterTypes); |
- if (baseType == substitutedType) { |
- return baseAccessor; |
- } |
- return new PropertyAccessorMember(baseAccessor, definingType); |
- } |
- |
- /** |
- * Initialize a newly created element to represent a property accessor of the given parameterized |
- * type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- PropertyAccessorMember(PropertyAccessorElement baseElement, InterfaceType definingType) : super(baseElement, definingType); |
- accept(ElementVisitor visitor) => visitor.visitPropertyAccessorElement(this); |
- PropertyAccessorElement get baseElement => super.baseElement as PropertyAccessorElement; |
- PropertyAccessorElement get correspondingGetter => from(baseElement.correspondingGetter, definingType); |
- PropertyAccessorElement get correspondingSetter => from(baseElement.correspondingSetter, definingType); |
- Element get enclosingElement => baseElement.enclosingElement; |
- PropertyInducingElement get variable { |
- PropertyInducingElement variable = baseElement.variable; |
- if (variable is FieldElement) { |
- return FieldMember.from(variable as FieldElement, definingType); |
- } |
- return variable; |
- } |
- bool get isAbstract => baseElement.isAbstract; |
- bool get isGetter => baseElement.isGetter; |
- bool get isSetter => baseElement.isSetter; |
- String toString() { |
- PropertyAccessorElement baseElement = this.baseElement; |
- List<ParameterElement> parameters = this.parameters; |
- FunctionType type = this.type; |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- if (isGetter) { |
- builder.append("get "); |
- } else { |
- builder.append("set "); |
- } |
- builder.append(baseElement.enclosingElement.displayName); |
- builder.append("."); |
- builder.append(baseElement.displayName); |
- builder.append("("); |
- int parameterCount = parameters.length; |
- for (int i = 0; i < parameterCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- builder.append(parameters[i]).toString(); |
- } |
- builder.append(")"); |
- if (type != null) { |
- builder.append(" -> "); |
- builder.append(type.returnType); |
- } |
- return builder.toString(); |
- } |
- InterfaceType get definingType => super.definingType as InterfaceType; |
-} |
-/** |
- * The abstract class `VariableMember` defines the behavior common to members that represent a |
- * variable element defined in a parameterized type where the values of the type parameters are |
- * known. |
- */ |
-abstract class VariableMember extends Member implements VariableElement { |
- |
- /** |
- * Initialize a newly created element to represent an executable element of the given |
- * parameterized type. |
- * |
- * @param baseElement the element on which the parameterized element was created |
- * @param definingType the type in which the element is defined |
- */ |
- VariableMember(VariableElement baseElement, ParameterizedType definingType) : super(baseElement, definingType); |
- VariableElement get baseElement => super.baseElement as VariableElement; |
- FunctionElement get initializer { |
- throw new UnsupportedOperationException(); |
- } |
- Type2 get type => substituteFor(baseElement.type); |
- bool get isConst => baseElement.isConst; |
- bool get isFinal => baseElement.isFinal; |
- void visitChildren(ElementVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(baseElement.initializer, visitor); |
- } |
-} |
-/** |
- * The unique instance of the class `BottomTypeImpl` implements the type `bottom`. |
- * |
- * @coverage dart.engine.type |
- */ |
-class BottomTypeImpl extends TypeImpl { |
- |
- /** |
- * The unique instance of this class. |
- */ |
- static final BottomTypeImpl instance = new BottomTypeImpl(); |
- |
- /** |
- * Prevent the creation of instances of this class. |
- */ |
- BottomTypeImpl() : super(null, "<bottom>"); |
- bool operator ==(Object object) => identical(object, this); |
- bool get isBottom => true; |
- bool isMoreSpecificThan(Type2 type) => true; |
- bool isSubtypeOf(Type2 type) => true; |
- bool isSupertypeOf(Type2 type) => false; |
- BottomTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) => this; |
-} |
-/** |
- * The unique instance of the class `DynamicTypeImpl` implements the type `dynamic`. |
- * |
- * @coverage dart.engine.type |
- */ |
-class DynamicTypeImpl extends TypeImpl { |
- |
- /** |
- * The unique instance of this class. |
- */ |
- static final DynamicTypeImpl instance = new DynamicTypeImpl(); |
- |
- /** |
- * Prevent the creation of instances of this class. |
- */ |
- DynamicTypeImpl() : super(new DynamicElementImpl(), Keyword.DYNAMIC.syntax) { |
- ((element as DynamicElementImpl)).type = this; |
- } |
- bool operator ==(Object object) => object is DynamicTypeImpl; |
- bool get isDynamic => true; |
- bool isMoreSpecificThan(Type2 type) { |
- if (identical(this, type)) { |
- return true; |
- } |
- return false; |
- } |
- bool isSubtypeOf(Type2 type) => true; |
- bool isSupertypeOf(Type2 type) => true; |
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { |
- int length = parameterTypes.length; |
- for (int i = 0; i < length; i++) { |
- if (parameterTypes[i] == this) { |
- return argumentTypes[i]; |
- } |
- } |
- return this; |
- } |
-} |
-/** |
- * Instances of the class `FunctionTypeImpl` defines the behavior common to objects |
- * representing the type of a function, method, constructor, getter, or setter. |
- * |
- * @coverage dart.engine.type |
- */ |
-class FunctionTypeImpl extends TypeImpl implements FunctionType { |
- |
- /** |
- * Return `true` if all of the name/type pairs in the first map are equal to the |
- * corresponding name/type pairs in the second map. The maps are expected to iterate over their |
- * entries in the same order in which those entries were added to the map. |
- * |
- * @param firstTypes the first map of name/type pairs being compared |
- * @param secondTypes the second map of name/type pairs being compared |
- * @return `true` if all of the name/type pairs in the first map are equal to the |
- * corresponding name/type pairs in the second map |
- */ |
- static bool equals2(Map<String, Type2> firstTypes, Map<String, Type2> secondTypes) { |
- if (secondTypes.length != firstTypes.length) { |
- return false; |
- } |
- JavaIterator<MapEntry<String, Type2>> firstIterator = new JavaIterator(getMapEntrySet(firstTypes)); |
- JavaIterator<MapEntry<String, Type2>> secondIterator = new JavaIterator(getMapEntrySet(secondTypes)); |
- while (firstIterator.hasNext) { |
- MapEntry<String, Type2> firstEntry = firstIterator.next(); |
- MapEntry<String, Type2> secondEntry = secondIterator.next(); |
- if (firstEntry.getKey() != secondEntry.getKey() || firstEntry.getValue() != secondEntry.getValue()) { |
- return false; |
- } |
- } |
- return true; |
- } |
- |
- /** |
- * An array containing the actual types of the type arguments. |
- */ |
- List<Type2> _typeArguments = TypeImpl.EMPTY_ARRAY; |
- |
- /** |
- * Initialize a newly created function type to be declared by the given element and to have the |
- * given name. |
- * |
- * @param element the element representing the declaration of the function type |
- */ |
- FunctionTypeImpl.con1(ExecutableElement element) : super(element, element == null ? null : element.name); |
- |
- /** |
- * Initialize a newly created function type to be declared by the given element and to have the |
- * given name. |
- * |
- * @param element the element representing the declaration of the function type |
- */ |
- FunctionTypeImpl.con2(FunctionTypeAliasElement element) : super(element, element == null ? null : element.name); |
- bool operator ==(Object object) { |
- if (object is! FunctionTypeImpl) { |
- return false; |
- } |
- FunctionTypeImpl otherType = object as FunctionTypeImpl; |
- return (element == otherType.element) && JavaArrays.equals(normalParameterTypes, otherType.normalParameterTypes) && JavaArrays.equals(optionalParameterTypes, otherType.optionalParameterTypes) && equals2(namedParameterTypes, otherType.namedParameterTypes) && (returnType == otherType.returnType); |
- } |
- String get displayName { |
- String name = this.name; |
- if (name == null || name.length == 0) { |
- List<Type2> normalParameterTypes = this.normalParameterTypes; |
- List<Type2> optionalParameterTypes = this.optionalParameterTypes; |
- Map<String, Type2> namedParameterTypes = this.namedParameterTypes; |
- Type2 returnType = this.returnType; |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append("("); |
- bool needsComma = false; |
- if (normalParameterTypes.length > 0) { |
- for (Type2 type in normalParameterTypes) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- builder.append(type.displayName); |
- } |
- } |
- if (optionalParameterTypes.length > 0) { |
- if (needsComma) { |
- builder.append(", "); |
- needsComma = false; |
- } |
- builder.append("["); |
- for (Type2 type in optionalParameterTypes) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- builder.append(type.displayName); |
- } |
- builder.append("]"); |
- needsComma = true; |
- } |
- if (namedParameterTypes.length > 0) { |
- if (needsComma) { |
- builder.append(", "); |
- needsComma = false; |
- } |
- builder.append("{"); |
- for (MapEntry<String, Type2> entry in getMapEntrySet(namedParameterTypes)) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- builder.append(entry.getKey()); |
- builder.append(": "); |
- builder.append(entry.getValue().displayName); |
- } |
- builder.append("}"); |
- needsComma = true; |
- } |
- builder.append(") -> "); |
- if (returnType == null) { |
- builder.append("null"); |
- } else { |
- builder.append(returnType.displayName); |
- } |
- name = builder.toString(); |
- } |
- return name; |
- } |
- Map<String, Type2> get namedParameterTypes { |
- LinkedHashMap<String, Type2> namedParameterTypes = new LinkedHashMap<String, Type2>(); |
- List<ParameterElement> parameters = baseParameters; |
- if (parameters.length == 0) { |
- return namedParameterTypes; |
- } |
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters); |
- for (ParameterElement parameter in parameters) { |
- if (identical(parameter.parameterKind, ParameterKind.NAMED)) { |
- namedParameterTypes[parameter.name] = parameter.type.substitute2(_typeArguments, typeParameters); |
- } |
- } |
- return namedParameterTypes; |
- } |
- List<Type2> get normalParameterTypes { |
- List<ParameterElement> parameters = baseParameters; |
- if (parameters.length == 0) { |
- return TypeImpl.EMPTY_ARRAY; |
- } |
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters); |
- List<Type2> types = new List<Type2>(); |
- for (ParameterElement parameter in parameters) { |
- if (identical(parameter.parameterKind, ParameterKind.REQUIRED)) { |
- types.add(parameter.type.substitute2(_typeArguments, typeParameters)); |
- } |
- } |
- return new List.from(types); |
- } |
- List<Type2> get optionalParameterTypes { |
- List<ParameterElement> parameters = baseParameters; |
- if (parameters.length == 0) { |
- return TypeImpl.EMPTY_ARRAY; |
- } |
- List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters); |
- List<Type2> types = new List<Type2>(); |
- for (ParameterElement parameter in parameters) { |
- if (identical(parameter.parameterKind, ParameterKind.POSITIONAL)) { |
- types.add(parameter.type.substitute2(_typeArguments, typeParameters)); |
- } |
- } |
- return new List.from(types); |
- } |
- List<ParameterElement> get parameters { |
- List<ParameterElement> baseParameters = this.baseParameters; |
- int parameterCount = baseParameters.length; |
- if (parameterCount == 0) { |
- return baseParameters; |
- } |
- List<ParameterElement> specializedParameters = new List<ParameterElement>(parameterCount); |
- for (int i = 0; i < parameterCount; i++) { |
- specializedParameters[i] = ParameterMember.from(baseParameters[i], this); |
- } |
- return specializedParameters; |
- } |
- Type2 get returnType { |
- Type2 baseReturnType = this.baseReturnType; |
- if (baseReturnType == null) { |
- return DynamicTypeImpl.instance; |
- } |
- return baseReturnType.substitute2(_typeArguments, TypeParameterTypeImpl.getTypes(typeParameters)); |
- } |
- List<Type2> get typeArguments => _typeArguments; |
- List<TypeParameterElement> get typeParameters { |
- Element element = this.element; |
- if (element is FunctionTypeAliasElement) { |
- return ((element as FunctionTypeAliasElement)).typeParameters; |
- } |
- ClassElement definingClass = element.getAncestor(ClassElement); |
- if (definingClass != null) { |
- return definingClass.typeParameters; |
- } |
- return TypeParameterElementImpl.EMPTY_ARRAY; |
- } |
- int get hashCode { |
- Element element = this.element; |
- if (element == null) { |
- return 0; |
- } |
- return element.hashCode; |
- } |
- bool isAssignableTo(Type2 type) => this.isSubtypeOf(type); |
- bool isMoreSpecificThan(Type2 type) { |
- if (type == null) { |
- return false; |
- } else if (identical(this, type) || type.isDynamic || type.isDartCoreFunction || type.isObject) { |
- return true; |
- } else if (type is! FunctionType) { |
- return false; |
- } else if (this == type) { |
- return true; |
- } |
- FunctionType t = this; |
- FunctionType s = type as FunctionType; |
- List<Type2> tTypes = t.normalParameterTypes; |
- List<Type2> tOpTypes = t.optionalParameterTypes; |
- List<Type2> sTypes = s.normalParameterTypes; |
- List<Type2> sOpTypes = s.optionalParameterTypes; |
- if ((sOpTypes.length > 0 && t.namedParameterTypes.length > 0) || (tOpTypes.length > 0 && s.namedParameterTypes.length > 0)) { |
- return false; |
- } |
- if (t.namedParameterTypes.length > 0) { |
- if (t.normalParameterTypes.length != s.normalParameterTypes.length) { |
- return false; |
- } else if (t.normalParameterTypes.length > 0) { |
- for (int i = 0; i < tTypes.length; i++) { |
- if (!tTypes[i].isMoreSpecificThan(sTypes[i])) { |
- return false; |
- } |
- } |
- } |
- Map<String, Type2> namedTypesT = t.namedParameterTypes; |
- Map<String, Type2> namedTypesS = s.namedParameterTypes; |
- if (namedTypesT.length < namedTypesS.length) { |
- return false; |
- } |
- JavaIterator<MapEntry<String, Type2>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS)); |
- while (iteratorS.hasNext) { |
- MapEntry<String, Type2> entryS = iteratorS.next(); |
- Type2 typeT = namedTypesT[entryS.getKey()]; |
- if (typeT == null) { |
- return false; |
- } |
- if (!typeT.isMoreSpecificThan(entryS.getValue())) { |
- return false; |
- } |
- } |
- } else if (s.namedParameterTypes.length > 0) { |
- return false; |
- } else { |
- int tArgLength = tTypes.length + tOpTypes.length; |
- int sArgLength = sTypes.length + sOpTypes.length; |
- if (tArgLength < sArgLength || sTypes.length < tTypes.length) { |
- return false; |
- } |
- if (tOpTypes.length == 0 && sOpTypes.length == 0) { |
- for (int i = 0; i < sTypes.length; i++) { |
- if (!tTypes[i].isMoreSpecificThan(sTypes[i])) { |
- return false; |
- } |
- } |
- } else { |
- List<Type2> tAllTypes = new List<Type2>(sArgLength); |
- for (int i = 0; i < tTypes.length; i++) { |
- tAllTypes[i] = tTypes[i]; |
- } |
- for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) { |
- tAllTypes[i] = tOpTypes[j]; |
- } |
- List<Type2> sAllTypes = new List<Type2>(sArgLength); |
- for (int i = 0; i < sTypes.length; i++) { |
- sAllTypes[i] = sTypes[i]; |
- } |
- for (int i = sTypes.length, j = 0; i < sArgLength; i++, j++) { |
- sAllTypes[i] = sOpTypes[j]; |
- } |
- for (int i = 0; i < sAllTypes.length; i++) { |
- if (!tAllTypes[i].isMoreSpecificThan(sAllTypes[i])) { |
- return false; |
- } |
- } |
- } |
- } |
- Type2 tRetType = t.returnType; |
- Type2 sRetType = s.returnType; |
- return sRetType.isVoid || tRetType.isMoreSpecificThan(sRetType); |
- } |
- bool isSubtypeOf(Type2 type) { |
- if (type == null) { |
- return false; |
- } else if (identical(this, type) || type.isDynamic || type.isDartCoreFunction || type.isObject) { |
- return true; |
- } else if (type is! FunctionType) { |
- return false; |
- } else if (this == type) { |
- return true; |
- } |
- FunctionType t = this; |
- FunctionType s = type as FunctionType; |
- List<Type2> tTypes = t.normalParameterTypes; |
- List<Type2> tOpTypes = t.optionalParameterTypes; |
- List<Type2> sTypes = s.normalParameterTypes; |
- List<Type2> sOpTypes = s.optionalParameterTypes; |
- if ((sOpTypes.length > 0 && t.namedParameterTypes.length > 0) || (tOpTypes.length > 0 && s.namedParameterTypes.length > 0)) { |
- return false; |
- } |
- if (t.namedParameterTypes.length > 0) { |
- if (t.normalParameterTypes.length != s.normalParameterTypes.length) { |
- return false; |
- } else if (t.normalParameterTypes.length > 0) { |
- for (int i = 0; i < tTypes.length; i++) { |
- if (!tTypes[i].isAssignableTo(sTypes[i])) { |
- return false; |
- } |
- } |
- } |
- Map<String, Type2> namedTypesT = t.namedParameterTypes; |
- Map<String, Type2> namedTypesS = s.namedParameterTypes; |
- if (namedTypesT.length < namedTypesS.length) { |
- return false; |
- } |
- JavaIterator<MapEntry<String, Type2>> iteratorS = new JavaIterator(getMapEntrySet(namedTypesS)); |
- while (iteratorS.hasNext) { |
- MapEntry<String, Type2> entryS = iteratorS.next(); |
- Type2 typeT = namedTypesT[entryS.getKey()]; |
- if (typeT == null) { |
- return false; |
- } |
- if (!typeT.isAssignableTo(entryS.getValue())) { |
- return false; |
- } |
- } |
- } else if (s.namedParameterTypes.length > 0) { |
- return false; |
- } else { |
- int tArgLength = tTypes.length + tOpTypes.length; |
- int sArgLength = sTypes.length + sOpTypes.length; |
- if (tArgLength < sArgLength || sTypes.length < tTypes.length) { |
- return false; |
- } |
- if (tOpTypes.length == 0 && sOpTypes.length == 0) { |
- for (int i = 0; i < sTypes.length; i++) { |
- if (!tTypes[i].isAssignableTo(sTypes[i])) { |
- return false; |
- } |
- } |
- } else { |
- List<Type2> tAllTypes = new List<Type2>(sArgLength); |
- for (int i = 0; i < tTypes.length; i++) { |
- tAllTypes[i] = tTypes[i]; |
- } |
- for (int i = tTypes.length, j = 0; i < sArgLength; i++, j++) { |
- tAllTypes[i] = tOpTypes[j]; |
- } |
- List<Type2> sAllTypes = new List<Type2>(sArgLength); |
- for (int i = 0; i < sTypes.length; i++) { |
- sAllTypes[i] = sTypes[i]; |
- } |
- for (int i = sTypes.length, j = 0; i < sArgLength; i++, j++) { |
- sAllTypes[i] = sOpTypes[j]; |
- } |
- for (int i = 0; i < sAllTypes.length; i++) { |
- if (!tAllTypes[i].isAssignableTo(sAllTypes[i])) { |
- return false; |
- } |
- } |
- } |
- } |
- Type2 tRetType = t.returnType; |
- Type2 sRetType = s.returnType; |
- return sRetType.isVoid || tRetType.isAssignableTo(sRetType); |
- } |
- |
- /** |
- * Set the actual types of the type arguments to the given types. |
- * |
- * @param typeArguments the actual types of the type arguments |
- */ |
- void set typeArguments(List<Type2> typeArguments) { |
- this._typeArguments = typeArguments; |
- } |
- FunctionTypeImpl substitute3(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments); |
- FunctionTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { |
- if (argumentTypes.length != parameterTypes.length) { |
- throw new IllegalArgumentException("argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})"); |
- } |
- if (argumentTypes.length == 0) { |
- return this; |
- } |
- Element element = this.element; |
- FunctionTypeImpl newType = (element is ExecutableElement) ? new FunctionTypeImpl.con1(element as ExecutableElement) : new FunctionTypeImpl.con2(element as FunctionTypeAliasElement); |
- newType.typeArguments = TypeImpl.substitute(_typeArguments, argumentTypes, parameterTypes); |
- return newType; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- List<Type2> normalParameterTypes = this.normalParameterTypes; |
- List<Type2> optionalParameterTypes = this.optionalParameterTypes; |
- Map<String, Type2> namedParameterTypes = this.namedParameterTypes; |
- Type2 returnType = this.returnType; |
- builder.append("("); |
- bool needsComma = false; |
- if (normalParameterTypes.length > 0) { |
- for (Type2 type in normalParameterTypes) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- ((type as TypeImpl)).appendTo(builder); |
- } |
- } |
- if (optionalParameterTypes.length > 0) { |
- if (needsComma) { |
- builder.append(", "); |
- needsComma = false; |
- } |
- builder.append("["); |
- for (Type2 type in optionalParameterTypes) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- ((type as TypeImpl)).appendTo(builder); |
- } |
- builder.append("]"); |
- needsComma = true; |
- } |
- if (namedParameterTypes.length > 0) { |
- if (needsComma) { |
- builder.append(", "); |
- needsComma = false; |
- } |
- builder.append("{"); |
- for (MapEntry<String, Type2> entry in getMapEntrySet(namedParameterTypes)) { |
- if (needsComma) { |
- builder.append(", "); |
- } else { |
- needsComma = true; |
- } |
- builder.append(entry.getKey()); |
- builder.append(": "); |
- ((entry.getValue() as TypeImpl)).appendTo(builder); |
- } |
- builder.append("}"); |
- needsComma = true; |
- } |
- builder.append(") -> "); |
- if (returnType == null) { |
- builder.append("null"); |
- } else { |
- ((returnType as TypeImpl)).appendTo(builder); |
- } |
- } |
- |
- /** |
- * @return the base parameter elements of this function element, not `null`. |
- */ |
- List<ParameterElement> get baseParameters { |
- Element element = this.element; |
- if (element is ExecutableElement) { |
- return ((element as ExecutableElement)).parameters; |
- } else { |
- return ((element as FunctionTypeAliasElement)).parameters; |
- } |
- } |
- |
- /** |
- * Return the return type defined by this function's element. |
- * |
- * @return the return type defined by this function's element |
- */ |
- Type2 get baseReturnType { |
- Element element = this.element; |
- if (element is ExecutableElement) { |
- return ((element as ExecutableElement)).returnType; |
- } else { |
- return ((element as FunctionTypeAliasElement)).returnType; |
- } |
- } |
-} |
-/** |
- * Instances of the class `InterfaceTypeImpl` defines the behavior common to objects |
- * representing the type introduced by either a class or an interface, or a reference to such a |
- * type. |
- * |
- * @coverage dart.engine.type |
- */ |
-class InterfaceTypeImpl extends TypeImpl implements InterfaceType { |
- |
- /** |
- * An empty array of types. |
- */ |
- static List<InterfaceType> EMPTY_ARRAY = new List<InterfaceType>(0); |
- |
- /** |
- * This method computes the longest inheritance path from some passed [Type] to Object. |
- * |
- * @param type the [Type] to compute the longest inheritance path of from the passed |
- * [Type] to Object |
- * @return the computed longest inheritance path to Object |
- * @see InterfaceType#getLeastUpperBound(Type) |
- */ |
- static int computeLongestInheritancePathToObject(InterfaceType type) => computeLongestInheritancePathToObject2(type, 0, new Set<ClassElement>()); |
- |
- /** |
- * Returns the set of all superinterfaces of the passed [Type]. |
- * |
- * @param type the [Type] to compute the set of superinterfaces of |
- * @return the [Set] of superinterfaces of the passed [Type] |
- * @see #getLeastUpperBound(Type) |
- */ |
- static Set<InterfaceType> computeSuperinterfaceSet(InterfaceType type) => computeSuperinterfaceSet2(type, new Set<InterfaceType>()); |
- |
- /** |
- * This method computes the longest inheritance path from some passed [Type] to Object. This |
- * method calls itself recursively, callers should use the public method |
- * [computeLongestInheritancePathToObject]. |
- * |
- * @param type the [Type] to compute the longest inheritance path of from the passed |
- * [Type] to Object |
- * @param depth a field used recursively |
- * @param visitedClasses the classes that have already been visited |
- * @return the computed longest inheritance path to Object |
- * @see #computeLongestInheritancePathToObject(Type) |
- * @see #getLeastUpperBound(Type) |
- */ |
- static int computeLongestInheritancePathToObject2(InterfaceType type, int depth, Set<ClassElement> visitedClasses) { |
- ClassElement classElement = type.element; |
- if (classElement.supertype == null || visitedClasses.contains(classElement)) { |
- return depth; |
- } |
- int longestPath = 1; |
- try { |
- javaSetAdd(visitedClasses, classElement); |
- List<InterfaceType> superinterfaces = classElement.interfaces; |
- int pathLength; |
- if (superinterfaces.length > 0) { |
- for (InterfaceType superinterface in superinterfaces) { |
- pathLength = computeLongestInheritancePathToObject2(superinterface, depth + 1, visitedClasses); |
- if (pathLength > longestPath) { |
- longestPath = pathLength; |
- } |
- } |
- } |
- InterfaceType supertype = classElement.supertype; |
- pathLength = computeLongestInheritancePathToObject2(supertype, depth + 1, visitedClasses); |
- if (pathLength > longestPath) { |
- longestPath = pathLength; |
- } |
- } finally { |
- visitedClasses.remove(classElement); |
- } |
- return longestPath; |
- } |
- |
- /** |
- * Returns the set of all superinterfaces of the passed [Type]. This is a recursive method, |
- * callers should call the public [computeSuperinterfaceSet]. |
- * |
- * @param type the [Type] to compute the set of superinterfaces of |
- * @param set a [HashSet] used recursively by this method |
- * @return the [Set] of superinterfaces of the passed [Type] |
- * @see #computeSuperinterfaceSet(Type) |
- * @see #getLeastUpperBound(Type) |
- */ |
- static Set<InterfaceType> computeSuperinterfaceSet2(InterfaceType type, Set<InterfaceType> set) { |
- Element element = type.element; |
- if (element != null && element is ClassElement) { |
- ClassElement classElement = element as ClassElement; |
- List<InterfaceType> superinterfaces = classElement.interfaces; |
- for (InterfaceType superinterface in superinterfaces) { |
- if (javaSetAdd(set, superinterface)) { |
- computeSuperinterfaceSet2(superinterface, set); |
- } |
- } |
- InterfaceType supertype = classElement.supertype; |
- if (supertype != null) { |
- if (javaSetAdd(set, supertype)) { |
- computeSuperinterfaceSet2(supertype, set); |
- } |
- } |
- } |
- return set; |
- } |
- |
- /** |
- * Return the intersection of the given sets of types, where intersection is based on the equality |
- * of the elements of the types rather than on the equality of the types themselves. In cases |
- * where two non-equal types have equal elements, which only happens when the class is |
- * parameterized, the type that is added to the intersection is the base type with type arguments |
- * that are the least upper bound of the type arguments of the two types. |
- * |
- * @param first the first set of types to be intersected |
- * @param second the second set of types to be intersected |
- * @return the intersection of the given sets of types |
- */ |
- static List<InterfaceType> intersection(Set<InterfaceType> first, Set<InterfaceType> second) { |
- Map<ClassElement, InterfaceType> firstMap = new Map<ClassElement, InterfaceType>(); |
- for (InterfaceType firstType in first) { |
- firstMap[firstType.element] = firstType; |
- } |
- Set<InterfaceType> result = new Set<InterfaceType>(); |
- for (InterfaceType secondType in second) { |
- InterfaceType firstType = firstMap[secondType.element]; |
- if (firstType != null) { |
- javaSetAdd(result, leastUpperBound(firstType, secondType)); |
- } |
- } |
- return new List.from(result); |
- } |
- |
- /** |
- * Return the "least upper bound" of the given types under the assumption that the types have the |
- * same element and differ only in terms of the type arguments. The resulting type is composed by |
- * comparing the corresponding type arguments, keeping those that are the same, and using |
- * 'dynamic' for those that are different. |
- * |
- * @param firstType the first type |
- * @param secondType the second type |
- * @return the "least upper bound" of the given types |
- */ |
- static InterfaceType leastUpperBound(InterfaceType firstType, InterfaceType secondType) { |
- if (firstType == secondType) { |
- return firstType; |
- } |
- List<Type2> firstArguments = firstType.typeArguments; |
- List<Type2> secondArguments = secondType.typeArguments; |
- int argumentCount = firstArguments.length; |
- if (argumentCount == 0) { |
- return firstType; |
- } |
- List<Type2> lubArguments = new List<Type2>(argumentCount); |
- for (int i = 0; i < argumentCount; i++) { |
- if (firstArguments[i] == secondArguments[i]) { |
- lubArguments[i] = firstArguments[i]; |
- } |
- if (lubArguments[i] == null) { |
- lubArguments[i] = DynamicTypeImpl.instance; |
- } |
- } |
- InterfaceTypeImpl lub = new InterfaceTypeImpl.con1(firstType.element); |
- lub.typeArguments = lubArguments; |
- return lub; |
- } |
- |
- /** |
- * An array containing the actual types of the type arguments. |
- */ |
- List<Type2> _typeArguments = TypeImpl.EMPTY_ARRAY; |
- |
- /** |
- * Initialize a newly created type to be declared by the given element. |
- * |
- * @param element the element representing the declaration of the type |
- */ |
- InterfaceTypeImpl.con1(ClassElement element) : super(element, element.displayName); |
- |
- /** |
- * Initialize a newly created type to have the given name. This constructor should only be used in |
- * cases where there is no declaration of the type. |
- * |
- * @param name the name of the type |
- */ |
- InterfaceTypeImpl.con2(String name) : super(null, name); |
- bool operator ==(Object object) { |
- if (object is! InterfaceTypeImpl) { |
- return false; |
- } |
- InterfaceTypeImpl otherType = object as InterfaceTypeImpl; |
- return (element == otherType.element) && JavaArrays.equals(_typeArguments, otherType._typeArguments); |
- } |
- List<PropertyAccessorElement> get accessors { |
- List<PropertyAccessorElement> accessors = element.accessors; |
- List<PropertyAccessorElement> members = new List<PropertyAccessorElement>(accessors.length); |
- for (int i = 0; i < accessors.length; i++) { |
- members[i] = PropertyAccessorMember.from(accessors[i], this); |
- } |
- return members; |
- } |
- String get displayName { |
- String name = this.name; |
- List<Type2> typeArguments = this.typeArguments; |
- bool allDynamic = true; |
- for (Type2 type in typeArguments) { |
- if (type != null && !type.isDynamic) { |
- allDynamic = false; |
- break; |
- } |
- } |
- if (!allDynamic) { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- builder.append(name); |
- builder.append("<"); |
- for (int i = 0; i < typeArguments.length; i++) { |
- if (i != 0) { |
- builder.append(", "); |
- } |
- Type2 typeArg = typeArguments[i]; |
- builder.append(typeArg.displayName); |
- } |
- builder.append(">"); |
- name = builder.toString(); |
- } |
- return name; |
- } |
- ClassElement get element => super.element as ClassElement; |
- PropertyAccessorElement getGetter(String getterName) => PropertyAccessorMember.from(((element as ClassElementImpl)).getGetter(getterName), this); |
- List<InterfaceType> get interfaces { |
- ClassElement classElement = element; |
- List<InterfaceType> interfaces = classElement.interfaces; |
- List<TypeParameterElement> typeParameters = classElement.typeParameters; |
- List<Type2> parameterTypes = classElement.type.typeArguments; |
- if (typeParameters.length == 0) { |
- return interfaces; |
- } |
- int count = interfaces.length; |
- List<InterfaceType> typedInterfaces = new List<InterfaceType>(count); |
- for (int i = 0; i < count; i++) { |
- typedInterfaces[i] = interfaces[i].substitute2(_typeArguments, parameterTypes); |
- } |
- return typedInterfaces; |
- } |
- Type2 getLeastUpperBound(Type2 type) { |
- if (identical(type, this)) { |
- return this; |
- } |
- Type2 dynamicType = DynamicTypeImpl.instance; |
- if (identical(this, dynamicType) || identical(type, dynamicType)) { |
- return dynamicType; |
- } |
- if (type is! InterfaceType) { |
- return null; |
- } |
- InterfaceType i = this; |
- InterfaceType j = type as InterfaceType; |
- Set<InterfaceType> si = computeSuperinterfaceSet(i); |
- Set<InterfaceType> sj = computeSuperinterfaceSet(j); |
- javaSetAdd(si, i); |
- javaSetAdd(sj, j); |
- List<InterfaceType> s = intersection(si, sj); |
- List<int> depths = new List<int>.filled(s.length, 0); |
- int maxDepth = 0; |
- for (int n = 0; n < s.length; n++) { |
- depths[n] = computeLongestInheritancePathToObject(s[n]); |
- if (depths[n] > maxDepth) { |
- maxDepth = depths[n]; |
- } |
- } |
- for (; maxDepth >= 0; maxDepth--) { |
- int indexOfLeastUpperBound = -1; |
- int numberOfTypesAtMaxDepth = 0; |
- for (int m = 0; m < depths.length; m++) { |
- if (depths[m] == maxDepth) { |
- numberOfTypesAtMaxDepth++; |
- indexOfLeastUpperBound = m; |
- } |
- } |
- if (numberOfTypesAtMaxDepth == 1) { |
- return s[indexOfLeastUpperBound]; |
- } |
- } |
- return null; |
- } |
- MethodElement getMethod(String methodName) => MethodMember.from(((element as ClassElementImpl)).getMethod(methodName), this); |
- List<MethodElement> get methods { |
- List<MethodElement> methods = element.methods; |
- List<MethodElement> members = new List<MethodElement>(methods.length); |
- for (int i = 0; i < methods.length; i++) { |
- members[i] = MethodMember.from(methods[i], this); |
- } |
- return members; |
- } |
- List<InterfaceType> get mixins { |
- ClassElement classElement = element; |
- List<InterfaceType> mixins = classElement.mixins; |
- List<TypeParameterElement> typeParameters = classElement.typeParameters; |
- List<Type2> parameterTypes = classElement.type.typeArguments; |
- if (typeParameters.length == 0) { |
- return mixins; |
- } |
- int count = mixins.length; |
- List<InterfaceType> typedMixins = new List<InterfaceType>(count); |
- for (int i = 0; i < count; i++) { |
- typedMixins[i] = mixins[i].substitute2(_typeArguments, parameterTypes); |
- } |
- return typedMixins; |
- } |
- PropertyAccessorElement getSetter(String setterName) => PropertyAccessorMember.from(((element as ClassElementImpl)).getSetter(setterName), this); |
- InterfaceType get superclass { |
- ClassElement classElement = element; |
- InterfaceType supertype = classElement.supertype; |
- if (supertype == null) { |
- return null; |
- } |
- return supertype.substitute2(_typeArguments, classElement.type.typeArguments); |
- } |
- List<Type2> get typeArguments => _typeArguments; |
- List<TypeParameterElement> get typeParameters => element.typeParameters; |
- int get hashCode { |
- ClassElement element = this.element; |
- if (element == null) { |
- return 0; |
- } |
- return element.hashCode; |
- } |
- bool get isDartCoreFunction { |
- ClassElement element = this.element; |
- if (element == null) { |
- return false; |
- } |
- return element.name == "Function" && element.library.isDartCore; |
- } |
- bool isDirectSupertypeOf(InterfaceType type) { |
- ClassElement i = element; |
- ClassElement j = type.element; |
- InterfaceType supertype = j.supertype; |
- if (supertype == null) { |
- return false; |
- } |
- ClassElement supertypeElement = supertype.element; |
- if (supertypeElement == i) { |
- return true; |
- } |
- for (InterfaceType interfaceType in j.interfaces) { |
- if (interfaceType.element == i) { |
- return true; |
- } |
- } |
- for (InterfaceType mixinType in j.mixins) { |
- if (mixinType.element == i) { |
- return true; |
- } |
- } |
- return false; |
- } |
- bool isMoreSpecificThan(Type2 type) { |
- if (identical(type, DynamicTypeImpl.instance)) { |
- return true; |
- } else if (type is! InterfaceType) { |
- return false; |
- } |
- return isMoreSpecificThan2(type as InterfaceType, new Set<ClassElement>()); |
- } |
- bool get isObject => element.supertype == null; |
- bool isSubtypeOf(Type2 type) { |
- if (identical(type, DynamicTypeImpl.instance)) { |
- return true; |
- } else if (type is TypeParameterType) { |
- return true; |
- } else if (type is FunctionType) { |
- ClassElement element = this.element; |
- MethodElement callMethod = element.lookUpMethod("call", element.library); |
- if (callMethod != null) { |
- return callMethod.type.isSubtypeOf(type); |
- } |
- return false; |
- } else if (type is! InterfaceType) { |
- return false; |
- } else if (this == type) { |
- return true; |
- } |
- return isSubtypeOf2(type as InterfaceType, new Set<ClassElement>()); |
- } |
- ConstructorElement lookUpConstructor(String constructorName, LibraryElement library) { |
- ConstructorElement constructorElement; |
- if (constructorName == null) { |
- constructorElement = element.unnamedConstructor; |
- } else { |
- constructorElement = element.getNamedConstructor(constructorName); |
- } |
- if (constructorElement == null || !constructorElement.isAccessibleIn(library)) { |
- return null; |
- } |
- return ConstructorMember.from(constructorElement, this); |
- } |
- PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library) { |
- PropertyAccessorElement element = getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- return lookUpGetterInSuperclass(getterName, library); |
- } |
- PropertyAccessorElement lookUpGetterInSuperclass(String getterName, LibraryElement library) { |
- for (InterfaceType mixin in mixins) { |
- PropertyAccessorElement element = mixin.getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- InterfaceType supertype = superclass; |
- ClassElement supertypeElement = supertype == null ? null : supertype.element; |
- while (supertype != null && !visitedClasses.contains(supertypeElement)) { |
- javaSetAdd(visitedClasses, supertypeElement); |
- PropertyAccessorElement element = supertype.getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in supertype.mixins) { |
- element = mixin.getGetter(getterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- supertype = supertype.superclass; |
- supertypeElement = supertype == null ? null : supertype.element; |
- } |
- return null; |
- } |
- MethodElement lookUpMethod(String methodName, LibraryElement library) { |
- MethodElement element = getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- return lookUpMethodInSuperclass(methodName, library); |
- } |
- MethodElement lookUpMethodInSuperclass(String methodName, LibraryElement library) { |
- for (InterfaceType mixin in mixins) { |
- MethodElement element = mixin.getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- InterfaceType supertype = superclass; |
- ClassElement supertypeElement = supertype == null ? null : supertype.element; |
- while (supertype != null && !visitedClasses.contains(supertypeElement)) { |
- javaSetAdd(visitedClasses, supertypeElement); |
- MethodElement element = supertype.getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in supertype.mixins) { |
- element = mixin.getMethod(methodName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- supertype = supertype.superclass; |
- supertypeElement = supertype == null ? null : supertype.element; |
- } |
- return null; |
- } |
- PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library) { |
- PropertyAccessorElement element = getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- return lookUpSetterInSuperclass(setterName, library); |
- } |
- PropertyAccessorElement lookUpSetterInSuperclass(String setterName, LibraryElement library) { |
- for (InterfaceType mixin in mixins) { |
- PropertyAccessorElement element = mixin.getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- Set<ClassElement> visitedClasses = new Set<ClassElement>(); |
- InterfaceType supertype = superclass; |
- ClassElement supertypeElement = supertype == null ? null : supertype.element; |
- while (supertype != null && !visitedClasses.contains(supertypeElement)) { |
- javaSetAdd(visitedClasses, supertypeElement); |
- PropertyAccessorElement element = supertype.getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- for (InterfaceType mixin in supertype.mixins) { |
- element = mixin.getSetter(setterName); |
- if (element != null && element.isAccessibleIn(library)) { |
- return element; |
- } |
- } |
- supertype = supertype.superclass; |
- supertypeElement = supertype == null ? null : supertype.element; |
- } |
- return null; |
- } |
- |
- /** |
- * Set the actual types of the type arguments to those in the given array. |
- * |
- * @param typeArguments the actual types of the type arguments |
- */ |
- void set typeArguments(List<Type2> typeArguments) { |
- this._typeArguments = typeArguments; |
- } |
- InterfaceTypeImpl substitute4(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments); |
- InterfaceTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { |
- if (argumentTypes.length != parameterTypes.length) { |
- throw new IllegalArgumentException("argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})"); |
- } |
- if (argumentTypes.length == 0 || _typeArguments.length == 0) { |
- return this; |
- } |
- List<Type2> newTypeArguments = TypeImpl.substitute(_typeArguments, argumentTypes, parameterTypes); |
- if (JavaArrays.equals(newTypeArguments, _typeArguments)) { |
- return this; |
- } |
- InterfaceTypeImpl newType = new InterfaceTypeImpl.con1(element); |
- newType.typeArguments = newTypeArguments; |
- return newType; |
- } |
- void appendTo(JavaStringBuilder builder) { |
- builder.append(name); |
- int argumentCount = _typeArguments.length; |
- if (argumentCount > 0) { |
- builder.append("<"); |
- for (int i = 0; i < argumentCount; i++) { |
- if (i > 0) { |
- builder.append(", "); |
- } |
- ((_typeArguments[i] as TypeImpl)).appendTo(builder); |
- } |
- builder.append(">"); |
- } |
- } |
- bool isMoreSpecificThan2(InterfaceType s, Set<ClassElement> visitedClasses) { |
- if (this == s) { |
- return true; |
- } |
- if (s.isDirectSupertypeOf(this)) { |
- return true; |
- } |
- ClassElement tElement = this.element; |
- ClassElement sElement = s.element; |
- if (tElement == sElement) { |
- List<Type2> tArguments = typeArguments; |
- List<Type2> sArguments = s.typeArguments; |
- if (tArguments.length != sArguments.length) { |
- return false; |
- } |
- for (int i = 0; i < tArguments.length; i++) { |
- if (!tArguments[i].isMoreSpecificThan(sArguments[i])) { |
- return false; |
- } |
- } |
- return true; |
- } |
- ClassElement element = this.element; |
- if (element == null || visitedClasses.contains(element)) { |
- return false; |
- } |
- javaSetAdd(visitedClasses, element); |
- InterfaceType supertype = superclass; |
- if (supertype != null && ((supertype as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) { |
- return true; |
- } |
- for (InterfaceType interfaceType in interfaces) { |
- if (((interfaceType as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) { |
- return true; |
- } |
- } |
- for (InterfaceType mixinType in mixins) { |
- if (((mixinType as InterfaceTypeImpl)).isMoreSpecificThan2(s, visitedClasses)) { |
- return true; |
- } |
- } |
- return false; |
- } |
- bool isSubtypeOf2(InterfaceType type, Set<ClassElement> visitedClasses) { |
- InterfaceType typeT = this; |
- InterfaceType typeS = type; |
- ClassElement elementT = element; |
- if (elementT == null || visitedClasses.contains(elementT)) { |
- return false; |
- } |
- javaSetAdd(visitedClasses, elementT); |
- typeT = substitute2(_typeArguments, elementT.type.typeArguments); |
- if (typeT == typeS) { |
- return true; |
- } else if (elementT == typeS.element) { |
- List<Type2> typeTArgs = typeT.typeArguments; |
- List<Type2> typeSArgs = typeS.typeArguments; |
- if (typeTArgs.length != typeSArgs.length) { |
- return false; |
- } |
- for (int i = 0; i < typeTArgs.length; i++) { |
- if (!typeTArgs[i].isSubtypeOf(typeSArgs[i])) { |
- return false; |
- } |
- } |
- return true; |
- } else if (typeS.isDartCoreFunction && elementT.getMethod("call") != null) { |
- return true; |
- } |
- InterfaceType supertype = superclass; |
- if (supertype != null && ((supertype as InterfaceTypeImpl)).isSubtypeOf2(typeS, visitedClasses)) { |
- return true; |
- } |
- List<InterfaceType> interfaceTypes = interfaces; |
- for (InterfaceType interfaceType in interfaceTypes) { |
- if (((interfaceType as InterfaceTypeImpl)).isSubtypeOf2(typeS, visitedClasses)) { |
- return true; |
- } |
- } |
- List<InterfaceType> mixinTypes = mixins; |
- for (InterfaceType mixinType in mixinTypes) { |
- if (((mixinType as InterfaceTypeImpl)).isSubtypeOf2(typeS, visitedClasses)) { |
- return true; |
- } |
- } |
- return false; |
- } |
-} |
-/** |
- * The abstract class `TypeImpl` implements the behavior common to objects representing the |
- * declared type of elements in the element model. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class TypeImpl implements Type2 { |
- |
- /** |
- * Return an array containing the results of using the given argument types and parameter types to |
- * perform a substitution on all of the given types. |
- * |
- * @param types the types on which a substitution is to be performed |
- * @param argumentTypes the argument types for the substitution |
- * @param parameterTypes the parameter types for the substitution |
- * @return the result of performing the substitution on each of the types |
- */ |
- static List<Type2> substitute(List<Type2> types, List<Type2> argumentTypes, List<Type2> parameterTypes) { |
- int length = types.length; |
- if (length == 0) { |
- return types; |
- } |
- List<Type2> newTypes = new List<Type2>(length); |
- for (int i = 0; i < length; i++) { |
- newTypes[i] = types[i].substitute2(argumentTypes, parameterTypes); |
- } |
- return newTypes; |
- } |
- |
- /** |
- * The element representing the declaration of this type, or `null` if the type has not, or |
- * cannot, be associated with an element. |
- */ |
- Element _element; |
- |
- /** |
- * The name of this type, or `null` if the type does not have a name. |
- */ |
- String _name; |
- |
- /** |
- * An empty array of types. |
- */ |
- static List<Type2> EMPTY_ARRAY = new List<Type2>(0); |
- |
- /** |
- * Initialize a newly created type to be declared by the given element and to have the given name. |
- * |
- * @param element the element representing the declaration of the type |
- * @param name the name of the type |
- */ |
- TypeImpl(Element element, String name) { |
- this._element = element; |
- this._name = name; |
- } |
- String get displayName => name; |
- Element get element => _element; |
- Type2 getLeastUpperBound(Type2 type) => null; |
- String get name => _name; |
- bool isAssignableTo(Type2 type) => this.isSubtypeOf(type) || type.isSubtypeOf(this); |
- bool get isBottom => false; |
- bool get isDartCoreFunction => false; |
- bool get isDynamic => false; |
- bool isMoreSpecificThan(Type2 type) => false; |
- bool get isObject => false; |
- bool isSupertypeOf(Type2 type) => type.isSubtypeOf(this); |
- bool get isVoid => false; |
- String toString() { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- appendTo(builder); |
- return builder.toString(); |
- } |
- |
- /** |
- * Append a textual representation of this type to the given builder. |
- * |
- * @param builder the builder to which the text is to be appended |
- */ |
- void appendTo(JavaStringBuilder builder) { |
- if (_name == null) { |
- builder.append("<unnamed type>"); |
- } else { |
- builder.append(_name); |
- } |
- } |
-} |
-/** |
- * Instances of the class `TypeParameterTypeImpl` defines the behavior of objects representing |
- * the type introduced by a type parameter. |
- * |
- * @coverage dart.engine.type |
- */ |
-class TypeParameterTypeImpl extends TypeImpl implements TypeParameterType { |
- |
- /** |
- * An empty array of type parameter types. |
- */ |
- static List<TypeParameterType> EMPTY_ARRAY = new List<TypeParameterType>(0); |
- |
- /** |
- * Return an array containing the type parameter types defined by the given array of type |
- * parameter elements. |
- * |
- * @param typeParameters the type parameter elements defining the type parameter types to be |
- * returned |
- * @return the type parameter types defined by the type parameter elements |
- */ |
- static List<TypeParameterType> getTypes(List<TypeParameterElement> typeParameters) { |
- int count = typeParameters.length; |
- if (count == 0) { |
- return EMPTY_ARRAY; |
- } |
- List<TypeParameterType> types = new List<TypeParameterType>(count); |
- for (int i = 0; i < count; i++) { |
- types[i] = typeParameters[i].type; |
- } |
- return types; |
- } |
- |
- /** |
- * Initialize a newly created type parameter type to be declared by the given element and to have |
- * the given name. |
- * |
- * @param element the element representing the declaration of the type parameter |
- */ |
- TypeParameterTypeImpl(TypeParameterElement element) : super(element, element.name); |
- bool operator ==(Object object) => object is TypeParameterTypeImpl && (element == ((object as TypeParameterTypeImpl)).element); |
- TypeParameterElement get element => super.element as TypeParameterElement; |
- int get hashCode => element.hashCode; |
- bool isMoreSpecificThan(Type2 s) { |
- if (this == s) { |
- return true; |
- } |
- if (s.isBottom) { |
- return true; |
- } |
- if (s.isDynamic) { |
- return true; |
- } |
- return isMoreSpecificThan3(s, new Set<Type2>()); |
- } |
- bool isSubtypeOf(Type2 s) => isMoreSpecificThan(s); |
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { |
- int length = parameterTypes.length; |
- for (int i = 0; i < length; i++) { |
- if (parameterTypes[i] == this) { |
- return argumentTypes[i]; |
- } |
- } |
- return this; |
- } |
- bool isMoreSpecificThan3(Type2 s, Set<Type2> visitedTypes) { |
- Type2 bound = element.bound; |
- if (s == bound) { |
- return true; |
- } |
- if (s.isObject) { |
- return true; |
- } |
- if (bound == null) { |
- return false; |
- } |
- if (bound is TypeParameterTypeImpl) { |
- TypeParameterTypeImpl boundTypeParameter = bound as TypeParameterTypeImpl; |
- if (visitedTypes.contains(bound)) { |
- return false; |
- } |
- javaSetAdd(visitedTypes, bound); |
- return boundTypeParameter.isMoreSpecificThan3(s, visitedTypes); |
- } |
- return bound.isMoreSpecificThan(s); |
- } |
-} |
-/** |
- * The unique instance of the class `VoidTypeImpl` implements the type `void`. |
- * |
- * @coverage dart.engine.type |
- */ |
-class VoidTypeImpl extends TypeImpl implements VoidType { |
- |
- /** |
- * The unique instance of this class. |
- */ |
- static final VoidTypeImpl instance = new VoidTypeImpl(); |
- |
- /** |
- * Prevent the creation of instances of this class. |
- */ |
- VoidTypeImpl() : super(null, Keyword.VOID.syntax); |
- bool operator ==(Object object) => identical(object, this); |
- bool isSubtypeOf(Type2 type) => identical(type, this) || identical(type, DynamicTypeImpl.instance); |
- bool get isVoid => true; |
- VoidTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) => this; |
-} |
-/** |
- * The interface `FunctionType` defines the behavior common to objects representing the type |
- * of a function, method, constructor, getter, or setter. Function types come in three variations: |
- * <ol> |
- * * The types of functions that only have required parameters. These have the general form |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>) → T</i>. |
- * * The types of functions with optional positional parameters. These have the general form |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>, [T<sub>n+1</sub>, …, T<sub>n+k</sub>]) → |
- * T</i>. |
- * * The types of functions with named parameters. These have the general form <i>(T<sub>1</sub>, |
- * …, T<sub>n</sub>, {T<sub>x1</sub> x1, …, T<sub>xk</sub> xk}) → T</i>. |
- * </ol> |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class FunctionType implements ParameterizedType { |
- |
- /** |
- * Return a map from the names of named parameters to the types of the named parameters of this |
- * type of function. The entries in the map will be iterated in the same order as the order in |
- * which the named parameters were defined. If there were no named parameters declared then the |
- * map will be empty. |
- * |
- * @return a map from the name to the types of the named parameters of this type of function |
- */ |
- Map<String, Type2> get namedParameterTypes; |
- |
- /** |
- * Return an array containing the types of the normal parameters of this type of function. The |
- * parameter types are in the same order as they appear in the declaration of the function. |
- * |
- * @return the types of the normal parameters of this type of function |
- */ |
- List<Type2> get normalParameterTypes; |
- |
- /** |
- * Return a map from the names of optional (positional) parameters to the types of the optional |
- * parameters of this type of function. The entries in the map will be iterated in the same order |
- * as the order in which the optional parameters were defined. If there were no optional |
- * parameters declared then the map will be empty. |
- * |
- * @return a map from the name to the types of the optional parameters of this type of function |
- */ |
- List<Type2> get optionalParameterTypes; |
- |
- /** |
- * Return an array containing the parameters elements of this type of function. The parameter |
- * types are in the same order as they appear in the declaration of the function. |
- * |
- * @return the parameters elements of this type of function |
- */ |
- List<ParameterElement> get parameters; |
- |
- /** |
- * Return the type of object returned by this type of function. |
- * |
- * @return the type of object returned by this type of function |
- */ |
- Type2 get returnType; |
- |
- /** |
- * Return `true` if this type is a subtype of the given type. |
- * |
- * A function type <i>(T<sub>1</sub>, …, T<sub>n</sub>) → T</i> is a subtype of the |
- * function type <i>(S<sub>1</sub>, …, S<sub>n</sub>) → S</i>, if all of the following |
- * conditions are met: |
- * |
- * * Either |
- * |
- * * <i>S</i> is void, or |
- * * <i>T ⇔ S</i>. |
- * |
- * |
- * * For all <i>i</i>, 1 <= <i>i</i> <= <i>n</i>, <i>T<sub>i</sub> ⇔ S<sub>i</sub></i>. |
- * |
- * A function type <i>(T<sub>1</sub>, …, T<sub>n</sub>, [T<sub>n+1</sub>, …, |
- * T<sub>n+k</sub>]) → T</i> is a subtype of the function type <i>(S<sub>1</sub>, …, |
- * S<sub>n</sub>, [S<sub>n+1</sub>, …, S<sub>n+m</sub>]) → S</i>, if all of the |
- * following conditions are met: |
- * |
- * * Either |
- * |
- * * <i>S</i> is void, or |
- * * <i>T ⇔ S</i>. |
- * |
- * |
- * * <i>k</i> >= <i>m</i> and for all <i>i</i>, 1 <= <i>i</i> <= <i>n+m</i>, <i>T<sub>i</sub> |
- * ⇔ S<sub>i</sub></i>. |
- * |
- * A function type <i>(T<sub>1</sub>, …, T<sub>n</sub>, {T<sub>x1</sub> x1, …, |
- * T<sub>xk</sub> xk}) → T</i> is a subtype of the function type <i>(S<sub>1</sub>, …, |
- * S<sub>n</sub>, {S<sub>y1</sub> y1, …, S<sub>ym</sub> ym}) → S</i>, if all of the |
- * following conditions are met: |
- * |
- * * Either |
- * |
- * * <i>S</i> is void, |
- * * or <i>T ⇔ S</i>. |
- * |
- * |
- * * For all <i>i</i>, 1 <= <i>i</i> <= <i>n</i>, <i>T<sub>i</sub> ⇔ S<sub>i</sub></i>. |
- * * <i>k</i> >= <i>m</i> and <i>y<sub>i</sub></i> in <i>{x<sub>1</sub>, …, |
- * x<sub>k</sub>}</i>, 1 <= <i>i</i> <= <i>m</i>. |
- * * For all <i>y<sub>i</sub></i> in <i>{y<sub>1</sub>, …, y<sub>m</sub>}</i>, |
- * <i>y<sub>i</sub> = x<sub>j</sub> => Tj ⇔ Si</i>. |
- * |
- * In addition, the following subtype rules apply: |
- * |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>, []) → T <: (T<sub>1</sub>, …, |
- * T<sub>n</sub>) → T.</i><br> |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>) → T <: (T<sub>1</sub>, …, |
- * T<sub>n</sub>, {}) → T.</i><br> |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>, {}) → T <: (T<sub>1</sub>, …, |
- * T<sub>n</sub>) → T.</i><br> |
- * <i>(T<sub>1</sub>, …, T<sub>n</sub>) → T <: (T<sub>1</sub>, …, |
- * T<sub>n</sub>, []) → T.</i> |
- * |
- * All functions implement the class `Function`. However not all function types are a |
- * subtype of `Function`. If an interface type <i>I</i> includes a method named |
- * `call()`, and the type of `call()` is the function type <i>F</i>, then <i>I</i> is |
- * considered to be a subtype of <i>F</i>. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is a subtype of the given type |
- */ |
- bool isSubtypeOf(Type2 type); |
- |
- /** |
- * Return the type resulting from substituting the given arguments for this type's parameters. |
- * This is fully equivalent to `substitute(argumentTypes, getTypeArguments())`. |
- * |
- * @param argumentTypes the actual type arguments being substituted for the type parameters |
- * @return the result of performing the substitution |
- */ |
- FunctionType substitute3(List<Type2> argumentTypes); |
- FunctionType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); |
-} |
-/** |
- * The interface `InterfaceType` defines the behavior common to objects representing the type |
- * introduced by either a class or an interface, or a reference to such a type. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class InterfaceType implements ParameterizedType { |
- |
- /** |
- * Return an array containing all of the accessors (getters and setters) declared in this type. |
- * |
- * @return the accessors declared in this type |
- */ |
- List<PropertyAccessorElement> get accessors; |
- ClassElement get element; |
- |
- /** |
- * Return the element representing the getter with the given name that is declared in this class, |
- * or `null` if this class does not declare a getter with the given name. |
- * |
- * @param getterName the name of the getter to be returned |
- * @return the getter declared in this class with the given name |
- */ |
- PropertyAccessorElement getGetter(String getterName); |
- |
- /** |
- * Return an array containing all of the interfaces that are implemented by this interface. Note |
- * that this is <b>not</b>, in general, equivalent to getting the interfaces from this type's |
- * element because the types returned by this method will have had their type parameters replaced. |
- * |
- * @return the interfaces that are implemented by this type |
- */ |
- List<InterfaceType> get interfaces; |
- |
- /** |
- * Return the least upper bound of this type and the given type, or `null` if there is no |
- * least upper bound. |
- * |
- * Given two interfaces <i>I</i> and <i>J</i>, let <i>S<sub>I</sub></i> be the set of |
- * superinterfaces of <i>I<i>, let <i>S<sub>J</sub></i> be the set of superinterfaces of <i>J</i> |
- * and let <i>S = (I ∪ S<sub>I</sub>) ∩ (J ∪ S<sub>J</sub>)</i>. Furthermore, we |
- * define <i>S<sub>n</sub> = {T | T ∈ S ∧ depth(T) = n}</i> for any finite <i>n</i>, |
- * where <i>depth(T)</i> is the number of steps in the longest inheritance path from <i>T</i> to |
- * <i>Object</i>. Let <i>q</i> be the largest number such that <i>S<sub>q</sub></i> has |
- * cardinality one. The least upper bound of <i>I</i> and <i>J</i> is the sole element of |
- * <i>S<sub>q</sub></i>. |
- * |
- * @param type the other type used to compute the least upper bound |
- * @return the least upper bound of this type and the given type |
- */ |
- Type2 getLeastUpperBound(Type2 type); |
- |
- /** |
- * Return the element representing the method with the given name that is declared in this class, |
- * or `null` if this class does not declare a method with the given name. |
- * |
- * @param methodName the name of the method to be returned |
- * @return the method declared in this class with the given name |
- */ |
- MethodElement getMethod(String methodName); |
- |
- /** |
- * Return an array containing all of the methods declared in this type. |
- * |
- * @return the methods declared in this type |
- */ |
- List<MethodElement> get methods; |
- |
- /** |
- * Return an array containing all of the mixins that are applied to the class being extended in |
- * order to derive the superclass of this class. Note that this is <b>not</b>, in general, |
- * equivalent to getting the mixins from this type's element because the types returned by this |
- * method will have had their type parameters replaced. |
- * |
- * @return the mixins that are applied to derive the superclass of this class |
- */ |
- List<InterfaceType> get mixins; |
- |
- /** |
- * Return the element representing the setter with the given name that is declared in this class, |
- * or `null` if this class does not declare a setter with the given name. |
- * |
- * @param setterName the name of the setter to be returned |
- * @return the setter declared in this class with the given name |
- */ |
- PropertyAccessorElement getSetter(String setterName); |
- |
- /** |
- * Return the type representing the superclass of this type, or null if this type represents the |
- * class 'Object'. Note that this is <b>not</b>, in general, equivalent to getting the superclass |
- * from this type's element because the type returned by this method will have had it's type |
- * parameters replaced. |
- * |
- * @return the superclass of this type |
- */ |
- InterfaceType get superclass; |
- |
- /** |
- * Return `true` if this type is a direct supertype of the given type. The implicit |
- * interface of class <i>I</i> is a direct supertype of the implicit interface of class <i>J</i> |
- * iff: |
- * |
- * * <i>I</i> is Object, and <i>J</i> has no extends clause. |
- * * <i>I</i> is listed in the extends clause of <i>J</i>. |
- * * <i>I</i> is listed in the implements clause of <i>J</i>. |
- * * <i>I</i> is listed in the with clause of <i>J</i>. |
- * * <i>J</i> is a mixin application of the mixin of <i>I</i>. |
- * |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is a direct supertype of the given type |
- */ |
- bool isDirectSupertypeOf(InterfaceType type); |
- |
- /** |
- * Return `true` if this type is more specific than the given type. An interface type |
- * <i>T</i> is more specific than an interface type <i>S</i>, written <i>T « S</i>, if one |
- * of the following conditions is met: |
- * |
- * * Reflexivity: <i>T</i> is <i>S</i>. |
- * * <i>T</i> is bottom. |
- * * <i>S</i> is dynamic. |
- * * Direct supertype: <i>S</i> is a direct supertype of <i>T</i>. |
- * * <i>T</i> is a type parameter and <i>S</i> is the upper bound of <i>T</i>. |
- * * Covariance: <i>T</i> is of the form <i>I<T<sub>1</sub>, …, T<sub>n</sub>></i> |
- * and S</i> is of the form <i>I<S<sub>1</sub>, …, S<sub>n</sub>></i> and |
- * <i>T<sub>i</sub> « S<sub>i</sub></i>, <i>1 <= i <= n</i>. |
- * * Transitivity: <i>T « U</i> and <i>U « S</i>. |
- * |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is more specific than the given type |
- */ |
- bool isMoreSpecificThan(Type2 type); |
- |
- /** |
- * Return `true` if this type is a subtype of the given type. An interface type <i>T</i> is |
- * a subtype of an interface type <i>S</i>, written <i>T</i> <: <i>S</i>, iff |
- * <i>[bottom/dynamic]T</i> « <i>S</i> (<i>T</i> is more specific than <i>S</i>). If an |
- * interface type <i>I</i> includes a method named <i>call()</i>, and the type of <i>call()</i> is |
- * the function type <i>F</i>, then <i>I</i> is considered to be a subtype of <i>F</i>. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is a subtype of the given type |
- */ |
- bool isSubtypeOf(Type2 type); |
- |
- /** |
- * Return the element representing the constructor that results from looking up the given |
- * constructor in this class with respect to the given library, or `null` if the look up |
- * fails. The behavior of this method is defined by the Dart Language Specification in section |
- * 12.11.1: <blockquote>If <i>e</i> is of the form <b>new</b> <i>T.id()</i> then let <i>q<i> be |
- * the constructor <i>T.id</i>, otherwise let <i>q<i> be the constructor <i>T<i>. Otherwise, if |
- * <i>q</i> is not defined or not accessible, a NoSuchMethodException is thrown. </blockquote> |
- * |
- * @param constructorName the name of the constructor being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given constructor in this class with respect to the given |
- * library |
- */ |
- ConstructorElement lookUpConstructor(String constructorName, LibraryElement library); |
- |
- /** |
- * Return the element representing the getter that results from looking up the given getter in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.15.1: |
- * <blockquote>The result of looking up getter (respectively setter) <i>m</i> in class <i>C</i> |
- * with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param getterName the name of the getter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given getter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpGetter(String getterName, LibraryElement library); |
- |
- /** |
- * Return the element representing the getter that results from looking up the given getter in the |
- * superclass of this class with respect to the given library, or `null` if the look up |
- * fails. The behavior of this method is defined by the Dart Language Specification in section |
- * 12.15.1: <blockquote>The result of looking up getter (respectively setter) <i>m</i> in class |
- * <i>C</i> with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param getterName the name of the getter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given getter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpGetterInSuperclass(String getterName, LibraryElement library); |
- |
- /** |
- * Return the element representing the method that results from looking up the given method in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.15.1: |
- * <blockquote> The result of looking up method <i>m</i> in class <i>C</i> with respect to library |
- * <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance method named <i>m</i> that is accessible to <i>L</i>, then |
- * that method is the result of the lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then |
- * the result of the lookup is the result of looking up method <i>m</i> in <i>S</i> with respect |
- * to <i>L</i>. Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param methodName the name of the method being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given method in this class with respect to the given |
- * library |
- */ |
- MethodElement lookUpMethod(String methodName, LibraryElement library); |
- |
- /** |
- * Return the element representing the method that results from looking up the given method in the |
- * superclass of this class with respect to the given library, or `null` if the look up |
- * fails. The behavior of this method is defined by the Dart Language Specification in section |
- * 12.15.1: <blockquote> The result of looking up method <i>m</i> in class <i>C</i> with respect |
- * to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance method named <i>m</i> that is accessible to <i>L</i>, then |
- * that method is the result of the lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then |
- * the result of the lookup is the result of looking up method <i>m</i> in <i>S</i> with respect |
- * to <i>L</i>. Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param methodName the name of the method being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given method in this class with respect to the given |
- * library |
- */ |
- MethodElement lookUpMethodInSuperclass(String methodName, LibraryElement library); |
- |
- /** |
- * Return the element representing the setter that results from looking up the given setter in |
- * this class with respect to the given library, or `null` if the look up fails. The |
- * behavior of this method is defined by the Dart Language Specification in section 12.16: |
- * <blockquote> The result of looking up getter (respectively setter) <i>m</i> in class <i>C</i> |
- * with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param setterName the name of the setter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given setter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpSetter(String setterName, LibraryElement library); |
- |
- /** |
- * Return the element representing the setter that results from looking up the given setter in the |
- * superclass of this class with respect to the given library, or `null` if the look up |
- * fails. The behavior of this method is defined by the Dart Language Specification in section |
- * 12.16: <blockquote> The result of looking up getter (respectively setter) <i>m</i> in class |
- * <i>C</i> with respect to library <i>L</i> is: |
- * |
- * * If <i>C</i> declares an instance getter (respectively setter) named <i>m</i> that is |
- * accessible to <i>L</i>, then that getter (respectively setter) is the result of the lookup. |
- * Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result of the lookup is the result |
- * of looking up getter (respectively setter) <i>m</i> in <i>S</i> with respect to <i>L</i>. |
- * Otherwise, we say that the lookup has failed. |
- * |
- * </blockquote> |
- * |
- * @param setterName the name of the setter being looked up |
- * @param library the library with respect to which the lookup is being performed |
- * @return the result of looking up the given setter in this class with respect to the given |
- * library |
- */ |
- PropertyAccessorElement lookUpSetterInSuperclass(String setterName, LibraryElement library); |
- |
- /** |
- * Return the type resulting from substituting the given arguments for this type's parameters. |
- * This is fully equivalent to `substitute(argumentTypes, getTypeArguments())`. |
- * |
- * @param argumentTypes the actual type arguments being substituted for the type parameters |
- * @return the result of performing the substitution |
- */ |
- InterfaceType substitute4(List<Type2> argumentTypes); |
- InterfaceType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); |
-} |
-/** |
- * The interface `ParameterizedType` defines the behavior common to objects representing a |
- * type with type parameters, such as a class or function type alias. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class ParameterizedType implements Type2 { |
- |
- /** |
- * Return an array containing the actual types of the type arguments. If this type's element does |
- * not have type parameters, then the array should be empty (although it is possible for type |
- * arguments to be erroneously declared). If the element has type parameters and the actual type |
- * does not explicitly include argument values, then the type "dynamic" will be automatically |
- * provided. |
- * |
- * @return the actual types of the type arguments |
- */ |
- List<Type2> get typeArguments; |
- |
- /** |
- * Return an array containing all of the type parameters declared for this type. |
- * |
- * @return the type parameters declared for this type |
- */ |
- List<TypeParameterElement> get typeParameters; |
-} |
-/** |
- * The interface `Type` defines the behavior of objects representing the declared type of |
- * elements in the element model. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class Type2 { |
- |
- /** |
- * Return the name of this type as it should appear when presented to users in contexts such as |
- * error messages. |
- * |
- * @return the name of this type |
- */ |
- String get displayName; |
- |
- /** |
- * Return the element representing the declaration of this type, or `null` if the type has |
- * not, or cannot, be associated with an element. The former case will occur if the element model |
- * is not yet complete; the latter case will occur if this object represents an undefined type. |
- * |
- * @return the element representing the declaration of this type |
- */ |
- Element get element; |
- |
- /** |
- * Return the least upper bound of this type and the given type, or `null` if there is no |
- * least upper bound. |
- * |
- * @param type the other type used to compute the least upper bound |
- * @return the least upper bound of this type and the given type |
- */ |
- Type2 getLeastUpperBound(Type2 type); |
- |
- /** |
- * Return the name of this type, or `null` if the type does not have a name, such as when |
- * the type represents the type of an unnamed function. |
- * |
- * @return the name of this type |
- */ |
- String get name; |
- |
- /** |
- * Return `true` if this type is assignable to the given type. A type <i>T</i> may be |
- * assigned to a type <i>S</i>, written <i>T</i> ⇔ <i>S</i>, iff either <i>T</i> <: <i>S</i> |
- * or <i>S</i> <: <i>T</i>. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is assignable to the given type |
- */ |
- bool isAssignableTo(Type2 type); |
- |
- /** |
- * Return `true` if this type represents the bottom type. |
- * |
- * @return `true` if this type represents the bottom type |
- */ |
- bool get isBottom; |
- |
- /** |
- * Return `true` if this type represents the type 'Function' defined in the dart:core |
- * library. |
- * |
- * @return `true` if this type represents the type 'Function' defined in the dart:core |
- * library |
- */ |
- bool get isDartCoreFunction; |
- |
- /** |
- * Return `true` if this type represents the type 'dynamic'. |
- * |
- * @return `true` if this type represents the type 'dynamic' |
- */ |
- bool get isDynamic; |
- |
- /** |
- * Return `true` if this type is more specific than the given type. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is more specific than the given type |
- */ |
- bool isMoreSpecificThan(Type2 type); |
- |
- /** |
- * Return `true` if this type represents the type 'Object'. |
- * |
- * @return `true` if this type represents the type 'Object' |
- */ |
- bool get isObject; |
- |
- /** |
- * Return `true` if this type is a subtype of the given type. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is a subtype of the given type |
- */ |
- bool isSubtypeOf(Type2 type); |
- |
- /** |
- * Return `true` if this type is a supertype of the given type. A type <i>S</i> is a |
- * supertype of <i>T</i>, written <i>S</i> :> <i>T</i>, iff <i>T</i> is a subtype of <i>S</i>. |
- * |
- * @param type the type being compared with this type |
- * @return `true` if this type is a supertype of the given type |
- */ |
- bool isSupertypeOf(Type2 type); |
- |
- /** |
- * Return `true` if this type represents the type 'void'. |
- * |
- * @return `true` if this type represents the type 'void' |
- */ |
- bool get isVoid; |
- |
- /** |
- * Return the type resulting from substituting the given arguments for the given parameters in |
- * this type. The specification defines this operation in section 2: <blockquote> The notation |
- * <i>[x<sub>1</sub>, ..., x<sub>n</sub>/y<sub>1</sub>, ..., y<sub>n</sub>]E</i> denotes a copy of |
- * <i>E</i> in which all occurrences of <i>y<sub>i</sub>, 1 <= i <= n</i> have been replaced with |
- * <i>x<sub>i</sub></i>.</blockquote> Note that, contrary to the specification, this method will |
- * not create a copy of this type if no substitutions were required, but will return this type |
- * directly. |
- * |
- * @param argumentTypes the actual type arguments being substituted for the parameters |
- * @param parameterTypes the parameters to be replaced |
- * @return the result of performing the substitution |
- */ |
- Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); |
-} |
-/** |
- * The interface `TypeParameterType` defines the behavior of objects representing the type |
- * introduced by a type parameter. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class TypeParameterType implements Type2 { |
- TypeParameterElement get element; |
-} |
-/** |
- * The interface `VoidType` defines the behavior of the unique object representing the type |
- * `void`. |
- * |
- * @coverage dart.engine.type |
- */ |
-abstract class VoidType implements Type2 { |
- VoidType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); |
-} |