| Index: pkg/analyzer/lib/src/generated/element.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
|
| index 597ceeb400317bc1f0d030404e0a69b65943eb50..1535596e6bd1c31556002a3919e54f1a95324beb 100644
|
| --- a/pkg/analyzer/lib/src/generated/element.dart
|
| +++ b/pkg/analyzer/lib/src/generated/element.dart
|
| @@ -15,7 +15,7 @@ import 'source.dart';
|
| import 'scanner.dart' show Keyword;
|
| import 'ast.dart';
|
| import 'sdk.dart' show DartSdk;
|
| -import 'html.dart' show XmlTagNode;
|
| +import 'html.dart' show XmlAttributeNode, XmlTagNode;
|
| import 'engine.dart' show AnalysisContext;
|
| import 'constant.dart' show EvaluationResultImpl;
|
| import 'utilities_dart.dart';
|
| @@ -157,9 +157,11 @@ abstract class ClassElement implements Element {
|
| InterfaceType get supertype;
|
|
|
| /**
|
| - * Return an array containing all of the toolkit specific objects attached to this class.
|
| + * Return an array containing all of the toolkit specific objects associated with this class. The
|
| + * array will be empty if the class does not have any toolkit specific objects or if the
|
| + * compilation unit containing the class has not yet had toolkit references resolved.
|
| *
|
| - * @return the toolkit objects attached to this class
|
| + * @return the toolkit objects associated with this class
|
| */
|
| List<ToolkitObjectElement> get toolkitObjects;
|
|
|
| @@ -212,6 +214,14 @@ abstract class ClassElement implements Element {
|
| bool get isAbstract;
|
|
|
| /**
|
| + * Return `true` if this class [isProxy], or if it inherits the proxy annotation
|
| + * from a supertype.
|
| + *
|
| + * @return `true` if this class defines or inherits a proxy
|
| + */
|
| + bool get isOrInheritsProxy;
|
| +
|
| + /**
|
| * Return `true` if this element has an annotation of the form '@proxy'.
|
| *
|
| * @return `true` if this element defines a proxy
|
| @@ -340,6 +350,15 @@ abstract class CompilationUnitElement implements Element, UriReferencedElement {
|
| List<PropertyAccessorElement> get accessors;
|
|
|
| /**
|
| + * Return an array containing all of the Angular views defined in this compilation unit. The array
|
| + * will be empty if the element does not have any Angular views or if the compilation unit has not
|
| + * yet had toolkit references resolved.
|
| + *
|
| + * @return the Angular views defined in this compilation unit.
|
| + */
|
| + List<AngularViewElement> get angularViews;
|
| +
|
| + /**
|
| * Return the library in which this compilation unit is defined.
|
| *
|
| * @return the library in which this compilation unit is defined
|
| @@ -413,7 +432,9 @@ abstract class ConstructorElement implements ClassMemberElement, ExecutableEleme
|
| ConstructorDeclaration get node;
|
|
|
| /**
|
| - * Return the constructor to which this constructor is redirecting.
|
| + * Return the constructor to which this constructor is redirecting, or `null` if this constructor
|
| + * does not redirect to another constructor or if the library containing this constructor has
|
| + * not yet been resolved.
|
| *
|
| * @return the constructor to which this constructor is redirecting
|
| */
|
| @@ -556,7 +577,9 @@ abstract class Element {
|
| ElementLocation get location;
|
|
|
| /**
|
| - * Return an array containing all of the metadata associated with this element.
|
| + * Return an array containing all of the metadata associated with this element. The array will be
|
| + * empty if the element does not have any metadata or if the library containing this element has
|
| + * not yet been resolved.
|
| *
|
| * @return the metadata associated with this element
|
| */
|
| @@ -627,6 +650,13 @@ abstract class Element {
|
| bool get isDeprecated;
|
|
|
| /**
|
| + * Return `true` if this element has an annotation of the form '@override'.
|
| + *
|
| + * @return `true` if this element is overridden
|
| + */
|
| + bool get isOverride;
|
| +
|
| + /**
|
| * Return `true` if this element is private. Private elements are visible only within the
|
| * library in which they are declared.
|
| *
|
| @@ -717,57 +747,61 @@ class ElementKind extends Enum<ElementKind> {
|
|
|
| static final ElementKind ANGULAR_PROPERTY = new ElementKind('ANGULAR_PROPERTY', 4, "Angular property");
|
|
|
| - static final ElementKind ANGULAR_SELECTOR = new ElementKind('ANGULAR_SELECTOR', 5, "Angular selector");
|
| + static final ElementKind ANGULAR_SCOPE_PROPERTY = new ElementKind('ANGULAR_SCOPE_PROPERTY', 5, "Angular scope property");
|
| +
|
| + static final ElementKind ANGULAR_SELECTOR = new ElementKind('ANGULAR_SELECTOR', 6, "Angular selector");
|
| +
|
| + static final ElementKind ANGULAR_VIEW = new ElementKind('ANGULAR_VIEW', 7, "Angular view");
|
|
|
| - static final ElementKind CLASS = new ElementKind('CLASS', 6, "class");
|
| + static final ElementKind CLASS = new ElementKind('CLASS', 8, "class");
|
|
|
| - static final ElementKind COMPILATION_UNIT = new ElementKind('COMPILATION_UNIT', 7, "compilation unit");
|
| + static final ElementKind COMPILATION_UNIT = new ElementKind('COMPILATION_UNIT', 9, "compilation unit");
|
|
|
| - static final ElementKind CONSTRUCTOR = new ElementKind('CONSTRUCTOR', 8, "constructor");
|
| + static final ElementKind CONSTRUCTOR = new ElementKind('CONSTRUCTOR', 10, "constructor");
|
|
|
| - static final ElementKind DYNAMIC = new ElementKind('DYNAMIC', 9, "<dynamic>");
|
| + static final ElementKind DYNAMIC = new ElementKind('DYNAMIC', 11, "<dynamic>");
|
|
|
| - static final ElementKind EMBEDDED_HTML_SCRIPT = new ElementKind('EMBEDDED_HTML_SCRIPT', 10, "embedded html script");
|
| + static final ElementKind EMBEDDED_HTML_SCRIPT = new ElementKind('EMBEDDED_HTML_SCRIPT', 12, "embedded html script");
|
|
|
| - static final ElementKind ERROR = new ElementKind('ERROR', 11, "<error>");
|
| + static final ElementKind ERROR = new ElementKind('ERROR', 13, "<error>");
|
|
|
| - static final ElementKind EXPORT = new ElementKind('EXPORT', 12, "export directive");
|
| + static final ElementKind EXPORT = new ElementKind('EXPORT', 14, "export directive");
|
|
|
| - static final ElementKind EXTERNAL_HTML_SCRIPT = new ElementKind('EXTERNAL_HTML_SCRIPT', 13, "external html script");
|
| + static final ElementKind EXTERNAL_HTML_SCRIPT = new ElementKind('EXTERNAL_HTML_SCRIPT', 15, "external html script");
|
|
|
| - static final ElementKind FIELD = new ElementKind('FIELD', 14, "field");
|
| + static final ElementKind FIELD = new ElementKind('FIELD', 16, "field");
|
|
|
| - static final ElementKind FUNCTION = new ElementKind('FUNCTION', 15, "function");
|
| + static final ElementKind FUNCTION = new ElementKind('FUNCTION', 17, "function");
|
|
|
| - static final ElementKind GETTER = new ElementKind('GETTER', 16, "getter");
|
| + static final ElementKind GETTER = new ElementKind('GETTER', 18, "getter");
|
|
|
| - static final ElementKind HTML = new ElementKind('HTML', 17, "html");
|
| + static final ElementKind HTML = new ElementKind('HTML', 19, "html");
|
|
|
| - static final ElementKind IMPORT = new ElementKind('IMPORT', 18, "import directive");
|
| + static final ElementKind IMPORT = new ElementKind('IMPORT', 20, "import directive");
|
|
|
| - static final ElementKind LABEL = new ElementKind('LABEL', 19, "label");
|
| + static final ElementKind LABEL = new ElementKind('LABEL', 21, "label");
|
|
|
| - static final ElementKind LIBRARY = new ElementKind('LIBRARY', 20, "library");
|
| + static final ElementKind LIBRARY = new ElementKind('LIBRARY', 22, "library");
|
|
|
| - static final ElementKind LOCAL_VARIABLE = new ElementKind('LOCAL_VARIABLE', 21, "local variable");
|
| + static final ElementKind LOCAL_VARIABLE = new ElementKind('LOCAL_VARIABLE', 23, "local variable");
|
|
|
| - static final ElementKind METHOD = new ElementKind('METHOD', 22, "method");
|
| + static final ElementKind METHOD = new ElementKind('METHOD', 24, "method");
|
|
|
| - static final ElementKind NAME = new ElementKind('NAME', 23, "<name>");
|
| + static final ElementKind NAME = new ElementKind('NAME', 25, "<name>");
|
|
|
| - static final ElementKind PARAMETER = new ElementKind('PARAMETER', 24, "parameter");
|
| + static final ElementKind PARAMETER = new ElementKind('PARAMETER', 26, "parameter");
|
|
|
| - static final ElementKind PREFIX = new ElementKind('PREFIX', 25, "import prefix");
|
| + static final ElementKind PREFIX = new ElementKind('PREFIX', 27, "import prefix");
|
|
|
| - static final ElementKind SETTER = new ElementKind('SETTER', 26, "setter");
|
| + static final ElementKind SETTER = new ElementKind('SETTER', 28, "setter");
|
|
|
| - static final ElementKind TOP_LEVEL_VARIABLE = new ElementKind('TOP_LEVEL_VARIABLE', 27, "top level variable");
|
| + static final ElementKind TOP_LEVEL_VARIABLE = new ElementKind('TOP_LEVEL_VARIABLE', 29, "top level variable");
|
|
|
| - static final ElementKind FUNCTION_TYPE_ALIAS = new ElementKind('FUNCTION_TYPE_ALIAS', 28, "function type alias");
|
| + static final ElementKind FUNCTION_TYPE_ALIAS = new ElementKind('FUNCTION_TYPE_ALIAS', 30, "function type alias");
|
|
|
| - static final ElementKind TYPE_PARAMETER = new ElementKind('TYPE_PARAMETER', 29, "type parameter");
|
| + static final ElementKind TYPE_PARAMETER = new ElementKind('TYPE_PARAMETER', 31, "type parameter");
|
|
|
| - static final ElementKind UNIVERSE = new ElementKind('UNIVERSE', 30, "<universe>");
|
| + static final ElementKind UNIVERSE = new ElementKind('UNIVERSE', 32, "<universe>");
|
|
|
| static final List<ElementKind> values = [
|
| ANGULAR_FILTER,
|
| @@ -775,7 +809,9 @@ class ElementKind extends Enum<ElementKind> {
|
| ANGULAR_CONTROLLER,
|
| ANGULAR_DIRECTIVE,
|
| ANGULAR_PROPERTY,
|
| + ANGULAR_SCOPE_PROPERTY,
|
| ANGULAR_SELECTOR,
|
| + ANGULAR_VIEW,
|
| CLASS,
|
| COMPILATION_UNIT,
|
| CONSTRUCTOR,
|
| @@ -862,8 +898,12 @@ abstract class ElementVisitor<R> {
|
|
|
| R visitAngularPropertyElement(AngularPropertyElement element);
|
|
|
| + R visitAngularScopePropertyElement(AngularScopePropertyElement element);
|
| +
|
| R visitAngularSelectorElement(AngularSelectorElement element);
|
|
|
| + R visitAngularViewElement(AngularViewElement element);
|
| +
|
| R visitClassElement(ClassElement element);
|
|
|
| R visitCompilationUnitElement(CompilationUnitElement element);
|
| @@ -1348,7 +1388,8 @@ abstract class LibraryElement implements Element {
|
| bool hasExtUri();
|
|
|
| /**
|
| - * Return `true` if this library is created for Angular analysis.
|
| + * Return `true` if this library is created for Angular analysis. If this library has not
|
| + * yet had toolkit references resolved, then `false` will be returned.
|
| *
|
| * @return `true` if this library is created for Angular analysis
|
| */
|
| @@ -1480,6 +1521,23 @@ abstract class MultiplyDefinedElement implements Element {
|
| }
|
|
|
| /**
|
| + * The interface [MultiplyInheritedExecutableElement] defines all of the behavior of an
|
| + * [ExecutableElement], with the additional information of an array of
|
| + * [ExecutableElement]s from which this element was composed.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +abstract class MultiplyInheritedExecutableElement implements ExecutableElement {
|
| + /**
|
| + * Return an array containing all of the executable elements defined within this executable
|
| + * element.
|
| + *
|
| + * @return the elements defined within this executable element
|
| + */
|
| + List<ExecutableElement> get inheritedElements;
|
| +}
|
| +
|
| +/**
|
| * The interface `NamespaceCombinator` defines the behavior common to objects that control how
|
| * namespaces are combined.
|
| *
|
| @@ -1827,13 +1885,19 @@ abstract class VariableElement implements Element {
|
| *
|
| * @coverage dart.engine.element
|
| */
|
| -abstract class AngularComponentElement implements AngularHasSelectorElement {
|
| +abstract class AngularComponentElement implements AngularHasSelectorElement, AngularHasTemplateElement {
|
| /**
|
| * Return an array containing all of the properties declared by this component.
|
| */
|
| List<AngularPropertyElement> get properties;
|
|
|
| /**
|
| + * Return an array containing all of the scope properties set in the implementation of this
|
| + * component.
|
| + */
|
| + List<AngularScopePropertyElement> get scopeProperties;
|
| +
|
| + /**
|
| * Returns the CSS file URI.
|
| */
|
| String get styleUri;
|
| @@ -1844,23 +1908,6 @@ abstract class AngularComponentElement implements AngularHasSelectorElement {
|
| * @return the offset of the style URI
|
| */
|
| int get styleUriOffset;
|
| -
|
| - /**
|
| - * Returns the HTML template [Source], `null` if not resolved.
|
| - */
|
| - Source get templateSource;
|
| -
|
| - /**
|
| - * Returns the HTML template URI.
|
| - */
|
| - String get templateUri;
|
| -
|
| - /**
|
| - * Return the offset of the [getTemplateUri] in the [getSource].
|
| - *
|
| - * @return the offset of the template URI
|
| - */
|
| - int get templateUriOffset;
|
| }
|
|
|
| /**
|
| @@ -1901,6 +1948,13 @@ abstract class AngularElement implements ToolkitObjectElement {
|
| * An empty array of angular elements.
|
| */
|
| static final List<AngularElement> EMPTY_ARRAY = new List<AngularElement>(0);
|
| +
|
| + /**
|
| + * Returns the [AngularApplication] this element is used in.
|
| + *
|
| + * @return the [AngularApplication] this element is used in
|
| + */
|
| + AngularApplication get application;
|
| }
|
|
|
| /**
|
| @@ -1913,6 +1967,18 @@ abstract class AngularFilterElement implements AngularElement {
|
| }
|
|
|
| /**
|
| + * [AngularSelectorElement] based on presence of attribute.
|
| + */
|
| +abstract class AngularHasAttributeSelectorElement implements AngularSelectorElement {
|
| +}
|
| +
|
| +/**
|
| + * [AngularSelectorElement] based on presence of a class.
|
| + */
|
| +abstract class AngularHasClassSelectorElement implements AngularSelectorElement {
|
| +}
|
| +
|
| +/**
|
| * The interface `AngularElement` defines the behavior of objects representing information
|
| * about an Angular element which is applied conditionally using some [AngularSelectorElement].
|
| *
|
| @@ -1928,6 +1994,31 @@ abstract class AngularHasSelectorElement implements AngularElement {
|
| }
|
|
|
| /**
|
| + * The interface `AngularHasTemplateElement` defines common behavior for
|
| + * [AngularElement] that have template URI / [Source].
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +abstract class AngularHasTemplateElement implements AngularElement {
|
| + /**
|
| + * Returns the HTML template [Source], `null` if not resolved.
|
| + */
|
| + Source get templateSource;
|
| +
|
| + /**
|
| + * Returns the HTML template URI.
|
| + */
|
| + String get templateUri;
|
| +
|
| + /**
|
| + * Return the offset of the [getTemplateUri] in the [getSource].
|
| + *
|
| + * @return the offset of the template URI
|
| + */
|
| + int get templateUriOffset;
|
| +}
|
| +
|
| +/**
|
| * The interface `AngularPropertyElement` defines a single property in
|
| * [AngularComponentElement].
|
| *
|
| @@ -1947,7 +2038,8 @@ abstract class AngularPropertyElement implements AngularElement {
|
| FieldElement get field;
|
|
|
| /**
|
| - * Return the offset of the field name of this property in the property map.
|
| + * Return the offset of the field name of this property in the property map, or `-1` if
|
| + * property was created using annotation on [FieldElement].
|
| *
|
| * @return the offset of the field name of this property
|
| */
|
| @@ -2022,6 +2114,26 @@ class AngularPropertyKind_TWO_WAY extends AngularPropertyKind {
|
| }
|
|
|
| /**
|
| + * The interface `AngularScopeVariableElement` defines the Angular <code>Scope</code>
|
| + * property. They are created for every <code>scope['property'] = value;</code> code snippet.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +abstract class AngularScopePropertyElement implements AngularElement {
|
| + /**
|
| + * An empty array of scope property elements.
|
| + */
|
| + static final List<AngularScopePropertyElement> EMPTY_ARRAY = [];
|
| +
|
| + /**
|
| + * Returns the type of this property, not `null`, maybe <code>dynamic</code>.
|
| + *
|
| + * @return the type of this property.
|
| + */
|
| + Type2 get type;
|
| +}
|
| +
|
| +/**
|
| * [AngularSelectorElement] is used to decide when Angular object should be applied.
|
| *
|
| * This class is an [Element] to support renaming component tag names, which are identifiers
|
| @@ -2038,6 +2150,25 @@ abstract class AngularSelectorElement implements AngularElement {
|
| }
|
|
|
| /**
|
| + * [AngularSelectorElement] based on tag name.
|
| + */
|
| +abstract class AngularTagSelectorElement implements AngularSelectorElement {
|
| +}
|
| +
|
| +/**
|
| + * The interface `AngularViewElement` defines the Angular view defined using invocation like
|
| + * <code>view('views/create.html')</code>.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +abstract class AngularViewElement implements AngularHasTemplateElement {
|
| + /**
|
| + * An empty array of view elements.
|
| + */
|
| + static final List<AngularViewElement> EMPTY_ARRAY = new List<AngularViewElement>(0);
|
| +}
|
| +
|
| +/**
|
| * 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
|
| @@ -2109,8 +2240,12 @@ class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
|
|
|
| R visitAngularPropertyElement(AngularPropertyElement element) => visitAngularElement(element);
|
|
|
| + R visitAngularScopePropertyElement(AngularScopePropertyElement element) => visitAngularElement(element);
|
| +
|
| R visitAngularSelectorElement(AngularSelectorElement element) => visitAngularElement(element);
|
|
|
| + R visitAngularViewElement(AngularViewElement element) => visitAngularElement(element);
|
| +
|
| R visitClassElement(ClassElement element) => visitElement(element);
|
|
|
| R visitCompilationUnitElement(CompilationUnitElement element) => visitElement(element);
|
| @@ -2220,11 +2355,21 @@ class RecursiveElementVisitor<R> implements ElementVisitor<R> {
|
| return null;
|
| }
|
|
|
| + R visitAngularScopePropertyElement(AngularScopePropertyElement element) {
|
| + element.visitChildren(this);
|
| + return null;
|
| + }
|
| +
|
| R visitAngularSelectorElement(AngularSelectorElement element) {
|
| element.visitChildren(this);
|
| return null;
|
| }
|
|
|
| + R visitAngularViewElement(AngularViewElement element) {
|
| + element.visitChildren(this);
|
| + return null;
|
| + }
|
| +
|
| R visitClassElement(ClassElement element) {
|
| element.visitChildren(this);
|
| return null;
|
| @@ -2355,8 +2500,12 @@ class SimpleElementVisitor<R> implements ElementVisitor<R> {
|
|
|
| R visitAngularPropertyElement(AngularPropertyElement element) => null;
|
|
|
| + R visitAngularScopePropertyElement(AngularScopePropertyElement element) => null;
|
| +
|
| R visitAngularSelectorElement(AngularSelectorElement element) => null;
|
|
|
| + R visitAngularViewElement(AngularViewElement element) => null;
|
| +
|
| R visitClassElement(ClassElement element) => null;
|
|
|
| R visitCompilationUnitElement(CompilationUnitElement element) => null;
|
| @@ -2489,7 +2638,7 @@ class ClassElementImpl extends ElementImpl implements ClassElement {
|
| List<TypeParameterElement> _typeParameters = TypeParameterElementImpl.EMPTY_ARRAY;
|
|
|
| /**
|
| - * An empty array of type elements.
|
| + * An empty array of class elements.
|
| */
|
| static List<ClassElement> EMPTY_ARRAY = new List<ClassElement>(0);
|
|
|
| @@ -2654,6 +2803,8 @@ class ClassElementImpl extends ElementImpl implements ClassElement {
|
|
|
| bool get isAbstract => hasModifier(Modifier.ABSTRACT);
|
|
|
| + bool get isOrInheritsProxy => isOrInheritsProxy2(this, new Set<ClassElement>());
|
| +
|
| bool get isProxy {
|
| for (ElementAnnotation annotation in metadata) {
|
| if (annotation.isProxy) {
|
| @@ -2914,6 +3065,31 @@ class ClassElementImpl extends ElementImpl implements ClassElement {
|
| }
|
| }
|
| }
|
| +
|
| + bool isOrInheritsProxy2(ClassElement classElt, Set<ClassElement> visitedClassElts) {
|
| + if (visitedClassElts.contains(classElt)) {
|
| + return false;
|
| + }
|
| + visitedClassElts.add(classElt);
|
| + if (classElt.isProxy) {
|
| + return true;
|
| + } else if (classElt.supertype != null && isOrInheritsProxy2(classElt.supertype.element, visitedClassElts)) {
|
| + return true;
|
| + }
|
| + List<InterfaceType> supertypes = classElt.interfaces;
|
| + for (int i = 0; i < supertypes.length; i++) {
|
| + if (isOrInheritsProxy2(supertypes[i].element, visitedClassElts)) {
|
| + return true;
|
| + }
|
| + }
|
| + supertypes = classElt.mixins;
|
| + for (int i = 0; i < supertypes.length; i++) {
|
| + if (isOrInheritsProxy2(supertypes[i].element, visitedClassElts)) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| }
|
|
|
| /**
|
| @@ -2971,6 +3147,11 @@ class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitE
|
| String uri;
|
|
|
| /**
|
| + * An array containing all of the Angular views contained in this compilation unit.
|
| + */
|
| + List<AngularViewElement> _angularViews = AngularViewElement.EMPTY_ARRAY;
|
| +
|
| + /**
|
| * Initialize a newly created compilation unit element to have the given name.
|
| *
|
| * @param name the name of this element
|
| @@ -2983,6 +3164,8 @@ class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitE
|
|
|
| List<PropertyAccessorElement> get accessors => _accessors;
|
|
|
| + List<AngularViewElement> get angularViews => _angularViews;
|
| +
|
| ElementImpl getChild(String identifier) {
|
| //
|
| // The casts in this method are safe because the set methods would have thrown a CCE if any of
|
| @@ -3055,6 +3238,18 @@ class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitE
|
| }
|
|
|
| /**
|
| + * Set the Angular views defined in this compilation unit.
|
| + *
|
| + * @param angularViews the Angular views defined in this compilation unit
|
| + */
|
| + void set angularViews(List<AngularViewElement> angularViews) {
|
| + for (AngularViewElement view in angularViews) {
|
| + (view as AngularViewElementImpl).enclosingElement = this;
|
| + }
|
| + this._angularViews = angularViews;
|
| + }
|
| +
|
| + /**
|
| * 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
|
| @@ -3109,6 +3304,7 @@ class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitE
|
| safelyVisitChildren(_typeAliases, visitor);
|
| safelyVisitChildren(_types, visitor);
|
| safelyVisitChildren(_variables, visitor);
|
| + safelyVisitChildren(_angularViews, visitor);
|
| }
|
|
|
| void appendTo(JavaStringBuilder builder) {
|
| @@ -3241,7 +3437,16 @@ class ConstructorElementImpl extends ExecutableElementImpl implements Constructo
|
| *
|
| * @param name the name of this element
|
| */
|
| - ConstructorElementImpl(Identifier name) : super.con1(name);
|
| + ConstructorElementImpl.con1(Identifier name) : super.con1(name);
|
| +
|
| + /**
|
| + * Initialize a newly created constructor 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
|
| + */
|
| + ConstructorElementImpl.con2(String name, int nameOffset) : super.con2(name, nameOffset);
|
|
|
| accept(ElementVisitor visitor) => visitor.visitConstructorElement(this);
|
|
|
| @@ -3621,6 +3826,15 @@ abstract class ElementImpl implements Element {
|
| return false;
|
| }
|
|
|
| + bool get isOverride {
|
| + for (ElementAnnotation annotation in metadata) {
|
| + if (annotation.isOverride) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| bool get isPrivate {
|
| String name = displayName;
|
| if (name == null) {
|
| @@ -4862,13 +5076,14 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
|
| static bool isUpToDate(LibraryElement library, int timeStamp, Set<LibraryElement> visitedLibraries) {
|
| if (!visitedLibraries.contains(library)) {
|
| visitedLibraries.add(library);
|
| + AnalysisContext context = library.context;
|
| // Check the defining compilation unit.
|
| - if (timeStamp < library.definingCompilationUnit.source.modificationStamp) {
|
| + if (timeStamp < context.getModificationStamp(library.definingCompilationUnit.source)) {
|
| return false;
|
| }
|
| // Check the parted compilation units.
|
| for (CompilationUnitElement element in library.parts) {
|
| - if (timeStamp < element.source.modificationStamp) {
|
| + if (timeStamp < context.getModificationStamp(element.source)) {
|
| return false;
|
| }
|
| }
|
| @@ -5584,6 +5799,8 @@ class MultiplyDefinedElementImpl implements MultiplyDefinedElement {
|
|
|
| bool get isDeprecated => false;
|
|
|
| + bool get isOverride => false;
|
| +
|
| bool get isPrivate {
|
| String name = displayName;
|
| if (name == null) {
|
| @@ -5615,6 +5832,54 @@ class MultiplyDefinedElementImpl implements MultiplyDefinedElement {
|
| }
|
|
|
| /**
|
| + * The interface [MultiplyInheritedMethodElementImpl] defines all of the behavior of an
|
| + * [MethodElementImpl], with the additional information of an array of
|
| + * [ExecutableElement]s from which this element was composed.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +class MultiplyInheritedMethodElementImpl extends MethodElementImpl implements MultiplyInheritedExecutableElement {
|
| + /**
|
| + * An array the array of executable elements that were used to compose this element.
|
| + */
|
| + List<ExecutableElement> _elements = MethodElementImpl.EMPTY_ARRAY;
|
| +
|
| + MultiplyInheritedMethodElementImpl(Identifier name) : super.con1(name) {
|
| + synthetic = true;
|
| + }
|
| +
|
| + List<ExecutableElement> get inheritedElements => _elements;
|
| +
|
| + void set inheritedElements(List<ExecutableElement> elements) {
|
| + this._elements = elements;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * The interface [MultiplyInheritedPropertyAccessorElementImpl] defines all of the behavior of
|
| + * an [PropertyAccessorElementImpl], with the additional information of an array of
|
| + * [ExecutableElement]s from which this element was composed.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +class MultiplyInheritedPropertyAccessorElementImpl extends PropertyAccessorElementImpl implements MultiplyInheritedExecutableElement {
|
| + /**
|
| + * An array the array of executable elements that were used to compose this element.
|
| + */
|
| + List<ExecutableElement> _elements = PropertyAccessorElementImpl.EMPTY_ARRAY;
|
| +
|
| + MultiplyInheritedPropertyAccessorElementImpl(Identifier name) : super.con1(name) {
|
| + synthetic = true;
|
| + }
|
| +
|
| + List<ExecutableElement> get inheritedElements => _elements;
|
| +
|
| + void set inheritedElements(List<ExecutableElement> elements) {
|
| + this._elements = elements;
|
| + }
|
| +}
|
| +
|
| +/**
|
| * Instances of the class `ParameterElementImpl` implement a `ParameterElement`.
|
| *
|
| * @coverage dart.engine.element
|
| @@ -5777,6 +6042,7 @@ class ParameterElementImpl extends VariableElementImpl implements ParameterEleme
|
| } else if (parameterKind == ParameterKind.POSITIONAL) {
|
| left = "[";
|
| right = "]";
|
| + } else if (parameterKind == ParameterKind.REQUIRED) {
|
| }
|
| break;
|
| }
|
| @@ -6189,8 +6455,8 @@ abstract class VariableElementImpl extends ElementImpl implements VariableElemen
|
|
|
| /**
|
| * 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.
|
| + * expression, or `null` if this variable is not a 'const' variable, if it does not have an
|
| + * initializer, or if the compilation unit containing the variable has not been resolved.
|
| *
|
| * @return the result of evaluating this variable's initializer
|
| */
|
| @@ -6205,8 +6471,9 @@ abstract class VariableElementImpl extends ElementImpl implements VariableElemen
|
| bool get isFinal => hasModifier(Modifier.FINAL);
|
|
|
| /**
|
| - * Return `true` if this variable is potentially mutated somewhere in closure. This
|
| - * information is only available for local variables (including parameters).
|
| + * Return `true` if this variable is potentially mutated somewhere in a closure. This
|
| + * information is only available for local variables (including parameters) and only after the
|
| + * compilation unit containing the variable has been resolved.
|
| *
|
| * @return `true` if this variable is potentially mutated somewhere in closure
|
| */
|
| @@ -6214,7 +6481,8 @@ abstract class VariableElementImpl extends ElementImpl implements VariableElemen
|
|
|
| /**
|
| * Return `true` if this variable is potentially mutated somewhere in its scope. This
|
| - * information is only available for local variables (including parameters).
|
| + * information is only available for local variables (including parameters) and only after the
|
| + * compilation unit containing the variable has been resolved.
|
| *
|
| * @return `true` if this variable is potentially mutated somewhere in its scope
|
| */
|
| @@ -6273,6 +6541,28 @@ abstract class VariableElementImpl extends ElementImpl implements VariableElemen
|
| }
|
|
|
| /**
|
| + * Information about Angular application.
|
| + */
|
| +class AngularApplication {
|
| + final Source entryPoint;
|
| +
|
| + Set<Source> _librarySources;
|
| +
|
| + final List<AngularElement> elements;
|
| +
|
| + final List<Source> elementSources;
|
| +
|
| + AngularApplication(this.entryPoint, Set<Source> librarySources, this.elements, this.elementSources) {
|
| + this._librarySources = librarySources;
|
| + }
|
| +
|
| + /**
|
| + * Checks if this application depends on the library with the given [Source].
|
| + */
|
| + bool dependsOn(Source librarySource) => _librarySources.contains(librarySource);
|
| +}
|
| +
|
| +/**
|
| * Implementation of `AngularComponentElement`.
|
| *
|
| * @coverage dart.engine.element
|
| @@ -6289,6 +6579,11 @@ class AngularComponentElementImpl extends AngularHasSelectorElementImpl implemen
|
| List<AngularPropertyElement> _properties = AngularPropertyElement.EMPTY_ARRAY;
|
|
|
| /**
|
| + * The array containing all of the scope properties set by this component.
|
| + */
|
| + List<AngularScopePropertyElement> _scopeProperties = AngularScopePropertyElement.EMPTY_ARRAY;
|
| +
|
| + /**
|
| * The the CSS file URI.
|
| */
|
| String styleUri;
|
| @@ -6330,6 +6625,8 @@ class AngularComponentElementImpl extends AngularHasSelectorElementImpl implemen
|
|
|
| List<AngularPropertyElement> get properties => _properties;
|
|
|
| + List<AngularScopePropertyElement> get scopeProperties => _scopeProperties;
|
| +
|
| /**
|
| * Set an array containing all of the properties declared by this component.
|
| *
|
| @@ -6342,8 +6639,21 @@ class AngularComponentElementImpl extends AngularHasSelectorElementImpl implemen
|
| this._properties = properties;
|
| }
|
|
|
| + /**
|
| + * Set an array containing all of the scope properties declared by this component.
|
| + *
|
| + * @param properties the properties to set
|
| + */
|
| + void set scopeProperties(List<AngularScopePropertyElement> properties) {
|
| + for (AngularScopePropertyElement property in properties) {
|
| + encloseElement(property as AngularScopePropertyElementImpl);
|
| + }
|
| + this._scopeProperties = properties;
|
| + }
|
| +
|
| void visitChildren(ElementVisitor visitor) {
|
| safelyVisitChildren(_properties, visitor);
|
| + safelyVisitChildren(_scopeProperties, visitor);
|
| super.visitChildren(visitor);
|
| }
|
|
|
| @@ -6435,6 +6745,11 @@ class AngularDirectiveElementImpl extends AngularHasSelectorElementImpl implemen
|
| */
|
| abstract class AngularElementImpl extends ToolkitObjectElementImpl implements AngularElement {
|
| /**
|
| + * The [AngularApplication] this element is used in.
|
| + */
|
| + AngularApplication _application;
|
| +
|
| + /**
|
| * Initialize a newly created Angular element to have the given name.
|
| *
|
| * @param name the name of this element
|
| @@ -6442,6 +6757,15 @@ abstract class AngularElementImpl extends ToolkitObjectElementImpl implements An
|
| * declaration of this element
|
| */
|
| AngularElementImpl(String name, int nameOffset) : super(name, nameOffset);
|
| +
|
| + AngularApplication get application => _application;
|
| +
|
| + /**
|
| + * Set the [AngularApplication] this element is used in.
|
| + */
|
| + void set application(AngularApplication application) {
|
| + this._application = application;
|
| + }
|
| }
|
|
|
| /**
|
| @@ -6465,6 +6789,34 @@ class AngularFilterElementImpl extends AngularElementImpl implements AngularFilt
|
| }
|
|
|
| /**
|
| + * Implementation of [AngularSelectorElement] based on presence of a class.
|
| + */
|
| +class AngularHasClassSelectorElementImpl extends AngularSelectorElementImpl implements AngularHasClassSelectorElement {
|
| + AngularHasClassSelectorElementImpl(String name, int offset) : super(name, offset);
|
| +
|
| + bool apply(XmlTagNode node) {
|
| + XmlAttributeNode attribute = node.getAttribute("class");
|
| + if (attribute != null) {
|
| + String text = attribute.text;
|
| + if (text != null) {
|
| + String name = this.name;
|
| + for (String className in StringUtils.split(text)) {
|
| + if (className == name) {
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + void appendTo(JavaStringBuilder builder) {
|
| + builder.append(".");
|
| + builder.append(name);
|
| + }
|
| +}
|
| +
|
| +/**
|
| * Implementation of `AngularSelectorElement`.
|
| *
|
| * @coverage dart.engine.element
|
| @@ -6535,6 +6887,31 @@ class AngularPropertyElementImpl extends AngularElementImpl implements AngularPr
|
| }
|
|
|
| /**
|
| + * Implementation of `AngularScopePropertyElement`.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +class AngularScopePropertyElementImpl extends AngularElementImpl implements AngularScopePropertyElement {
|
| + /**
|
| + * The type of the property
|
| + */
|
| + final Type2 type;
|
| +
|
| + /**
|
| + * Initialize a newly created Angular scope property 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
|
| + */
|
| + AngularScopePropertyElementImpl(String name, int nameOffset, this.type) : super(name, nameOffset);
|
| +
|
| + accept(ElementVisitor visitor) => visitor.visitAngularScopePropertyElement(this);
|
| +
|
| + ElementKind get kind => ElementKind.ANGULAR_SCOPE_PROPERTY;
|
| +}
|
| +
|
| +/**
|
| * Implementation of `AngularFilterElement`.
|
| *
|
| * @coverage dart.engine.element
|
| @@ -6555,9 +6932,56 @@ abstract class AngularSelectorElementImpl extends AngularElementImpl implements
|
| }
|
|
|
| /**
|
| + * Implementation of [AngularSelectorElement] based on tag name.
|
| + */
|
| +class AngularTagSelectorElementImpl extends AngularSelectorElementImpl implements AngularTagSelectorElement {
|
| + AngularTagSelectorElementImpl(String name, int offset) : super(name, offset);
|
| +
|
| + bool apply(XmlTagNode node) {
|
| + String tagName = name;
|
| + return node.tag == tagName;
|
| + }
|
| +
|
| + AngularApplication get application => (enclosingElement as AngularElementImpl).application;
|
| +}
|
| +
|
| +/**
|
| + * Implementation of `AngularViewElement`.
|
| + *
|
| + * @coverage dart.engine.element
|
| + */
|
| +class AngularViewElementImpl extends AngularElementImpl implements AngularViewElement {
|
| + /**
|
| + * The HTML template URI.
|
| + */
|
| + final String templateUri;
|
| +
|
| + /**
|
| + * The offset of the [templateUri] in the [getSource].
|
| + */
|
| + final int templateUriOffset;
|
| +
|
| + /**
|
| + * The HTML template source.
|
| + */
|
| + Source templateSource;
|
| +
|
| + /**
|
| + * Initialize a newly created Angular view.
|
| + */
|
| + AngularViewElementImpl(this.templateUri, this.templateUriOffset) : super(null, -1);
|
| +
|
| + accept(ElementVisitor visitor) => visitor.visitAngularViewElement(this);
|
| +
|
| + ElementKind get kind => ElementKind.ANGULAR_VIEW;
|
| +
|
| + String get identifier => "AngularView@${templateUriOffset}";
|
| +}
|
| +
|
| +/**
|
| * Implementation of [AngularSelectorElement] based on presence of attribute.
|
| */
|
| -class HasAttributeSelectorElementImpl extends AngularSelectorElementImpl {
|
| +class HasAttributeSelectorElementImpl extends AngularSelectorElementImpl implements AngularHasAttributeSelectorElement {
|
| HasAttributeSelectorElementImpl(String attributeName, int offset) : super(attributeName, offset);
|
|
|
| bool apply(XmlTagNode node) {
|
| @@ -6565,11 +6989,15 @@ class HasAttributeSelectorElementImpl extends AngularSelectorElementImpl {
|
| return node.getAttribute(attributeName) != null;
|
| }
|
|
|
| - String get displayName => "[${super.displayName}]";
|
| + void appendTo(JavaStringBuilder builder) {
|
| + builder.append("[");
|
| + builder.append(name);
|
| + builder.append("]");
|
| + }
|
| }
|
|
|
| /**
|
| - * Combination of [IsTagSelectorElementImpl] and [HasAttributeSelectorElementImpl].
|
| + * Combination of [AngularTagSelectorElementImpl] and [HasAttributeSelectorElementImpl].
|
| */
|
| class IsTagHasAttributeSelectorElementImpl extends AngularSelectorElementImpl {
|
| final String tagName;
|
| @@ -6582,18 +7010,6 @@ class IsTagHasAttributeSelectorElementImpl extends AngularSelectorElementImpl {
|
| }
|
|
|
| /**
|
| - * Implementation of [AngularSelectorElement] based on tag name.
|
| - */
|
| -class IsTagSelectorElementImpl extends AngularSelectorElementImpl {
|
| - IsTagSelectorElementImpl(String name, int offset) : super(name, offset);
|
| -
|
| - bool apply(XmlTagNode node) {
|
| - String tagName = name;
|
| - return node.tag == tagName;
|
| - }
|
| -}
|
| -
|
| -/**
|
| * Instances of the class `ConstructorMember` represent a constructor element defined in a
|
| * parameterized type where the values of the type parameters are known.
|
| */
|
| @@ -6887,6 +7303,8 @@ abstract class Member implements Element {
|
|
|
| bool get isDeprecated => _baseElement.isDeprecated;
|
|
|
| + bool get isOverride => _baseElement.isOverride;
|
| +
|
| bool get isPrivate => _baseElement.isPrivate;
|
|
|
| bool get isPublic => _baseElement.isPublic;
|
| @@ -7136,6 +7554,7 @@ class ParameterMember extends VariableMember implements ParameterElement {
|
| } else if (baseElement.parameterKind == ParameterKind.POSITIONAL) {
|
| left = "[";
|
| right = "]";
|
| + } else if (baseElement.parameterKind == ParameterKind.REQUIRED) {
|
| }
|
| break;
|
| }
|
|
|