Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analyzer.src.dart.element.member; | 5 library analyzer.src.dart.element.member; |
| 6 | 6 |
| 7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
| 8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
| 9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
| 10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 } | 121 } |
| 122 return new ConstructorMember(constructor, definingType, substitutedType); | 122 return new ConstructorMember(constructor, definingType, substitutedType); |
| 123 } | 123 } |
| 124 } | 124 } |
| 125 | 125 |
| 126 /** | 126 /** |
| 127 * An executable element defined in a parameterized type where the values of the | 127 * An executable element defined in a parameterized type where the values of the |
| 128 * type parameters are known. | 128 * type parameters are known. |
| 129 */ | 129 */ |
| 130 abstract class ExecutableMember extends Member implements ExecutableElement { | 130 abstract class ExecutableMember extends Member implements ExecutableElement { |
| 131 @override | 131 FunctionType _type; |
| 132 final FunctionType type; | |
| 133 | 132 |
| 134 /** | 133 /** |
| 135 * Initialize a newly created element to represent a callable element (like a | 134 * Initialize a newly created element to represent a callable element (like a |
| 136 * method or function or property), based on the [baseElement], defined by the | 135 * method or function or property), based on the [baseElement], defined by the |
| 137 * [definingType]. If [type] is passed, it represents the full type of the | 136 * [definingType]. If [type] is passed, it represents the full type of the |
| 138 * member, and will take precedence over the [definingType]. | 137 * member, and will take precedence over the [definingType]. |
| 139 */ | 138 */ |
| 140 ExecutableMember(ExecutableElement baseElement, InterfaceType definingType, | 139 ExecutableMember(ExecutableElement baseElement, InterfaceType definingType, |
| 141 [FunctionType type]) | 140 [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
| |
| 142 : type = type ?? | 141 : _type = type, |
| 143 baseElement.type.substitute2(definingType.typeArguments, | |
| 144 TypeParameterTypeImpl.getTypes(definingType.typeParameters)), | |
| 145 super(baseElement, definingType); | 142 super(baseElement, definingType); |
| 146 | 143 |
| 147 @override | 144 @override |
| 148 ExecutableElement get baseElement => super.baseElement as ExecutableElement; | 145 ExecutableElement get baseElement => super.baseElement as ExecutableElement; |
| 149 | 146 |
| 150 @override | 147 @override |
| 151 List<FunctionElement> get functions { | 148 List<FunctionElement> get functions { |
| 152 // | 149 // |
| 153 // Elements within this element should have type parameters substituted, | 150 // Elements within this element should have type parameters substituted, |
| 154 // just like this element. | 151 // just like this element. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 // return getBaseElement().getLocalVariables(); | 191 // return getBaseElement().getLocalVariables(); |
| 195 } | 192 } |
| 196 | 193 |
| 197 @override | 194 @override |
| 198 List<ParameterElement> get parameters => type.parameters; | 195 List<ParameterElement> get parameters => type.parameters; |
| 199 | 196 |
| 200 @override | 197 @override |
| 201 DartType get returnType => type.returnType; | 198 DartType get returnType => type.returnType; |
| 202 | 199 |
| 203 @override | 200 @override |
| 201 FunctionType get type { | |
| 202 return _type ??= baseElement.type.substitute2(definingType.typeArguments, | |
| 203 TypeParameterTypeImpl.getTypes(definingType.typeParameters)); | |
| 204 } | |
| 205 | |
| 206 @override | |
| 204 List<TypeParameterElement> get typeParameters => baseElement.typeParameters; | 207 List<TypeParameterElement> get typeParameters => baseElement.typeParameters; |
| 205 | 208 |
| 206 @override | 209 @override |
| 207 void visitChildren(ElementVisitor visitor) { | 210 void visitChildren(ElementVisitor visitor) { |
| 208 // TODO(brianwilkerson) We need to finish implementing the accessors used | 211 // TODO(brianwilkerson) We need to finish implementing the accessors used |
| 209 // below so that we can safely invoke them. | 212 // below so that we can safely invoke them. |
| 210 super.visitChildren(visitor); | 213 super.visitChildren(visitor); |
| 211 safelyVisitChildren(baseElement.functions, visitor); | 214 safelyVisitChildren(baseElement.functions, visitor); |
| 212 safelyVisitChildren(labels, visitor); | 215 safelyVisitChildren(labels, visitor); |
| 213 safelyVisitChildren(baseElement.localVariables, visitor); | 216 safelyVisitChildren(baseElement.localVariables, visitor); |
| (...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 959 bool get isStatic => baseElement.isStatic; | 962 bool get isStatic => baseElement.isStatic; |
| 960 | 963 |
| 961 @override | 964 @override |
| 962 void visitChildren(ElementVisitor visitor) { | 965 void visitChildren(ElementVisitor visitor) { |
| 963 // TODO(brianwilkerson) We need to finish implementing the accessors used | 966 // TODO(brianwilkerson) We need to finish implementing the accessors used |
| 964 // below so that we can safely invoke them. | 967 // below so that we can safely invoke them. |
| 965 super.visitChildren(visitor); | 968 super.visitChildren(visitor); |
| 966 safelyVisitChild(baseElement.initializer, visitor); | 969 safelyVisitChild(baseElement.initializer, visitor); |
| 967 } | 970 } |
| 968 } | 971 } |
| OLD | NEW |