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 |
index d34d2fd5717163e7a01afd70308b15dfb2666e54..254fdbde7205ca64c4d6ba5ac8eaae8a3eb9c05f 100644 |
--- a/pkg/analyzer_experimental/lib/src/generated/element.dart |
+++ b/pkg/analyzer_experimental/lib/src/generated/element.dart |
@@ -547,7 +547,7 @@ abstract class Element { |
* |
* @param visitor the visitor that will be used to visit the children of this element |
*/ |
- void visitChildren(ElementVisitor<Object> visitor); |
+ void visitChildren(ElementVisitor visitor); |
} |
/** |
* The interface `ElementAnnotation` defines the behavior of objects representing a single |
@@ -570,7 +570,7 @@ abstract class ElementAnnotation { |
* |
* @coverage dart.engine.element |
*/ |
-class ElementKind implements Enum<ElementKind> { |
+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"); |
@@ -623,12 +623,6 @@ class ElementKind implements Enum<ElementKind> { |
TYPE_VARIABLE, |
UNIVERSE]; |
- /// The name of this enum constant, as declared in the enum declaration. |
- final String name; |
- |
- /// The position in the enum declaration. |
- final int ordinal; |
- |
/** |
* 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. |
@@ -653,7 +647,7 @@ class ElementKind implements Enum<ElementKind> { |
* |
* @param displayName the name displayed in the UI for this kind of element |
*/ |
- ElementKind(this.name, this.ordinal, String displayName) { |
+ ElementKind(String name, int ordinal, String displayName) : super(name, ordinal) { |
this._displayName = displayName; |
} |
@@ -663,9 +657,6 @@ class ElementKind implements Enum<ElementKind> { |
* @return the name of this [ElementKind] to display in UI. |
*/ |
String get displayName => _displayName; |
- int compareTo(ElementKind other) => ordinal - other.ordinal; |
- int get hashCode => ordinal; |
- String toString() => name; |
} |
/** |
* The interface `ElementLocation` defines the behavior of objects that represent the location |
@@ -1565,11 +1556,11 @@ class GeneralizingElementVisitor<R> implements ElementVisitor<R> { |
R visitLibraryElement(LibraryElement element) => visitElement(element); |
R visitLocalElement(LocalElement element) { |
if (element is LocalVariableElement) { |
- return visitVariableElement((element as LocalVariableElement)); |
+ return visitVariableElement(element as LocalVariableElement); |
} else if (element is ParameterElement) { |
- return visitVariableElement((element as ParameterElement)); |
+ return visitVariableElement(element as ParameterElement); |
} else if (element is FunctionElement) { |
- return visitExecutableElement((element as FunctionElement)); |
+ return visitExecutableElement(element as FunctionElement); |
} |
return null; |
} |
@@ -1719,6 +1710,48 @@ class SimpleElementVisitor<R> implements ElementVisitor<R> { |
R visitTypeVariableElement(TypeVariableElement 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; |
+ } |
+ |
+ /** |
+ * Get the propagated element. |
+ */ |
+ ExecutableElement get propagatedElement => _propagatedElement; |
+ |
+ /** |
+ * Get the static element. |
+ */ |
+ ExecutableElement get staticElement => _staticElement; |
+} |
+/** |
* Instances of the class `ClassElementImpl` implement a `ClassElement`. |
* |
* @coverage dart.engine.element |
@@ -2129,7 +2162,7 @@ class ClassElementImpl extends ElementImpl implements ClassElement { |
void set validMixin(bool isValidMixin) { |
setModifier(Modifier.MIXIN, isValidMixin); |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_accessors, visitor); |
safelyVisitChildren(_constructors, visitor); |
@@ -2369,7 +2402,7 @@ class CompilationUnitElementImpl extends ElementImpl implements CompilationUnitE |
void set uri(String uri2) { |
this._uri = uri2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_accessors, visitor); |
safelyVisitChildren(_functions, visitor); |
@@ -2804,7 +2837,7 @@ abstract class ElementImpl implements Element { |
appendTo(builder); |
return builder.toString(); |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
} |
/** |
@@ -2844,7 +2877,7 @@ abstract class ElementImpl implements Element { |
* @param child the child to be visited |
* @param visitor the visitor to be used to visit the child |
*/ |
- void safelyVisitChild(Element child, ElementVisitor<Object> visitor) { |
+ void safelyVisitChild(Element child, ElementVisitor visitor) { |
if (child != null) { |
child.accept(visitor); |
} |
@@ -2856,7 +2889,7 @@ abstract class ElementImpl implements Element { |
* @param children the children to be visited |
* @param visitor the visitor being used to visit the children |
*/ |
- void safelyVisitChildren(List<Element> children, ElementVisitor<Object> visitor) { |
+ void safelyVisitChildren(List<Element> children, ElementVisitor visitor) { |
if (children != null) { |
for (Element child in children) { |
child.accept(visitor); |
@@ -3096,7 +3129,7 @@ class EmbeddedHtmlScriptElementImpl extends HtmlScriptElementImpl implements Emb |
scriptLibrary2.enclosingElement = this; |
this._scriptLibrary = scriptLibrary2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
safelyVisitChild(_scriptLibrary, visitor); |
} |
} |
@@ -3254,7 +3287,7 @@ abstract class ExecutableElementImpl extends ElementImpl implements ExecutableEl |
void set type(FunctionType type2) { |
this._type = type2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_functions, visitor); |
safelyVisitChildren(_labels, visitor); |
@@ -3649,7 +3682,7 @@ class FunctionTypeAliasElementImpl extends ElementImpl implements FunctionTypeAl |
void shareTypeVariables(List<TypeVariableElement> typeVariables2) { |
this._typeVariables = typeVariables2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_parameters, visitor); |
safelyVisitChildren(_typeVariables, visitor); |
@@ -3787,7 +3820,7 @@ class HtmlElementImpl extends ElementImpl implements HtmlElement { |
void set source(Source source2) { |
this._source = source2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_scripts, visitor); |
} |
@@ -3895,7 +3928,7 @@ class ImportElementImpl extends ElementImpl implements ImportElement { |
void set uri(String uri2) { |
this._uri = uri2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChild(_prefix, visitor); |
} |
@@ -4191,7 +4224,7 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement { |
} |
this._parts = parts2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChild(_definingCompilationUnit, visitor); |
safelyVisitChildren(_exports, visitor); |
@@ -4365,7 +4398,7 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
* |
* @coverage dart.engine.element |
*/ |
-class Modifier implements Enum<Modifier> { |
+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); |
@@ -4389,16 +4422,7 @@ class Modifier implements Enum<Modifier> { |
STATIC, |
SYNTHETIC, |
TYPEDEF]; |
- |
- /// The name of this enum constant, as declared in the enum declaration. |
- final String name; |
- |
- /// The position in the enum declaration. |
- final int ordinal; |
- Modifier(this.name, this.ordinal); |
- int compareTo(Modifier other) => ordinal - other.ordinal; |
- int get hashCode => ordinal; |
- String toString() => name; |
+ Modifier(String name, int ordinal) : super(name, ordinal); |
} |
/** |
* Instances of the class `MultiplyDefinedElementImpl` represent a collection of elements that |
@@ -4471,7 +4495,7 @@ class MultiplyDefinedElementImpl implements MultiplyDefinedElement { |
builder.append("]"); |
return builder.toString(); |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
} |
/** |
@@ -4631,7 +4655,7 @@ class ParameterElementImpl extends VariableElementImpl implements ParameterEleme |
_visibleRangeOffset = offset; |
_visibleRangeLength = length; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(_parameters, visitor); |
} |
@@ -5102,7 +5126,7 @@ abstract class VariableElementImpl extends ElementImpl implements VariableElemen |
void set type(Type2 type2) { |
this._type = type2; |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChild(_initializer, visitor); |
} |
@@ -5227,7 +5251,7 @@ abstract class ExecutableMember extends Member implements ExecutableElement { |
FunctionType get type => substituteFor(baseElement.type); |
bool get isOperator => baseElement.isOperator; |
bool get isStatic => baseElement.isStatic; |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(baseElement.functions, visitor); |
safelyVisitChildren(labels, visitor); |
@@ -5330,7 +5354,7 @@ abstract class Member implements Element { |
Source get source => _baseElement.source; |
bool isAccessibleIn(LibraryElement library) => _baseElement.isAccessibleIn(library); |
bool get isSynthetic => _baseElement.isSynthetic; |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
} |
/** |
@@ -5346,7 +5370,7 @@ abstract class Member implements Element { |
* @param child the child to be visited |
* @param visitor the visitor to be used to visit the child |
*/ |
- void safelyVisitChild(Element child, ElementVisitor<Object> visitor) { |
+ void safelyVisitChild(Element child, ElementVisitor visitor) { |
if (child != null) { |
child.accept(visitor); |
} |
@@ -5358,7 +5382,7 @@ abstract class Member implements Element { |
* @param children the children to be visited |
* @param visitor the visitor being used to visit the children |
*/ |
- void safelyVisitChildren(List<Element> children, ElementVisitor<Object> visitor) { |
+ void safelyVisitChildren(List<Element> children, ElementVisitor visitor) { |
if (children != null) { |
for (Element child in children) { |
child.accept(visitor); |
@@ -5506,11 +5530,11 @@ class ParameterMember extends VariableMember implements ParameterElement { |
if (definingType is InterfaceType) { |
InterfaceType definingInterfaceType = definingType as InterfaceType; |
if (element is ConstructorElement) { |
- return ConstructorMember.from((element as ConstructorElement), definingInterfaceType) as Element; |
+ return ConstructorMember.from(element as ConstructorElement, definingInterfaceType) as Element; |
} else if (element is MethodElement) { |
- return MethodMember.from((element as MethodElement), definingInterfaceType) as Element; |
+ return MethodMember.from(element as MethodElement, definingInterfaceType) as Element; |
} else if (element is PropertyAccessorElement) { |
- return PropertyAccessorMember.from((element as PropertyAccessorElement), definingInterfaceType) as Element; |
+ return PropertyAccessorMember.from(element as PropertyAccessorElement, definingInterfaceType) as Element; |
} |
} |
return element; |
@@ -5555,7 +5579,7 @@ class ParameterMember extends VariableMember implements ParameterElement { |
builder.append(right); |
return builder.toString(); |
} |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChildren(parameters, visitor); |
} |
@@ -5607,7 +5631,7 @@ class PropertyAccessorMember extends ExecutableMember implements PropertyAccesso |
PropertyInducingElement get variable { |
PropertyInducingElement variable = baseElement.variable; |
if (variable is FieldElement) { |
- return FieldMember.from(((variable as FieldElement)), definingType); |
+ return FieldMember.from(variable as FieldElement, definingType); |
} |
return variable; |
} |
@@ -5666,7 +5690,7 @@ abstract class VariableMember extends Member implements VariableElement { |
Type2 get type => substituteFor(baseElement.type); |
bool get isConst => baseElement.isConst; |
bool get isFinal => baseElement.isFinal; |
- void visitChildren(ElementVisitor<Object> visitor) { |
+ void visitChildren(ElementVisitor visitor) { |
super.visitChildren(visitor); |
safelyVisitChild(baseElement.initializer, visitor); |
} |
@@ -6046,7 +6070,7 @@ class FunctionTypeImpl extends TypeImpl implements FunctionType { |
return this; |
} |
Element element = this.element; |
- FunctionTypeImpl newType = (element is ExecutableElement) ? new FunctionTypeImpl.con1((element as ExecutableElement)) : new FunctionTypeImpl.con2((element as FunctionTypeAliasElement)); |
+ 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; |
} |
@@ -6498,7 +6522,7 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType { |
} else if (type is! InterfaceType) { |
return false; |
} |
- return isMoreSpecificThan2((type as InterfaceType), new Set<ClassElement>()); |
+ return isMoreSpecificThan2(type as InterfaceType, new Set<ClassElement>()); |
} |
bool get isObject => element.supertype == null; |
bool isSubtypeOf(Type2 type2) { |
@@ -6518,7 +6542,7 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType { |
} else if (this == type2) { |
return true; |
} |
- return isSubtypeOf2((type2 as InterfaceType), new Set<ClassElement>()); |
+ return isSubtypeOf2(type2 as InterfaceType, new Set<ClassElement>()); |
} |
ConstructorElement lookUpConstructor(String constructorName, LibraryElement library) { |
ConstructorElement constructorElement; |