@@ -13,6 +13,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
13
13
import 'package:analyzer/dart/element/element.dart' ;
14
14
import 'package:analyzer/dart/element/type.dart' ;
15
15
import 'package:analyzer/src/dart/element/type.dart' ;
16
+ import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
16
17
import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
17
18
import 'package:analyzer/src/generated/type_system.dart' ;
18
19
@@ -101,16 +102,15 @@ class CodeChecker extends RecursiveAstVisitor {
101
102
final TypeProvider typeProvider;
102
103
final AnalysisErrorListener reporter;
103
104
final _OverrideChecker _overrideChecker;
104
- final bool _hints ;
105
+ final AnalysisOptionsImpl _options ;
105
106
106
107
bool _failure = false ;
108
+
107
109
CodeChecker (TypeProvider typeProvider, StrongTypeSystemImpl rules,
108
- AnalysisErrorListener reporter,
109
- {bool hints: false })
110
+ AnalysisErrorListener reporter, this ._options)
110
111
: typeProvider = typeProvider,
111
112
rules = rules,
112
113
reporter = reporter,
113
- _hints = hints,
114
114
_overrideChecker = new _OverrideChecker (typeProvider, rules, reporter);
115
115
116
116
bool get failure => _failure || _overrideChecker._failure;
@@ -346,7 +346,7 @@ class CodeChecker extends RecursiveAstVisitor {
346
346
347
347
if (rules.isSubtypeOf (sequenceType, iterableType)) {
348
348
_recordMessage (DownCast .create (
349
- rules, node.iterable, iterableType, sequenceType));
349
+ rules, node.iterable, iterableType, sequenceType, _options ));
350
350
elementType = DynamicTypeImpl .instance;
351
351
}
352
352
}
@@ -632,11 +632,11 @@ class CodeChecker extends RecursiveAstVisitor {
632
632
rules.isSubtypeOf (lhsType, rhsType)) {
633
633
// This is also slightly different from spec, but allows us to keep
634
634
// compound operators in the int += num and num += dynamic cases.
635
- staticInfo =
636
- DownCast . create ( rules, expr.rightHandSide, rhsType, lhsType);
635
+ staticInfo = DownCast . create (
636
+ rules, expr.rightHandSide, rhsType, lhsType, _options );
637
637
rhsType = lhsType;
638
638
} else {
639
- staticInfo = new StaticTypeError (rules, expr, lhsType);
639
+ staticInfo = new StaticTypeError (expr, lhsType);
640
640
}
641
641
_recordMessage (staticInfo);
642
642
}
@@ -679,7 +679,7 @@ class CodeChecker extends RecursiveAstVisitor {
679
679
680
680
// Downcast if toT <: fromT
681
681
if (rules.isSubtypeOf (to, from)) {
682
- _recordMessage (DownCast .create (rules, expr, from, to));
682
+ _recordMessage (DownCast .create (rules, expr, from, to, _options ));
683
683
return ;
684
684
}
685
685
@@ -694,7 +694,7 @@ class CodeChecker extends RecursiveAstVisitor {
694
694
// Iterable<T> for some concrete T (e.g. Object). These are unrelated
695
695
// in the restricted system, but List<dynamic> <: Iterable<T> in dart.
696
696
if (from.isAssignableTo (to)) {
697
- _recordMessage (DownCast .create (rules, expr, from, to));
697
+ _recordMessage (DownCast .create (rules, expr, from, to, _options ));
698
698
}
699
699
}
700
700
@@ -894,8 +894,8 @@ class CodeChecker extends RecursiveAstVisitor {
894
894
}
895
895
896
896
void _recordDynamicInvoke (AstNode node, AstNode target) {
897
- if (_hints ) {
898
- reporter.onError (new DynamicInvoke (rules, node).toAnalysisError ());
897
+ if (_options.strongModeHints ) {
898
+ reporter.onError (new DynamicInvoke (node).toAnalysisError ());
899
899
}
900
900
// TODO(jmesserly): we may eventually want to record if the whole operation
901
901
// (node) was dynamic, rather than the target, but this is an easier fit
@@ -908,7 +908,7 @@ class CodeChecker extends RecursiveAstVisitor {
908
908
var error = info.toAnalysisError ();
909
909
var severity = error.errorCode.errorSeverity;
910
910
if (severity == ErrorSeverity .ERROR ) _failure = true ;
911
- if (severity != ErrorSeverity .INFO || _hints ) {
911
+ if (severity != ErrorSeverity .INFO || _options.strongModeHints ) {
912
912
reporter.onError (error);
913
913
}
914
914
0 commit comments