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 /// Types needed to implement "strong" checking in the Dart analyzer. This is | 5 /// Types needed to implement "strong" checking in the Dart analyzer. This is |
6 /// intended to be used by `analyzer_cli` and `analysis_server` packages. | 6 /// intended to be used by `analyzer_cli` and `analysis_server` packages. |
7 library dev_compiler.strong_mode; | 7 library dev_compiler.strong_mode; |
8 | 8 |
9 import 'package:analyzer/src/generated/engine.dart' | 9 import 'package:analyzer/src/generated/engine.dart' |
10 show | 10 show |
(...skipping 13 matching lines...) Expand all Loading... |
24 StaticTypeWarningCode; | 24 StaticTypeWarningCode; |
25 import 'package:analyzer/src/generated/source.dart' show Source; | 25 import 'package:analyzer/src/generated/source.dart' show Source; |
26 import 'package:args/args.dart'; | 26 import 'package:args/args.dart'; |
27 | 27 |
28 import 'src/analysis_context.dart' show enableDevCompilerInference; | 28 import 'src/analysis_context.dart' show enableDevCompilerInference; |
29 import 'src/checker/checker.dart' show CodeChecker; | 29 import 'src/checker/checker.dart' show CodeChecker; |
30 import 'src/checker/rules.dart' show TypeRules; | 30 import 'src/checker/rules.dart' show TypeRules; |
31 | 31 |
32 /// A type checker for Dart code that operates under stronger rules, and has | 32 /// A type checker for Dart code that operates under stronger rules, and has |
33 /// the ability to do local type inference in some situations. | 33 /// the ability to do local type inference in some situations. |
| 34 // TODO(jmesserly): remove this class. |
34 class StrongChecker { | 35 class StrongChecker { |
35 final AnalysisContext _context; | 36 final AnalysisContext _context; |
36 final CodeChecker _checker; | 37 final CodeChecker _checker; |
37 final _ErrorCollector _reporter; | 38 final _ErrorCollector _reporter; |
38 | 39 |
39 StrongChecker._(this._context, this._checker, this._reporter); | 40 StrongChecker._(this._context, this._checker, this._reporter); |
40 | 41 |
41 factory StrongChecker(AnalysisContext context, StrongModeOptions options) { | 42 factory StrongChecker(AnalysisContext context, StrongModeOptions options) { |
42 // TODO(vsm): Remove this once analyzer_cli is completely switched to the | 43 // TODO(vsm): Remove this once analyzer_cli is completely switched to the |
43 // task model. | 44 // task model. |
44 if (!AnalysisEngine | 45 if (!AnalysisEngine.instance.useTaskModel) { |
45 .instance.useTaskModel) enableDevCompilerInference(context, options); | 46 enableDevCompilerInference(context, options); |
46 var rules = new TypeRules(context.typeProvider, options: options); | 47 var rules = new TypeRules(context.typeProvider); |
47 var reporter = new _ErrorCollector(options.hints); | 48 var reporter = new _ErrorCollector(options.hints); |
48 var checker = new CodeChecker(rules, reporter); | 49 var checker = new CodeChecker(rules, reporter); |
49 return new StrongChecker._(context, checker, reporter); | 50 return new StrongChecker._(context, checker, reporter); |
| 51 } |
| 52 return new StrongChecker._(context, null, null); |
50 } | 53 } |
51 | 54 |
52 /// Computes and returns DDC errors for the [source]. | 55 /// Computes and returns DDC errors for the [source]. |
53 AnalysisErrorInfo computeErrors(Source source) { | 56 AnalysisErrorInfo computeErrors(Source source) { |
54 var errors = new List<AnalysisError>(); | 57 var errors = new List<AnalysisError>(); |
55 _reporter.errors = errors; | 58 if (_checker != null) { |
| 59 _reporter.errors = errors; |
56 | 60 |
57 for (Source librarySource in _context.getLibrariesContaining(source)) { | 61 for (Source librarySource in _context.getLibrariesContaining(source)) { |
58 var resolved = _context.resolveCompilationUnit2(source, librarySource); | 62 var resolved = _context.resolveCompilationUnit2(source, librarySource); |
59 _checker.visitCompilationUnit(resolved); | 63 _checker.visitCompilationUnit(resolved); |
| 64 } |
| 65 _reporter.errors = null; |
60 } | 66 } |
61 _reporter.errors = null; | |
62 | |
63 return new AnalysisErrorInfoImpl(errors, _context.getLineInfo(source)); | 67 return new AnalysisErrorInfoImpl(errors, _context.getLineInfo(source)); |
64 } | 68 } |
65 } | 69 } |
66 | 70 |
67 class _ErrorCollector implements AnalysisErrorListener { | 71 class _ErrorCollector implements AnalysisErrorListener { |
68 List<AnalysisError> errors; | 72 List<AnalysisError> errors; |
69 final bool hints; | 73 final bool hints; |
70 _ErrorCollector(this.hints); | 74 _ErrorCollector(this.hints); |
71 | 75 |
72 void onError(AnalysisError error) { | 76 void onError(AnalysisError error) { |
(...skipping 26 matching lines...) Expand all Loading... |
99 defaultsTo: false, | 103 defaultsTo: false, |
100 hide: hide); | 104 hide: hide); |
101 } | 105 } |
102 | 106 |
103 bool operator ==(Object other) { | 107 bool operator ==(Object other) { |
104 if (other is! StrongModeOptions) return false; | 108 if (other is! StrongModeOptions) return false; |
105 StrongModeOptions s = other; | 109 StrongModeOptions s = other; |
106 return hints == s.hints; | 110 return hints == s.hints; |
107 } | 111 } |
108 } | 112 } |
OLD | NEW |