Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be | 5 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be |
| 6 // refactored to fit into analyzer. | 6 // refactored to fit into analyzer. |
| 7 library analyzer.src.task.strong.checker; | 7 library analyzer.src.task.strong.checker; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart'; | 9 import 'package:analyzer/analyzer.dart'; |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| 11 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 11 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| 12 import 'package:analyzer/dart/ast/token.dart' show TokenType; | 12 import 'package:analyzer/dart/ast/token.dart' show TokenType; |
| 13 import 'package:analyzer/dart/ast/token.dart'; | 13 import 'package:analyzer/dart/ast/token.dart'; |
| 14 import 'package:analyzer/dart/ast/visitor.dart'; | 14 import 'package:analyzer/dart/ast/visitor.dart'; |
| 15 import 'package:analyzer/dart/element/element.dart'; | 15 import 'package:analyzer/dart/element/element.dart'; |
| 16 import 'package:analyzer/dart/element/type.dart'; | 16 import 'package:analyzer/dart/element/type.dart'; |
| 17 import 'package:analyzer/source/error_processor.dart' show ErrorProcessor; | |
| 17 import 'package:analyzer/src/dart/element/element.dart'; | 18 import 'package:analyzer/src/dart/element/element.dart'; |
| 18 import 'package:analyzer/src/dart/element/type.dart'; | 19 import 'package:analyzer/src/dart/element/type.dart'; |
| 19 import 'package:analyzer/src/error/codes.dart' show StrongModeCode; | 20 import 'package:analyzer/src/error/codes.dart' show StrongModeCode; |
| 20 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; | 21 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; |
| 21 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; | 22 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; |
| 22 import 'package:analyzer/src/generated/type_system.dart'; | 23 import 'package:analyzer/src/generated/type_system.dart'; |
| 23 import 'package:analyzer/src/summary/idl.dart'; | 24 import 'package:analyzer/src/summary/idl.dart'; |
| 24 | 25 |
| 25 import 'ast_properties.dart'; | 26 import 'ast_properties.dart'; |
| 26 | 27 |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1031 _recordMessage(expr, errorCode, [from, to]); | 1032 _recordMessage(expr, errorCode, [from, to]); |
| 1032 if (opAssign) { | 1033 if (opAssign) { |
| 1033 setImplicitAssignmentCast(expr, to); | 1034 setImplicitAssignmentCast(expr, to); |
| 1034 } else { | 1035 } else { |
| 1035 setImplicitCast(expr, to); | 1036 setImplicitCast(expr, to); |
| 1036 } | 1037 } |
| 1037 _hasImplicitCasts = true; | 1038 _hasImplicitCasts = true; |
| 1038 } | 1039 } |
| 1039 | 1040 |
| 1040 void _recordMessage(AstNode node, ErrorCode errorCode, List arguments) { | 1041 void _recordMessage(AstNode node, ErrorCode errorCode, List arguments) { |
| 1041 var severity = errorCode.errorSeverity; | 1042 // Compute the right severity taking the analysis options into account. |
| 1043 // We construct a dummy error to make the common case where we end up | |
| 1044 // ignoring the strong mode message cheaper. | |
| 1045 var processor = ErrorProcessor.getProcessor(_options, | |
| 1046 new AnalysisError.forValues(null, -1, 0, errorCode, null, null)); | |
| 1047 var severity = | |
| 1048 (processor != null) ? processor.severity : errorCode.errorSeverity; | |
|
Brian Wilkerson
2017/03/29 13:44:22
If this works, then I suppose it's fine, but I don
| |
| 1049 | |
| 1042 if (severity == ErrorSeverity.ERROR) _failure = true; | 1050 if (severity == ErrorSeverity.ERROR) _failure = true; |
| 1043 if (severity != ErrorSeverity.INFO || _options.strongModeHints) { | 1051 if (severity != ErrorSeverity.INFO || _options.strongModeHints) { |
| 1044 int begin = node is AnnotatedNode | 1052 int begin = node is AnnotatedNode |
| 1045 ? node.firstTokenAfterCommentAndMetadata.offset | 1053 ? node.firstTokenAfterCommentAndMetadata.offset |
| 1046 : node.offset; | 1054 : node.offset; |
| 1047 int length = node.end - begin; | 1055 int length = node.end - begin; |
| 1048 var source = resolutionMap | 1056 var source = resolutionMap |
| 1049 .elementDeclaredByCompilationUnit(node.root as CompilationUnit) | 1057 .elementDeclaredByCompilationUnit(node.root as CompilationUnit) |
| 1050 .source; | 1058 .source; |
| 1051 var error = | 1059 var error = |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1549 var visited = new Set<InterfaceType>(); | 1557 var visited = new Set<InterfaceType>(); |
| 1550 do { | 1558 do { |
| 1551 visited.add(current); | 1559 visited.add(current); |
| 1552 current.mixins.reversed.forEach( | 1560 current.mixins.reversed.forEach( |
| 1553 (m) => _checkIndividualOverridesFromClass(node, m, seen, true)); | 1561 (m) => _checkIndividualOverridesFromClass(node, m, seen, true)); |
| 1554 _checkIndividualOverridesFromClass(node, current.superclass, seen, true); | 1562 _checkIndividualOverridesFromClass(node, current.superclass, seen, true); |
| 1555 current = current.superclass; | 1563 current = current.superclass; |
| 1556 } while (!current.isObject && !visited.contains(current)); | 1564 } while (!current.isObject && !visited.contains(current)); |
| 1557 } | 1565 } |
| 1558 } | 1566 } |
| OLD | NEW |