Chromium Code Reviews| Index: pkg/analyzer/lib/src/dart/element/member.dart |
| diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart |
| index 57cbcb91d44f57a45c2e3d724f8121d0f185176d..f3689e4dbcbf4106dd7a01bf4194dad3c66b327c 100644 |
| --- a/pkg/analyzer/lib/src/dart/element/member.dart |
| +++ b/pkg/analyzer/lib/src/dart/element/member.dart |
| @@ -128,8 +128,7 @@ class ConstructorMember extends ExecutableMember implements ConstructorElement { |
| * type parameters are known. |
| */ |
| abstract class ExecutableMember extends Member implements ExecutableElement { |
| - @override |
| - final FunctionType type; |
| + FunctionType _type; |
| /** |
| * Initialize a newly created element to represent a callable element (like a |
| @@ -139,9 +138,7 @@ abstract class ExecutableMember extends Member implements ExecutableElement { |
| */ |
| ExecutableMember(ExecutableElement baseElement, InterfaceType definingType, |
| [FunctionType type]) |
|
scheglov
2016/02/10 21:53:26
[FunctionType this._type] maybe?
OTOH this is not
Paul Berry
2016/02/10 22:10:59
Yeah, I had a similar thought. I think I'd prefer
|
| - : type = type ?? |
| - baseElement.type.substitute2(definingType.typeArguments, |
| - TypeParameterTypeImpl.getTypes(definingType.typeParameters)), |
| + : _type = type, |
| super(baseElement, definingType); |
| @override |
| @@ -201,6 +198,12 @@ abstract class ExecutableMember extends Member implements ExecutableElement { |
| DartType get returnType => type.returnType; |
| @override |
| + FunctionType get type { |
| + return _type ??= baseElement.type.substitute2(definingType.typeArguments, |
| + TypeParameterTypeImpl.getTypes(definingType.typeParameters)); |
| + } |
| + |
| + @override |
| List<TypeParameterElement> get typeParameters => baseElement.typeParameters; |
| @override |