| 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 import 'package:logging/logging.dart' as logger; | 11 import 'package:logging/logging.dart' as logger; |
| 12 | 12 |
| 13 import 'package:dev_compiler/src/info.dart'; | 13 import 'package:dev_compiler/src/info.dart'; |
| 14 import 'package:dev_compiler/src/options.dart'; | |
| 15 import 'package:dev_compiler/src/report.dart' show CheckerReporter; | 14 import 'package:dev_compiler/src/report.dart' show CheckerReporter; |
| 16 import 'package:dev_compiler/src/utils.dart' show getMemberType; | 15 import 'package:dev_compiler/src/utils.dart' show getMemberType; |
| 16 import 'package:dev_compiler/strong_mode.dart' show StrongModeOptions; |
| 17 import 'rules.dart'; | 17 import 'rules.dart'; |
| 18 | 18 |
| 19 /// Checks for overriding declarations of fields and methods. This is used to | 19 /// Checks for overriding declarations of fields and methods. This is used to |
| 20 /// check overrides between classes and superclasses, interfaces, and mixin | 20 /// check overrides between classes and superclasses, interfaces, and mixin |
| 21 /// applications. | 21 /// applications. |
| 22 class _OverrideChecker { | 22 class _OverrideChecker { |
| 23 bool _failure = false; | 23 bool _failure = false; |
| 24 final TypeRules _rules; | 24 final TypeRules _rules; |
| 25 final CheckerReporter _reporter; | 25 final CheckerReporter _reporter; |
| 26 final bool _inferFromOverrides; | 26 final bool _inferFromOverrides; |
| 27 _OverrideChecker(this._rules, this._reporter, CompilerOptions options) | 27 _OverrideChecker(this._rules, this._reporter, StrongModeOptions options) |
| 28 : _inferFromOverrides = options.inferFromOverrides; | 28 : _inferFromOverrides = options.inferFromOverrides; |
| 29 | 29 |
| 30 void check(ClassDeclaration node) { | 30 void check(ClassDeclaration node) { |
| 31 if (node.element.type.isObject) return; | 31 if (node.element.type.isObject) return; |
| 32 _checkSuperOverrides(node); | 32 _checkSuperOverrides(node); |
| 33 _checkMixinApplicationOverrides(node); | 33 _checkMixinApplicationOverrides(node); |
| 34 _checkAllInterfaceOverrides(node); | 34 _checkAllInterfaceOverrides(node); |
| 35 } | 35 } |
| 36 | 36 |
| 37 /// Check overrides from mixin applications themselves. For example, in: | 37 /// Check overrides from mixin applications themselves. For example, in: |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 /// Checks the body of functions and properties. | 335 /// Checks the body of functions and properties. |
| 336 class CodeChecker extends RecursiveAstVisitor { | 336 class CodeChecker extends RecursiveAstVisitor { |
| 337 final TypeRules _rules; | 337 final TypeRules _rules; |
| 338 final CheckerReporter _reporter; | 338 final CheckerReporter _reporter; |
| 339 final _OverrideChecker _overrideChecker; | 339 final _OverrideChecker _overrideChecker; |
| 340 bool _constantContext = false; | 340 bool _constantContext = false; |
| 341 bool _failure = false; | 341 bool _failure = false; |
| 342 bool get failure => _failure || _overrideChecker._failure; | 342 bool get failure => _failure || _overrideChecker._failure; |
| 343 | 343 |
| 344 CodeChecker( | 344 CodeChecker( |
| 345 TypeRules rules, CheckerReporter reporter, CompilerOptions options) | 345 TypeRules rules, CheckerReporter reporter, StrongModeOptions options) |
| 346 : _rules = rules, | 346 : _rules = rules, |
| 347 _reporter = reporter, | 347 _reporter = reporter, |
| 348 _overrideChecker = new _OverrideChecker(rules, reporter, options); | 348 _overrideChecker = new _OverrideChecker(rules, reporter, options); |
| 349 | 349 |
| 350 @override | 350 @override |
| 351 void visitCompilationUnit(CompilationUnit unit) { | 351 void visitCompilationUnit(CompilationUnit unit) { |
| 352 void report(Expression expr) { | 352 void report(Expression expr) { |
| 353 _reporter.log(new MissingTypeError(expr)); | 353 _reporter.log(new MissingTypeError(expr)); |
| 354 } | 354 } |
| 355 var callback = _rules.reportMissingType; | 355 var callback = _rules.reportMissingType; |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 void _recordMessage(StaticInfo info) { | 948 void _recordMessage(StaticInfo info) { |
| 949 if (info == null) return; | 949 if (info == null) return; |
| 950 if (info.level >= logger.Level.SEVERE) _failure = true; | 950 if (info.level >= logger.Level.SEVERE) _failure = true; |
| 951 _reporter.log(info); | 951 _reporter.log(info); |
| 952 if (info is CoercionInfo) { | 952 if (info is CoercionInfo) { |
| 953 assert(CoercionInfo.get(info.node) == null); | 953 assert(CoercionInfo.get(info.node) == null); |
| 954 CoercionInfo.set(info.node, info); | 954 CoercionInfo.set(info.node, info); |
| 955 } | 955 } |
| 956 } | 956 } |
| 957 } | 957 } |
| OLD | NEW |