| Index: pkg/analyzer/lib/src/task/strong/checker.dart
|
| diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
|
| index 4566e6a81dae0acfd055087cf3ad3b9044852bea..01bea7f766a02154655cb08377b114bbc7a91753 100644
|
| --- a/pkg/analyzer/lib/src/task/strong/checker.dart
|
| +++ b/pkg/analyzer/lib/src/task/strong/checker.dart
|
| @@ -13,6 +13,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| import 'package:analyzer/dart/element/type.dart';
|
| import 'package:analyzer/src/dart/element/type.dart';
|
| +import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
|
| import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
|
| import 'package:analyzer/src/generated/type_system.dart';
|
|
|
| @@ -101,16 +102,15 @@ class CodeChecker extends RecursiveAstVisitor {
|
| final TypeProvider typeProvider;
|
| final AnalysisErrorListener reporter;
|
| final _OverrideChecker _overrideChecker;
|
| - final bool _hints;
|
| + final AnalysisOptionsImpl _options;
|
|
|
| bool _failure = false;
|
| +
|
| CodeChecker(TypeProvider typeProvider, StrongTypeSystemImpl rules,
|
| - AnalysisErrorListener reporter,
|
| - {bool hints: false})
|
| + AnalysisErrorListener reporter, this._options)
|
| : typeProvider = typeProvider,
|
| rules = rules,
|
| reporter = reporter,
|
| - _hints = hints,
|
| _overrideChecker = new _OverrideChecker(typeProvider, rules, reporter);
|
|
|
| bool get failure => _failure || _overrideChecker._failure;
|
| @@ -346,7 +346,7 @@ class CodeChecker extends RecursiveAstVisitor {
|
|
|
| if (rules.isSubtypeOf(sequenceType, iterableType)) {
|
| _recordMessage(DownCast.create(
|
| - rules, node.iterable, iterableType, sequenceType));
|
| + rules, node.iterable, iterableType, sequenceType, _options));
|
| elementType = DynamicTypeImpl.instance;
|
| }
|
| }
|
| @@ -632,11 +632,11 @@ class CodeChecker extends RecursiveAstVisitor {
|
| rules.isSubtypeOf(lhsType, rhsType)) {
|
| // This is also slightly different from spec, but allows us to keep
|
| // compound operators in the int += num and num += dynamic cases.
|
| - staticInfo =
|
| - DownCast.create(rules, expr.rightHandSide, rhsType, lhsType);
|
| + staticInfo = DownCast.create(
|
| + rules, expr.rightHandSide, rhsType, lhsType, _options);
|
| rhsType = lhsType;
|
| } else {
|
| - staticInfo = new StaticTypeError(rules, expr, lhsType);
|
| + staticInfo = new StaticTypeError(expr, lhsType);
|
| }
|
| _recordMessage(staticInfo);
|
| }
|
| @@ -679,7 +679,7 @@ class CodeChecker extends RecursiveAstVisitor {
|
|
|
| // Downcast if toT <: fromT
|
| if (rules.isSubtypeOf(to, from)) {
|
| - _recordMessage(DownCast.create(rules, expr, from, to));
|
| + _recordMessage(DownCast.create(rules, expr, from, to, _options));
|
| return;
|
| }
|
|
|
| @@ -694,7 +694,7 @@ class CodeChecker extends RecursiveAstVisitor {
|
| // Iterable<T> for some concrete T (e.g. Object). These are unrelated
|
| // in the restricted system, but List<dynamic> <: Iterable<T> in dart.
|
| if (from.isAssignableTo(to)) {
|
| - _recordMessage(DownCast.create(rules, expr, from, to));
|
| + _recordMessage(DownCast.create(rules, expr, from, to, _options));
|
| }
|
| }
|
|
|
| @@ -894,8 +894,8 @@ class CodeChecker extends RecursiveAstVisitor {
|
| }
|
|
|
| void _recordDynamicInvoke(AstNode node, AstNode target) {
|
| - if (_hints) {
|
| - reporter.onError(new DynamicInvoke(rules, node).toAnalysisError());
|
| + if (_options.strongModeHints) {
|
| + reporter.onError(new DynamicInvoke(node).toAnalysisError());
|
| }
|
| // TODO(jmesserly): we may eventually want to record if the whole operation
|
| // (node) was dynamic, rather than the target, but this is an easier fit
|
| @@ -908,7 +908,7 @@ class CodeChecker extends RecursiveAstVisitor {
|
| var error = info.toAnalysisError();
|
| var severity = error.errorCode.errorSeverity;
|
| if (severity == ErrorSeverity.ERROR) _failure = true;
|
| - if (severity != ErrorSeverity.INFO || _hints) {
|
| + if (severity != ErrorSeverity.INFO || _options.strongModeHints) {
|
| reporter.onError(error);
|
| }
|
|
|
|
|