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 library dev_compiler.src.checker.checker; | 5 library dev_compiler.src.checker.checker; |
6 | 6 |
7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
9 import 'package:analyzer/src/generated/element.dart'; | 9 import 'package:analyzer/src/generated/element.dart'; |
10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; | 10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; |
11 | 11 |
12 import '../../strong_mode.dart' show StrongModeOptions; | 12 import '../../strong_mode.dart' show StrongModeOptions; |
13 import '../info.dart'; | 13 import '../info.dart'; |
14 import '../utils.dart' show getMemberType; | 14 import '../utils.dart' show getMemberType; |
15 import 'rules.dart'; | 15 import 'rules.dart'; |
16 | 16 |
17 /// Checks for overriding declarations of fields and methods. This is used to | 17 /// Checks for overriding declarations of fields and methods. This is used to |
18 /// check overrides between classes and superclasses, interfaces, and mixin | 18 /// check overrides between classes and superclasses, interfaces, and mixin |
19 /// applications. | 19 /// applications. |
20 class _OverrideChecker { | 20 class _OverrideChecker { |
21 bool _failure = false; | 21 bool _failure = false; |
22 final TypeRules _rules; | 22 final TypeRules _rules; |
23 final AnalysisErrorListener _reporter; | 23 final AnalysisErrorListener _reporter; |
24 final bool _inferFromOverrides; | 24 |
25 _OverrideChecker(this._rules, this._reporter, StrongModeOptions options) | 25 _OverrideChecker(this._rules, this._reporter); |
26 : _inferFromOverrides = options.inferFromOverrides; | |
27 | 26 |
28 void check(ClassDeclaration node) { | 27 void check(ClassDeclaration node) { |
29 if (node.element.type.isObject) return; | 28 if (node.element.type.isObject) return; |
30 _checkSuperOverrides(node); | 29 _checkSuperOverrides(node); |
31 _checkMixinApplicationOverrides(node); | 30 _checkMixinApplicationOverrides(node); |
32 _checkAllInterfaceOverrides(node); | 31 _checkAllInterfaceOverrides(node); |
33 } | 32 } |
34 | 33 |
35 /// Check overrides from mixin applications themselves. For example, in: | 34 /// Check overrides from mixin applications themselves. For example, in: |
36 /// | 35 /// |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 final AnalysisErrorListener reporter; | 328 final AnalysisErrorListener reporter; |
330 final _OverrideChecker _overrideChecker; | 329 final _OverrideChecker _overrideChecker; |
331 bool _failure = false; | 330 bool _failure = false; |
332 bool get failure => _failure || _overrideChecker._failure; | 331 bool get failure => _failure || _overrideChecker._failure; |
333 | 332 |
334 void reset() { | 333 void reset() { |
335 _failure = false; | 334 _failure = false; |
336 _overrideChecker._failure = false; | 335 _overrideChecker._failure = false; |
337 } | 336 } |
338 | 337 |
339 CodeChecker(TypeRules rules, AnalysisErrorListener reporter, | 338 CodeChecker(TypeRules rules, AnalysisErrorListener reporter) |
340 StrongModeOptions options) | |
341 : rules = rules, | 339 : rules = rules, |
342 reporter = reporter, | 340 reporter = reporter, |
343 _overrideChecker = new _OverrideChecker(rules, reporter, options); | 341 _overrideChecker = new _OverrideChecker(rules, reporter); |
344 | 342 |
345 @override | 343 @override |
346 void visitCompilationUnit(CompilationUnit unit) { | 344 void visitCompilationUnit(CompilationUnit unit) { |
347 void report(Expression expr) { | 345 void report(Expression expr) { |
348 reporter.onError(new MissingTypeError(expr).toAnalysisError()); | 346 reporter.onError(new MissingTypeError(expr).toAnalysisError()); |
349 } | 347 } |
350 var callback = rules.reportMissingType; | 348 var callback = rules.reportMissingType; |
351 rules.reportMissingType = report; | 349 rules.reportMissingType = report; |
352 unit.visitChildren(this); | 350 unit.visitChildren(this); |
353 rules.reportMissingType = callback; | 351 rules.reportMissingType = callback; |
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 if (info is CoercionInfo) { | 959 if (info is CoercionInfo) { |
962 // TODO(jmesserly): if we're run again on the same AST, we'll produce the | 960 // TODO(jmesserly): if we're run again on the same AST, we'll produce the |
963 // same annotations. This should be harmless. This might go away once | 961 // same annotations. This should be harmless. This might go away once |
964 // CodeChecker is integrated better with analyzer, as it will know that | 962 // CodeChecker is integrated better with analyzer, as it will know that |
965 // checking has already been performed. | 963 // checking has already been performed. |
966 // assert(CoercionInfo.get(info.node) == null); | 964 // assert(CoercionInfo.get(info.node) == null); |
967 CoercionInfo.set(info.node, info); | 965 CoercionInfo.set(info.node, info); |
968 } | 966 } |
969 } | 967 } |
970 } | 968 } |
OLD | NEW |