Chromium Code Reviews| Index: pkg/analyzer/lib/src/dart/element/element.dart |
| diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart |
| index a18876bb8a4ec25383f23c664068eabb5dfb9412..02413a4ce1c0433533b61a017e269f05edce4c4f 100644 |
| --- a/pkg/analyzer/lib/src/dart/element/element.dart |
| +++ b/pkg/analyzer/lib/src/dart/element/element.dart |
| @@ -422,6 +422,16 @@ class ClassElementImpl extends ElementImpl |
| ElementKind get kind => ElementKind.CLASS; |
| @override |
| + List<ElementAnnotation> get metadata { |
| + if (_unlinkedClass != null) { |
| + _metadata ??= _unlinkedClass.annotations |
| + .map(resynthesizerContext.buildAnnotation) |
| + .toList(); |
| + } |
| + return _metadata ?? const <ElementAnnotation>[]; |
|
Paul Berry
2016/05/17 20:45:33
To clarify that this is additional functionality w
scheglov
2016/05/17 21:17:41
Done.
|
| + } |
| + |
| + @override |
| List<MethodElement> get methods => _methods; |
| /** |
| @@ -1238,9 +1248,9 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl |
| */ |
| List<ElementAnnotation> getAnnotations(int offset) { |
| if (annotationMap == null) { |
| - return ElementAnnotation.EMPTY_LIST; |
| + return const <ElementAnnotation>[]; |
| } |
| - return annotationMap[offset] ?? ElementAnnotation.EMPTY_LIST; |
| + return annotationMap[offset] ?? const <ElementAnnotation>[]; |
| } |
| @override |
| @@ -1878,7 +1888,7 @@ abstract class ElementImpl implements Element { |
| /** |
| * A list containing all of the metadata associated with this element. |
| */ |
| - List<ElementAnnotation> metadata = ElementAnnotation.EMPTY_LIST; |
| + List<ElementAnnotation> _metadata; |
| /** |
| * A cached copy of the calculated hashCode for this element. |
| @@ -2086,6 +2096,15 @@ abstract class ElementImpl implements Element { |
| return _cachedLocation; |
| } |
| + List<ElementAnnotation> get metadata { |
| + return _metadata ?? const <ElementAnnotation>[]; |
| + } |
| + |
| + void set metadata(List<ElementAnnotation> metadata) { |
| + assert(resynthesizerContext == null); |
| + _metadata = metadata; |
| + } |
| + |
| @override |
| String get name => _name; |
| @@ -2708,6 +2727,16 @@ abstract class ExecutableElementImpl extends ElementImpl |
| } |
| @override |
| + List<ElementAnnotation> get metadata { |
| + if (serializedExecutable != null) { |
| + _metadata ??= serializedExecutable.annotations |
| + .map(resynthesizerContext.buildAnnotation) |
| + .toList(); |
| + } |
| + return _metadata ?? const <ElementAnnotation>[]; |
|
Paul Berry
2016/05/17 20:45:33
Same suggestion here, and in two additional places
scheglov
2016/05/17 21:17:41
Done.
|
| + } |
| + |
| + @override |
| String get name { |
| if (serializedExecutable != null) { |
| return serializedExecutable.name; |
| @@ -3198,6 +3227,16 @@ class FunctionTypeAliasElementImpl extends ElementImpl |
| ElementKind get kind => ElementKind.FUNCTION_TYPE_ALIAS; |
| @override |
| + List<ElementAnnotation> get metadata { |
| + if (_unlinkedTypedef != null) { |
| + _metadata ??= _unlinkedTypedef.annotations |
| + .map(resynthesizerContext.buildAnnotation) |
| + .toList(); |
| + } |
| + return _metadata ?? const <ElementAnnotation>[]; |
| + } |
| + |
| + @override |
| String get name { |
| if (_unlinkedTypedef != null) { |
| return _unlinkedTypedef.name; |
| @@ -4441,7 +4480,7 @@ class MultiplyDefinedElementImpl implements MultiplyDefinedElement { |
| ElementLocation get location => null; |
| @override |
| - List<ElementAnnotation> get metadata => ElementAnnotation.EMPTY_LIST; |
| + List<ElementAnnotation> get metadata => const <ElementAnnotation>[]; |
| @override |
| String get name => _name; |
| @@ -5068,6 +5107,11 @@ abstract class PropertyInducingElementImpl extends VariableElementImpl |
| */ |
| abstract class ResynthesizerContext { |
| /** |
| + * Build [ElementAnnotationImpl] for the given [UnlinkedConst]. |
| + */ |
| + ElementAnnotationImpl buildAnnotation(UnlinkedConst uc); |
| + |
| + /** |
| * Resolve an [EntityRef] into a type. If the reference is |
| * unresolved, return [DynamicTypeImpl.instance]. |
| * |
| @@ -5269,6 +5313,16 @@ class TypeParameterElementImpl extends ElementImpl |
| ElementKind get kind => ElementKind.TYPE_PARAMETER; |
| @override |
| + List<ElementAnnotation> get metadata { |
| + if (_unlinkedTypeParam != null) { |
| + _metadata ??= _unlinkedTypeParam.annotations |
| + .map(resynthesizerContext.buildAnnotation) |
| + .toList(); |
| + } |
| + return _metadata ?? const <ElementAnnotation>[]; |
| + } |
| + |
| + @override |
| String get name { |
| if (_unlinkedTypeParam != null) { |
| return _unlinkedTypeParam.name; |