Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: pkg/analyzer_cli/lib/src/driver.dart

Issue 2039773004: Start adding experimental incremental analysis mode into CLI analyzer. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer_cli/lib/src/incremental_analyzer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer_cli/lib/src/incremental_analyzer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698