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 analyzer_cli.src.driver; | 5 library analyzer_cli.src.driver; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:io'; | 9 import 'dart:io'; |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 import 'package:analyzer/src/generated/source.dart'; | 30 import 'package:analyzer/src/generated/source.dart'; |
31 import 'package:analyzer/src/generated/source_io.dart'; | 31 import 'package:analyzer/src/generated/source_io.dart'; |
32 import 'package:analyzer/src/generated/utilities_general.dart' | 32 import 'package:analyzer/src/generated/utilities_general.dart' |
33 show PerformanceTag; | 33 show PerformanceTag; |
34 import 'package:analyzer/src/services/lint.dart'; | 34 import 'package:analyzer/src/services/lint.dart'; |
35 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk; | 35 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk; |
36 import 'package:analyzer/src/task/options.dart'; | 36 import 'package:analyzer/src/task/options.dart'; |
37 import 'package:analyzer_cli/src/analyzer_impl.dart'; | 37 import 'package:analyzer_cli/src/analyzer_impl.dart'; |
38 import 'package:analyzer_cli/src/build_mode.dart'; | 38 import 'package:analyzer_cli/src/build_mode.dart'; |
39 import 'package:analyzer_cli/src/error_formatter.dart'; | 39 import 'package:analyzer_cli/src/error_formatter.dart'; |
| 40 import 'package:analyzer_cli/src/incremental_analyzer.dart'; |
40 import 'package:analyzer_cli/src/options.dart'; | 41 import 'package:analyzer_cli/src/options.dart'; |
41 import 'package:analyzer_cli/src/perf_report.dart'; | 42 import 'package:analyzer_cli/src/perf_report.dart'; |
42 import 'package:analyzer_cli/starter.dart'; | 43 import 'package:analyzer_cli/starter.dart'; |
43 import 'package:linter/src/plugin/linter_plugin.dart'; | 44 import 'package:linter/src/plugin/linter_plugin.dart'; |
44 import 'package:package_config/discovery.dart' as pkg_discovery; | 45 import 'package:package_config/discovery.dart' as pkg_discovery; |
45 import 'package:package_config/packages.dart' show Packages; | 46 import 'package:package_config/packages.dart' show Packages; |
46 import 'package:package_config/packages_file.dart' as pkgfile show parse; | 47 import 'package:package_config/packages_file.dart' as pkgfile show parse; |
47 import 'package:package_config/src/packages_impl.dart' show MapPackages; | 48 import 'package:package_config/src/packages_impl.dart' show MapPackages; |
48 import 'package:path/path.dart' as path; | 49 import 'package:path/path.dart' as path; |
49 import 'package:plugin/manager.dart'; | 50 import 'package:plugin/manager.dart'; |
(...skipping 29 matching lines...) Expand all Loading... |
79 /// `null` if [_analyzeAll] hasn't been called yet. | 80 /// `null` if [_analyzeAll] hasn't been called yet. |
80 AnalysisContext _context; | 81 AnalysisContext _context; |
81 | 82 |
82 /// The total number of source files loaded by an AnalysisContext. | 83 /// The total number of source files loaded by an AnalysisContext. |
83 int _analyzedFileCount = 0; | 84 int _analyzedFileCount = 0; |
84 | 85 |
85 /// If [_context] is not `null`, the [CommandLineOptions] that guided its | 86 /// If [_context] is not `null`, the [CommandLineOptions] that guided its |
86 /// creation. | 87 /// creation. |
87 CommandLineOptions _previousOptions; | 88 CommandLineOptions _previousOptions; |
88 | 89 |
| 90 IncrementalAnalysisData incrementalData; |
| 91 |
89 @override | 92 @override |
90 EmbeddedResolverProvider embeddedUriResolverProvider; | 93 EmbeddedResolverProvider embeddedUriResolverProvider; |
91 | 94 |
92 @override | 95 @override |
93 ResolverProvider packageResolverProvider; | 96 ResolverProvider packageResolverProvider; |
94 | 97 |
95 /// SDK instance. | 98 /// SDK instance. |
96 DartSdk sdk; | 99 DartSdk sdk; |
97 | 100 |
98 /// Collected analysis statistics. | 101 /// Collected analysis statistics. |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 for (Source source in sourcesToAnalyze) { | 213 for (Source source in sourcesToAnalyze) { |
211 if (context.computeKindOf(source) == SourceKind.PART) { | 214 if (context.computeKindOf(source) == SourceKind.PART) { |
212 parts.add(source); | 215 parts.add(source); |
213 continue; | 216 continue; |
214 } | 217 } |
215 ErrorSeverity status = _runAnalyzer(source, options); | 218 ErrorSeverity status = _runAnalyzer(source, options); |
216 allResult = allResult.max(status); | 219 allResult = allResult.max(status); |
217 libUris.add(source.uri); | 220 libUris.add(source.uri); |
218 } | 221 } |
219 | 222 |
| 223 incrementalData?.finish(); |
| 224 |
220 // Check that each part has a corresponding source in the input list. | 225 // Check that each part has a corresponding source in the input list. |
221 for (Source part in parts) { | 226 for (Source part in parts) { |
222 bool found = false; | 227 bool found = false; |
223 for (var lib in context.getLibrariesContaining(part)) { | 228 for (var lib in context.getLibrariesContaining(part)) { |
224 if (libUris.contains(lib.uri)) { | 229 if (libUris.contains(lib.uri)) { |
225 found = true; | 230 found = true; |
226 } | 231 } |
227 } | 232 } |
228 if (!found) { | 233 if (!found) { |
229 errorSink.writeln("${part.fullName} is a part and cannot be analyzed."); | 234 errorSink.writeln("${part.fullName} is a part and cannot be analyzed."); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 } | 295 } |
291 if (options.lints != _previousOptions.lints) { | 296 if (options.lints != _previousOptions.lints) { |
292 return false; | 297 return false; |
293 } | 298 } |
294 if (options.strongMode != _previousOptions.strongMode) { | 299 if (options.strongMode != _previousOptions.strongMode) { |
295 return false; | 300 return false; |
296 } | 301 } |
297 if (options.enableSuperMixins != _previousOptions.enableSuperMixins) { | 302 if (options.enableSuperMixins != _previousOptions.enableSuperMixins) { |
298 return false; | 303 return false; |
299 } | 304 } |
| 305 if (options.incrementalCachePath != _previousOptions.incrementalCachePath) { |
| 306 return false; |
| 307 } |
300 return true; | 308 return true; |
301 } | 309 } |
302 | 310 |
303 /// Decide on the appropriate policy for which files need to be fully parsed | 311 /// Decide on the appropriate policy for which files need to be fully parsed |
304 /// and which files need to be diet parsed, based on [options], and return an | 312 /// and which files need to be diet parsed, based on [options], and return an |
305 /// [AnalyzeFunctionBodiesPredicate] that implements this policy. | 313 /// [AnalyzeFunctionBodiesPredicate] that implements this policy. |
306 AnalyzeFunctionBodiesPredicate _chooseDietParsingPolicy( | 314 AnalyzeFunctionBodiesPredicate _chooseDietParsingPolicy( |
307 CommandLineOptions options) { | 315 CommandLineOptions options) { |
308 if (options.shouldBatch) { | 316 if (options.shouldBatch) { |
309 // As analyzer is currently implemented, once a file has been diet | 317 // As analyzer is currently implemented, once a file has been diet |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 | 511 |
504 // Once options and embedders are processed, setup the SDK. | 512 // Once options and embedders are processed, setup the SDK. |
505 _setupSdk(options, useSummaries); | 513 _setupSdk(options, useSummaries); |
506 | 514 |
507 // Choose a package resolution policy and a diet parsing policy based on | 515 // Choose a package resolution policy and a diet parsing policy based on |
508 // the command-line options. | 516 // the command-line options. |
509 SourceFactory sourceFactory = | 517 SourceFactory sourceFactory = |
510 _chooseUriResolutionPolicy(options, embedderMap, packageInfo); | 518 _chooseUriResolutionPolicy(options, embedderMap, packageInfo); |
511 | 519 |
512 _context.sourceFactory = sourceFactory; | 520 _context.sourceFactory = sourceFactory; |
| 521 |
| 522 incrementalData = configureIncrementalAnalysis(options, context); |
513 } | 523 } |
514 | 524 |
515 /// Return discovered packagespec, or `null` if none is found. | 525 /// Return discovered packagespec, or `null` if none is found. |
516 Packages _discoverPackagespec(Uri root) { | 526 Packages _discoverPackagespec(Uri root) { |
517 try { | 527 try { |
518 Packages packages = pkg_discovery.findPackagesFromFile(root); | 528 Packages packages = pkg_discovery.findPackagesFromFile(root); |
519 if (packages != Packages.noPackages) { | 529 if (packages != Packages.noPackages) { |
520 return packages; | 530 return packages; |
521 } | 531 } |
522 } catch (_) { | 532 } catch (_) { |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 for (var package in packages) { | 855 for (var package in packages) { |
846 var packageName = path.basename(package.path); | 856 var packageName = path.basename(package.path); |
847 var realPath = package.resolveSymbolicLinksSync(); | 857 var realPath = package.resolveSymbolicLinksSync(); |
848 result[packageName] = [ | 858 result[packageName] = [ |
849 PhysicalResourceProvider.INSTANCE.getFolder(realPath) | 859 PhysicalResourceProvider.INSTANCE.getFolder(realPath) |
850 ]; | 860 ]; |
851 } | 861 } |
852 return result; | 862 return result; |
853 } | 863 } |
854 } | 864 } |
OLD | NEW |