| 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 part of resolution; | 5 part of resolution; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * [SignatureResolver] resolves function signatures. | 8 * [SignatureResolver] resolves function signatures. |
| 9 */ | 9 */ |
| 10 class SignatureResolver extends MappingVisitor<ParameterElementX> { | 10 class SignatureResolver extends MappingVisitor<ParameterElementX> { |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 // If there are no formal parameters, we already reported an error above. | 293 // If there are no formal parameters, we already reported an error above. |
| 294 if (formalParameters != null) { | 294 if (formalParameters != null) { |
| 295 compiler.reportError(formalParameters, | 295 compiler.reportError(formalParameters, |
| 296 MessageKind.ILLEGAL_SETTER_FORMALS); | 296 MessageKind.ILLEGAL_SETTER_FORMALS); |
| 297 } | 297 } |
| 298 } | 298 } |
| 299 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); | 299 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); |
| 300 for (ParameterElement parameter in parameters) { | 300 for (ParameterElement parameter in parameters) { |
| 301 parameterTypes.addLast(parameter.type); | 301 parameterTypes.addLast(parameter.type); |
| 302 } | 302 } |
| 303 Link<DartType> optionalParameterTypes = const Link<DartType>(); | 303 List<DartType> optionalParameterTypes = const <DartType>[]; |
| 304 Link<String> namedParameters = const Link<String>(); | 304 List<String> namedParameters = const <String>[]; |
| 305 Link<DartType> namedParameterTypes = const Link<DartType>(); | 305 List<DartType> namedParameterTypes = const <DartType>[]; |
| 306 List<Element> orderedOptionalParameters = | 306 List<Element> orderedOptionalParameters = |
| 307 visitor.optionalParameters.toList(); | 307 visitor.optionalParameters.toList(); |
| 308 if (visitor.optionalParametersAreNamed) { | 308 if (visitor.optionalParametersAreNamed) { |
| 309 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List]. |
| 309 orderedOptionalParameters.sort((Element a, Element b) { | 310 orderedOptionalParameters.sort((Element a, Element b) { |
| 310 return a.name.compareTo(b.name); | 311 return a.name.compareTo(b.name); |
| 311 }); | 312 }); |
| 312 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>(); | 313 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>(); |
| 313 LinkBuilder<DartType> namedParameterTypesBuilder = | 314 LinkBuilder<DartType> namedParameterTypesBuilder = |
| 314 new LinkBuilder<DartType>(); | 315 new LinkBuilder<DartType>(); |
| 315 for (ParameterElement parameter in orderedOptionalParameters) { | 316 for (ParameterElement parameter in orderedOptionalParameters) { |
| 316 namedParametersBuilder.addLast(parameter.name); | 317 namedParametersBuilder.addLast(parameter.name); |
| 317 namedParameterTypesBuilder.addLast(parameter.type); | 318 namedParameterTypesBuilder.addLast(parameter.type); |
| 318 } | 319 } |
| 319 namedParameters = namedParametersBuilder.toLink(); | 320 namedParameters = namedParametersBuilder.toLink().toList(growable: false); |
| 320 namedParameterTypes = namedParameterTypesBuilder.toLink(); | 321 namedParameterTypes = namedParameterTypesBuilder.toLink() |
| 322 .toList(growable: false); |
| 321 } else { | 323 } else { |
| 324 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List]. |
| 322 LinkBuilder<DartType> optionalParameterTypesBuilder = | 325 LinkBuilder<DartType> optionalParameterTypesBuilder = |
| 323 new LinkBuilder<DartType>(); | 326 new LinkBuilder<DartType>(); |
| 324 for (ParameterElement parameter in visitor.optionalParameters) { | 327 for (ParameterElement parameter in visitor.optionalParameters) { |
| 325 optionalParameterTypesBuilder.addLast(parameter.type); | 328 optionalParameterTypesBuilder.addLast(parameter.type); |
| 326 } | 329 } |
| 327 optionalParameterTypes = optionalParameterTypesBuilder.toLink(); | 330 optionalParameterTypes = optionalParameterTypesBuilder.toLink() |
| 331 .toList(growable: false); |
| 328 } | 332 } |
| 329 FunctionType type = new FunctionType( | 333 FunctionType type = new FunctionType( |
| 330 element.declaration, | 334 element.declaration, |
| 331 returnType, | 335 returnType, |
| 332 parameterTypes.toLink(), | 336 parameterTypes.toLink().toList(growable: false), |
| 333 optionalParameterTypes, | 337 optionalParameterTypes, |
| 334 namedParameters, | 338 namedParameters, |
| 335 namedParameterTypes); | 339 namedParameterTypes); |
| 336 return new FunctionSignatureX(parameters, | 340 return new FunctionSignatureX(parameters, |
| 337 visitor.optionalParameters, | 341 visitor.optionalParameters, |
| 338 requiredParameterCount, | 342 requiredParameterCount, |
| 339 visitor.optionalParameterCount, | 343 visitor.optionalParameterCount, |
| 340 visitor.optionalParametersAreNamed, | 344 visitor.optionalParametersAreNamed, |
| 341 orderedOptionalParameters, | 345 orderedOptionalParameters, |
| 342 type); | 346 type); |
| 343 } | 347 } |
| 344 | 348 |
| 345 DartType resolveTypeAnnotation(TypeAnnotation annotation) { | 349 DartType resolveTypeAnnotation(TypeAnnotation annotation) { |
| 346 DartType type = resolveReturnType(annotation); | 350 DartType type = resolveReturnType(annotation); |
| 347 if (type.isVoid) { | 351 if (type.isVoid) { |
| 348 compiler.reportError(annotation, MessageKind.VOID_NOT_ALLOWED); | 352 compiler.reportError(annotation, MessageKind.VOID_NOT_ALLOWED); |
| 349 } | 353 } |
| 350 return type; | 354 return type; |
| 351 } | 355 } |
| 352 | 356 |
| 353 DartType resolveReturnType(TypeAnnotation annotation) { | 357 DartType resolveReturnType(TypeAnnotation annotation) { |
| 354 if (annotation == null) return const DynamicType(); | 358 if (annotation == null) return const DynamicType(); |
| 355 DartType result = resolver.resolveTypeAnnotation(annotation); | 359 DartType result = resolver.resolveTypeAnnotation(annotation); |
| 356 if (result == null) { | 360 if (result == null) { |
| 357 return const DynamicType(); | 361 return const DynamicType(); |
| 358 } | 362 } |
| 359 return result; | 363 return result; |
| 360 } | 364 } |
| 361 } | 365 } |
| OLD | NEW |