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 |