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 |