Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(391)

Side by Side Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 2336503003: fix #25578, implement @covariant parameter overrides (Closed)
Patch Set: fix comments, format Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 } 526 }
527 } 527 }
528 return problemReported; 528 return problemReported;
529 } 529 }
530 530
531 /** 531 /**
532 * Produce a hint if the given [target] could have a value of `null`, and 532 * Produce a hint if the given [target] could have a value of `null`, and
533 * [identifier] is not a name of a getter or a method that exists in the 533 * [identifier] is not a name of a getter or a method that exists in the
534 * class [Null]. 534 * class [Null].
535 */ 535 */
536 void _checkForCanBeNullAfterNullAware( 536 void _checkForCanBeNullAfterNullAware(Expression target, Token operator,
537 Expression target, Token operator, SimpleIdentifier propertyName, SimpleId entifier methodName) { 537 SimpleIdentifier propertyName, SimpleIdentifier methodName) {
538 if (operator?.type == TokenType.QUESTION_PERIOD) { 538 if (operator?.type == TokenType.QUESTION_PERIOD) {
539 return; 539 return;
540 } 540 }
541 bool isNullTypeMember() { 541 bool isNullTypeMember() {
542 if (propertyName != null) { 542 if (propertyName != null) {
543 String name = propertyName.name; 543 String name = propertyName.name;
544 return _nullType.lookUpGetter(name, _currentLibrary) != null; 544 return _nullType.lookUpGetter(name, _currentLibrary) != null;
545 } 545 }
546 if (methodName != null) { 546 if (methodName != null) {
547 String name = methodName.name; 547 String name = methodName.name;
(...skipping 6773 matching lines...) Expand 10 before | Expand all | Expand 10 after
7321 return; 7321 return;
7322 } 7322 }
7323 FunctionType expectedClosureType = mayByFunctionType as FunctionType; 7323 FunctionType expectedClosureType = mayByFunctionType as FunctionType;
7324 // If the expectedClosureType is not more specific than the static type, 7324 // If the expectedClosureType is not more specific than the static type,
7325 // return. 7325 // return.
7326 DartType staticClosureType = closure.element?.type; 7326 DartType staticClosureType = closure.element?.type;
7327 if (staticClosureType != null && 7327 if (staticClosureType != null &&
7328 !FunctionTypeImpl.relate( 7328 !FunctionTypeImpl.relate(
7329 expectedClosureType, 7329 expectedClosureType,
7330 staticClosureType, 7330 staticClosureType,
7331 (DartType t, DartType s) => (t as TypeImpl).isMoreSpecificThan(s), 7331 (DartType t, DartType s, _, __) =>
7332 (t as TypeImpl).isMoreSpecificThan(s),
7332 new TypeSystemImpl().instantiateToBounds, 7333 new TypeSystemImpl().instantiateToBounds,
7333 returnRelation: (s, t) => true)) { 7334 returnRelation: (s, t) => true)) {
7334 return; 7335 return;
7335 } 7336 }
7336 // set propagated type for the closure 7337 // set propagated type for the closure
7337 closure.propagatedType = expectedClosureType; 7338 closure.propagatedType = expectedClosureType;
7338 // set inferred types for parameters 7339 // set inferred types for parameters
7339 NodeList<FormalParameter> parameters = closure.parameters.parameters; 7340 NodeList<FormalParameter> parameters = closure.parameters.parameters;
7340 List<ParameterElement> expectedParameters = expectedClosureType.parameters; 7341 List<ParameterElement> expectedParameters = expectedClosureType.parameters;
7341 for (int i = 0; 7342 for (int i = 0;
(...skipping 3819 matching lines...) Expand 10 before | Expand all | Expand 10 after
11161 return null; 11162 return null;
11162 } 11163 }
11163 if (identical(node.staticElement, variable)) { 11164 if (identical(node.staticElement, variable)) {
11164 if (node.inSetterContext()) { 11165 if (node.inSetterContext()) {
11165 result = true; 11166 result = true;
11166 } 11167 }
11167 } 11168 }
11168 return null; 11169 return null;
11169 } 11170 }
11170 } 11171 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/error_verifier.dart ('k') | pkg/analyzer/lib/src/generated/type_system.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698