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.element; | 5 library analyzer.src.dart.element.element; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 6020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6031 super.forNode(name); | 6031 super.forNode(name); |
6032 | 6032 |
6033 /** | 6033 /** |
6034 * Initialize using the given serialized information. | 6034 * Initialize using the given serialized information. |
6035 */ | 6035 */ |
6036 ParameterElementImpl.forSerialized( | 6036 ParameterElementImpl.forSerialized( |
6037 this._unlinkedParam, ElementImpl enclosingElement) | 6037 this._unlinkedParam, ElementImpl enclosingElement) |
6038 : super.forSerialized(enclosingElement); | 6038 : super.forSerialized(enclosingElement); |
6039 | 6039 |
6040 /** | 6040 /** |
6041 * Initialize using the given serialized information. | |
6042 */ | |
6043 factory ParameterElementImpl.forSerializedFactory( | |
6044 UnlinkedParam unlinkedParameter, ElementImpl enclosingElement, | |
6045 {bool synthetic: false}) { | |
6046 ParameterElementImpl element; | |
6047 if (unlinkedParameter.isInitializingFormal) { | |
6048 if (unlinkedParameter.kind == UnlinkedParamKind.required) { | |
6049 element = new FieldFormalParameterElementImpl.forSerialized( | |
6050 unlinkedParameter, enclosingElement); | |
6051 } else { | |
6052 element = new DefaultFieldFormalParameterElementImpl.forSerialized( | |
6053 unlinkedParameter, enclosingElement); | |
6054 } | |
6055 } else { | |
6056 if (unlinkedParameter.kind == UnlinkedParamKind.required) { | |
6057 element = new ParameterElementImpl.forSerialized( | |
6058 unlinkedParameter, enclosingElement); | |
6059 } else { | |
6060 element = new DefaultParameterElementImpl.forSerialized( | |
6061 unlinkedParameter, enclosingElement); | |
6062 } | |
6063 } | |
6064 element.synthetic = synthetic; | |
6065 return element; | |
6066 } | |
6067 | |
6068 /** | |
6041 * Creates a synthetic parameter with [name], [type] and [kind]. | 6069 * Creates a synthetic parameter with [name], [type] and [kind]. |
6042 */ | 6070 */ |
6043 factory ParameterElementImpl.synthetic( | 6071 factory ParameterElementImpl.synthetic( |
6044 String name, DartType type, ParameterKind kind) { | 6072 String name, DartType type, ParameterKind kind) { |
6045 ParameterElementImpl element = new ParameterElementImpl(name, -1); | 6073 ParameterElementImpl element = new ParameterElementImpl(name, -1); |
6046 element.type = type; | 6074 element.type = type; |
6047 element.synthetic = true; | 6075 element.synthetic = true; |
6048 element.parameterKind = kind; | 6076 element.parameterKind = kind; |
6049 return element; | 6077 return element; |
6050 } | 6078 } |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6201 } | 6229 } |
6202 return _parameterKind; | 6230 return _parameterKind; |
6203 } | 6231 } |
6204 | 6232 |
6205 void set parameterKind(ParameterKind parameterKind) { | 6233 void set parameterKind(ParameterKind parameterKind) { |
6206 assert(_unlinkedParam == null); | 6234 assert(_unlinkedParam == null); |
6207 _parameterKind = parameterKind; | 6235 _parameterKind = parameterKind; |
6208 } | 6236 } |
6209 | 6237 |
6210 @override | 6238 @override |
6211 List<ParameterElement> get parameters => _parameters; | 6239 List<ParameterElement> get parameters { |
6240 if (_unlinkedParam != null) { | |
6241 type; // _parameters is set during computing 'type' | |
Paul Berry
2016/05/27 21:51:20
Even with the comment, this code looks very strang
scheglov
2016/05/27 21:57:04
Done.
| |
6242 } | |
6243 return _parameters; | |
6244 } | |
6212 | 6245 |
6213 /** | 6246 /** |
6214 * Set the parameters defined by this executable element to the given | 6247 * Set the parameters defined by this executable element to the given |
6215 * [parameters]. | 6248 * [parameters]. |
6216 */ | 6249 */ |
6217 void set parameters(List<ParameterElement> parameters) { | 6250 void set parameters(List<ParameterElement> parameters) { |
6218 for (ParameterElement parameter in parameters) { | 6251 for (ParameterElement parameter in parameters) { |
6219 (parameter as ParameterElementImpl).enclosingElement = this; | 6252 (parameter as ParameterElementImpl).enclosingElement = this; |
6220 } | 6253 } |
6221 this._parameters = parameters; | 6254 this._parameters = parameters; |
6222 } | 6255 } |
6223 | 6256 |
6224 @override | 6257 @override |
6225 DartType get type { | 6258 DartType get type { |
6226 if (_unlinkedParam != null && _type == null) { | 6259 if (_unlinkedParam != null && _type == null) { |
6227 _type = enclosingUnit.resynthesizerContext.resolveLinkedType( | 6260 if (_unlinkedParam.isFunctionTyped) { |
6228 _unlinkedParam.inferredTypeSlot, typeParameterContext) ?? | 6261 CompilationUnitElementImpl enclosingUnit = this.enclosingUnit; |
6229 enclosingUnit.resynthesizerContext | 6262 FunctionElementImpl parameterTypeElement = |
6230 .resolveTypeRef(_unlinkedParam.type, typeParameterContext); | 6263 new FunctionElementImpl_forFunctionTypedParameter( |
6264 enclosingUnit, this); | |
6265 if (!isSynthetic) { | |
6266 parameterTypeElement.enclosingElement = this; | |
6267 } | |
6268 List<ParameterElement> subParameters = _unlinkedParam.parameters | |
6269 .map((UnlinkedParam p) => | |
6270 new ParameterElementImpl.forSerializedFactory(p, this, | |
6271 synthetic: isSynthetic)) | |
6272 .toList(growable: false); | |
6273 if (isSynthetic) { | |
6274 parameterTypeElement.parameters = subParameters; | |
6275 } else { | |
6276 _parameters = subParameters; | |
6277 parameterTypeElement.shareParameters(subParameters); | |
6278 } | |
6279 parameterTypeElement.returnType = enclosingUnit.resynthesizerContext | |
6280 .resolveTypeRef(_unlinkedParam.type, typeParameterContext); | |
6281 FunctionTypeImpl parameterType = | |
6282 new FunctionTypeImpl.elementWithNameAndArgs(parameterTypeElement, | |
6283 null, typeParameterContext.allTypeParameterTypes, false); | |
6284 parameterTypeElement.type = parameterType; | |
6285 _type = parameterType; | |
6286 } else { | |
6287 _type = enclosingUnit.resynthesizerContext.resolveLinkedType( | |
6288 _unlinkedParam.inferredTypeSlot, typeParameterContext) ?? | |
6289 enclosingUnit.resynthesizerContext | |
6290 .resolveTypeRef(_unlinkedParam.type, typeParameterContext); | |
6291 } | |
6231 } | 6292 } |
6232 return super.type; | 6293 return super.type; |
6233 } | 6294 } |
6234 | 6295 |
6235 @override | 6296 @override |
6236 List<TypeParameterElement> get typeParameters => _typeParameters; | 6297 List<TypeParameterElement> get typeParameters => _typeParameters; |
6237 | 6298 |
6238 /** | 6299 /** |
6239 * Set the type parameters defined by this parameter element to the given | 6300 * Set the type parameters defined by this parameter element to the given |
6240 * [typeParameters]. | 6301 * [typeParameters]. |
(...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7473 | 7534 |
7474 @override | 7535 @override |
7475 void visitElement(Element element) { | 7536 void visitElement(Element element) { |
7476 int offset = element.nameOffset; | 7537 int offset = element.nameOffset; |
7477 if (offset != -1) { | 7538 if (offset != -1) { |
7478 map[offset] = element; | 7539 map[offset] = element; |
7479 } | 7540 } |
7480 super.visitElement(element); | 7541 super.visitElement(element); |
7481 } | 7542 } |
7482 } | 7543 } |
OLD | NEW |