| Index: pkg/analyzer/lib/src/summary/link.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
|
| index a43bc65dd11b97f840e38139a04eea73c4794aab..a3cd302bf6f3e35b97ffc24eca371553138cab18 100644
|
| --- a/pkg/analyzer/lib/src/summary/link.dart
|
| +++ b/pkg/analyzer/lib/src/summary/link.dart
|
| @@ -426,6 +426,16 @@ abstract class ClassElementForLink extends Object
|
| return null;
|
| }
|
|
|
| + @override
|
| + PropertyAccessorElement getGetter(String getterName) {
|
| + for (PropertyAccessorElement accessor in accessors) {
|
| + if (accessor.isGetter && accessor.name == getterName) {
|
| + return accessor;
|
| + }
|
| + }
|
| + return null;
|
| + }
|
| +
|
| /**
|
| * Perform type inference and cycle detection on this class and
|
| * store the resulting information in [compilationUnit].
|
| @@ -634,16 +644,6 @@ class ClassElementForLink_Class extends ClassElementForLink
|
| }
|
|
|
| @override
|
| - PropertyAccessorElement getGetter(String getterName) {
|
| - for (PropertyAccessorElement accessor in accessors) {
|
| - if (accessor.isGetter && accessor.name == getterName) {
|
| - return accessor;
|
| - }
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - @override
|
| MethodElement getMethod(String methodName) {
|
| for (MethodElement method in methods) {
|
| if (method.name == methodName) {
|
| @@ -704,7 +704,7 @@ class ClassElementForLink_Enum extends ClassElementForLink
|
| final UnlinkedEnum _unlinkedEnum;
|
|
|
| InterfaceType _type;
|
| - List<FieldElementForLink_EnumField> _fields;
|
| + List<FieldElementForLink> _fields;
|
| List<PropertyAccessorElementForLink> _accessors;
|
| DartType _valuesType;
|
|
|
| @@ -716,7 +716,7 @@ class ClassElementForLink_Enum extends ClassElementForLink
|
| List<PropertyAccessorElementForLink> get accessors {
|
| if (_accessors == null) {
|
| _accessors = <PropertyAccessorElementForLink>[];
|
| - for (FieldElementForLink_EnumField field in fields) {
|
| + for (FieldElementForLink field in fields) {
|
| _accessors.add(field.getter);
|
| }
|
| }
|
| @@ -730,13 +730,14 @@ class ClassElementForLink_Enum extends ClassElementForLink
|
| String get displayName => _unlinkedEnum.name;
|
|
|
| @override
|
| - List<FieldElementForLink_EnumField> get fields {
|
| + List<FieldElementForLink> get fields {
|
| if (_fields == null) {
|
| - _fields = <FieldElementForLink_EnumField>[];
|
| - _fields.add(new FieldElementForLink_EnumField(null, this));
|
| + _fields = <FieldElementForLink>[];
|
| + _fields.add(new FieldElementForLink_EnumField_values(this));
|
| for (UnlinkedEnumValue value in _unlinkedEnum.values) {
|
| - _fields.add(new FieldElementForLink_EnumField(value, this));
|
| + _fields.add(new FieldElementForLink_EnumField_value(this, value));
|
| }
|
| + _fields.add(new FieldElementForLink_EnumField_index(this));
|
| }
|
| return _fields;
|
| }
|
| @@ -2781,43 +2782,87 @@ class FieldElementForLink_ClassField extends VariableElementForLink
|
| */
|
| class FieldElementForLink_EnumField extends FieldElementForLink
|
| implements FieldElement {
|
| - /**
|
| - * The unlinked representation of the field in the summary, or `null` if this
|
| - * is an enum's `values` field.
|
| - */
|
| - final UnlinkedEnumValue unlinkedEnumValue;
|
| -
|
| PropertyAccessorElementForLink_EnumField _getter;
|
|
|
| @override
|
| final ClassElementForLink_Enum enclosingElement;
|
|
|
| - FieldElementForLink_EnumField(this.unlinkedEnumValue, this.enclosingElement);
|
| + FieldElementForLink_EnumField(this.enclosingElement);
|
|
|
| @override
|
| PropertyAccessorElementForLink_EnumField get getter =>
|
| _getter ??= new PropertyAccessorElementForLink_EnumField(this);
|
|
|
| @override
|
| + bool get isSynthetic => false;
|
| +
|
| + @override
|
| + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
| +
|
| + @override
|
| + String toString() => '$enclosingElement.$name';
|
| +}
|
| +
|
| +/**
|
| + * Specialization of [FieldElementForLink] for the 'index' enum field.
|
| + */
|
| +class FieldElementForLink_EnumField_index
|
| + extends FieldElementForLink_EnumField {
|
| + FieldElementForLink_EnumField_index(ClassElementForLink_Enum enclosingElement)
|
| + : super(enclosingElement);
|
| +
|
| + @override
|
| + bool get isStatic => false;
|
| +
|
| + @override
|
| + String get name => 'index';
|
| +
|
| + @override
|
| + DartType get type =>
|
| + enclosingElement.enclosingElement.library._linker.typeProvider.intType;
|
| +}
|
| +
|
| +/**
|
| + * Specialization of [FieldElementForLink] for enum fields.
|
| + */
|
| +class FieldElementForLink_EnumField_value
|
| + extends FieldElementForLink_EnumField {
|
| + /**
|
| + * The unlinked representation of the field in the summary.
|
| + */
|
| + final UnlinkedEnumValue unlinkedEnumValue;
|
| +
|
| + FieldElementForLink_EnumField_value(
|
| + ClassElementForLink_Enum enclosingElement, this.unlinkedEnumValue)
|
| + : super(enclosingElement);
|
| +
|
| + @override
|
| bool get isStatic => true;
|
|
|
| @override
|
| - bool get isSynthetic => false;
|
| + String get name => unlinkedEnumValue.name;
|
|
|
| @override
|
| - String get name =>
|
| - unlinkedEnumValue == null ? 'values' : unlinkedEnumValue.name;
|
| + DartType get type => enclosingElement.type;
|
| +}
|
| +
|
| +/**
|
| + * Specialization of [FieldElementForLink] for the 'values' enum field.
|
| + */
|
| +class FieldElementForLink_EnumField_values
|
| + extends FieldElementForLink_EnumField {
|
| + FieldElementForLink_EnumField_values(
|
| + ClassElementForLink_Enum enclosingElement)
|
| + : super(enclosingElement);
|
|
|
| @override
|
| - DartType get type => unlinkedEnumValue == null
|
| - ? enclosingElement.valuesType
|
| - : enclosingElement.type;
|
| + bool get isStatic => true;
|
|
|
| @override
|
| - noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
| + String get name => 'values';
|
|
|
| @override
|
| - String toString() => '$enclosingElement.$name';
|
| + DartType get type => enclosingElement.valuesType;
|
| }
|
|
|
| class FieldFormalParameterElementForLink extends ParameterElementForLink
|
|
|