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 8c2085c9a3348c5edad40ccb1591dc65c1fc8a6a..746e88fb7d19d71e55b9371298dfc8a50f0d7df1 100644 |
| --- a/pkg/analyzer/lib/src/dart/element/element.dart |
| +++ b/pkg/analyzer/lib/src/dart/element/element.dart |
| @@ -3114,9 +3114,16 @@ abstract class ExecutableElementImpl extends ElementImpl |
| } |
| @override |
| - FunctionType get type => _type; |
| + FunctionType get type { |
| + if (serializedExecutable != null) { |
| + _type ??= new FunctionTypeImpl.elementWithNameAndArgs( |
| + this, null, allEnclosingTypeParameterTypes, false); |
| + } |
| + return _type; |
| + } |
| void set type(FunctionType type) { |
| + assert(serializedExecutable == null); |
| _type = type; |
| } |
| @@ -5260,6 +5267,14 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement { |
| } |
| @override |
| + List<TypeParameterType> get allEnclosingTypeParameterTypes { |
| + if (isStatic) { |
| + return const <TypeParameterType>[]; |
| + } |
| + return super.allEnclosingTypeParameterTypes; |
| + } |
| + |
| + @override |
| String get displayName { |
| String displayName = super.displayName; |
| if ("unary-" == displayName) { |
| @@ -6374,6 +6389,14 @@ class PropertyAccessorElementImpl extends ExecutableElementImpl |
| } |
| @override |
| + List<TypeParameterType> get allEnclosingTypeParameterTypes { |
| + if (isStatic) { |
| + return const <TypeParameterType>[]; |
| + } |
| + return super.allEnclosingTypeParameterTypes; |
| + } |
| + |
| + @override |
| PropertyAccessorElement get correspondingGetter { |
| if (isGetter || variable == null) { |
| return null; |
| @@ -6998,9 +7021,31 @@ class TypeParameterElementImpl extends ElementImpl |
| */ |
| abstract class TypeParameterizedElementMixin |
| implements TypeParameterizedElement, ElementImpl { |
| - List<TypeParameterType> _typeParameterTypes; |
| - List<TypeParameterElement> _typeParameterElements; |
| int _nestingLevel; |
| + List<TypeParameterElement> _typeParameterElements; |
| + List<TypeParameterType> _typeParameterTypes; |
| + List<TypeParameterType> _allTypeParameterTypes; |
| + |
| + /** |
| + * Return all type parameter types of the element that encloses element. |
| + * Not `null`, but might be empty for top-level and static class members. |
| + */ |
| + List<TypeParameterType> get allEnclosingTypeParameterTypes { |
| + return enclosingTypeParameterContext?.allTypeParameterTypes ?? |
| + const <TypeParameterType>[]; |
| + } |
| + |
| + /** |
| + * Return all type parameter types of this element. |
| + */ |
| + List<TypeParameterType> get allTypeParameterTypes { |
| + if (_allTypeParameterTypes == null) { |
| + _allTypeParameterTypes = <TypeParameterType>[]; |
| + _allTypeParameterTypes.addAll(typeParameterTypes); |
| + _allTypeParameterTypes.addAll(allEnclosingTypeParameterTypes); |
|
Paul Berry
2016/05/27 17:04:50
This order seems backwards. Shouldn't we list out
|
| + } |
| + return _allTypeParameterTypes; |
| + } |
| /** |
| * Get the type parameter context enclosing this one, if any. |