| 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.generated.resolver; | 5 library analyzer.src.generated.resolver; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 8144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8155 _enclosingFunction = outerFunction; | 8155 _enclosingFunction = outerFunction; |
| 8156 } | 8156 } |
| 8157 return null; | 8157 return null; |
| 8158 } | 8158 } |
| 8159 | 8159 |
| 8160 @override | 8160 @override |
| 8161 Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { | 8161 Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
| 8162 safelyVisit(node.function); | 8162 safelyVisit(node.function); |
| 8163 node.accept(elementResolver); | 8163 node.accept(elementResolver); |
| 8164 _inferFunctionExpressionsParametersTypes(node.argumentList); | 8164 _inferFunctionExpressionsParametersTypes(node.argumentList); |
| 8165 InferenceContext.setType(node.argumentList, node.function.staticType); | 8165 _inferArgumentTypesFromContext(node); |
| 8166 safelyVisit(node.argumentList); | 8166 safelyVisit(node.argumentList); |
| 8167 node.accept(typeAnalyzer); | 8167 node.accept(typeAnalyzer); |
| 8168 return null; | 8168 return null; |
| 8169 } | 8169 } |
| 8170 | 8170 |
| 8171 @override | 8171 @override |
| 8172 Object visitFunctionTypeAlias(FunctionTypeAlias node) { | 8172 Object visitFunctionTypeAlias(FunctionTypeAlias node) { |
| 8173 // Resolve the metadata in the library scope. | 8173 // Resolve the metadata in the library scope. |
| 8174 if (node.metadata != null) { | 8174 if (node.metadata != null) { |
| 8175 node.metadata.accept(this); | 8175 node.metadata.accept(this); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8374 @override | 8374 @override |
| 8375 Object visitMethodInvocation(MethodInvocation node) { | 8375 Object visitMethodInvocation(MethodInvocation node) { |
| 8376 // | 8376 // |
| 8377 // We visit the target and argument list, but do not visit the method name | 8377 // We visit the target and argument list, but do not visit the method name |
| 8378 // because it needs to be visited in the context of the invocation. | 8378 // because it needs to be visited in the context of the invocation. |
| 8379 // | 8379 // |
| 8380 safelyVisit(node.target); | 8380 safelyVisit(node.target); |
| 8381 safelyVisit(node.typeArguments); | 8381 safelyVisit(node.typeArguments); |
| 8382 node.accept(elementResolver); | 8382 node.accept(elementResolver); |
| 8383 _inferFunctionExpressionsParametersTypes(node.argumentList); | 8383 _inferFunctionExpressionsParametersTypes(node.argumentList); |
| 8384 DartType contextType = node.staticInvokeType; | 8384 _inferArgumentTypesFromContext(node); |
| 8385 if (contextType is FunctionType) { | |
| 8386 InferenceContext.setType(node.argumentList, contextType); | |
| 8387 } | |
| 8388 safelyVisit(node.argumentList); | 8385 safelyVisit(node.argumentList); |
| 8389 node.accept(typeAnalyzer); | 8386 node.accept(typeAnalyzer); |
| 8390 return null; | 8387 return null; |
| 8391 } | 8388 } |
| 8392 | 8389 |
| 8390 void _inferArgumentTypesFromContext(InvocationExpression node) { |
| 8391 DartType contextType = node.staticInvokeType; |
| 8392 if (contextType is FunctionType) { |
| 8393 DartType originalType = node.function.staticType; |
| 8394 DartType returnContextType = InferenceContext.getType(node); |
| 8395 TypeSystem ts = typeSystem; |
| 8396 if (returnContextType != null && |
| 8397 node.typeArguments == null && |
| 8398 originalType is FunctionType && |
| 8399 originalType.typeFormals.isNotEmpty && |
| 8400 ts is StrongTypeSystemImpl) { |
| 8401 |
| 8402 contextType = ts.inferGenericFunctionCall(typeProvider, originalType, |
| 8403 DartType.EMPTY_LIST, DartType.EMPTY_LIST, returnContextType); |
| 8404 } |
| 8405 |
| 8406 InferenceContext.setType(node.argumentList, contextType); |
| 8407 } |
| 8408 } |
| 8409 |
| 8393 @override | 8410 @override |
| 8394 Object visitNamedExpression(NamedExpression node) { | 8411 Object visitNamedExpression(NamedExpression node) { |
| 8395 InferenceContext.setType(node.expression, InferenceContext.getType(node)); | 8412 InferenceContext.setType(node.expression, InferenceContext.getType(node)); |
| 8396 return super.visitNamedExpression(node); | 8413 return super.visitNamedExpression(node); |
| 8397 } | 8414 } |
| 8398 | 8415 |
| 8399 @override | 8416 @override |
| 8400 Object visitNode(AstNode node) { | 8417 Object visitNode(AstNode node) { |
| 8401 node.visitChildren(this); | 8418 node.visitChildren(this); |
| 8402 node.accept(elementResolver); | 8419 node.accept(elementResolver); |
| (...skipping 4380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12783 nonFields.add(node); | 12800 nonFields.add(node); |
| 12784 return null; | 12801 return null; |
| 12785 } | 12802 } |
| 12786 | 12803 |
| 12787 @override | 12804 @override |
| 12788 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); | 12805 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); |
| 12789 | 12806 |
| 12790 @override | 12807 @override |
| 12791 Object visitWithClause(WithClause node) => null; | 12808 Object visitWithClause(WithClause node) => null; |
| 12792 } | 12809 } |
| OLD | NEW |