| 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 import 'dart:io' as io; | 6 import 'dart:io' as io; |
| 7 | 7 |
| 8 import 'package:analyzer/error/error.dart'; | 8 import 'package:analyzer/error/error.dart'; |
| 9 import 'package:analyzer/file_system/file_system.dart' as file_system; | 9 import 'package:analyzer/file_system/file_system.dart' as file_system; |
| 10 import 'package:analyzer/file_system/file_system.dart'; | 10 import 'package:analyzer/file_system/file_system.dart'; |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 dartSdkPath: options.dartSdkPath) | 306 dartSdkPath: options.dartSdkPath) |
| 307 .run(); | 307 .run(); |
| 308 } else { | 308 } else { |
| 309 return new BuildMode(resourceProvider, options, stats).analyze(); | 309 return new BuildMode(resourceProvider, options, stats).analyze(); |
| 310 } | 310 } |
| 311 }); | 311 }); |
| 312 } | 312 } |
| 313 | 313 |
| 314 /// Determine whether the context created during a previous call to | 314 /// Determine whether the context created during a previous call to |
| 315 /// [_analyzeAll] can be re-used in order to analyze using [options]. | 315 /// [_analyzeAll] can be re-used in order to analyze using [options]. |
| 316 bool _canContextBeReused(CommandLineOptions options) { | 316 bool _canContextBeReused( |
| 317 CommandLineOptions options, AnalysisOptionsImpl other) { |
| 317 // TODO(paulberry): add a command-line option that disables context re-use. | 318 // TODO(paulberry): add a command-line option that disables context re-use. |
| 318 if (_context == null) { | 319 if (_context == null) { |
| 319 return false; | 320 return false; |
| 320 } | 321 } |
| 322 |
| 323 // Check command line options. |
| 321 if (options.packageRootPath != _previousOptions.packageRootPath) { | 324 if (options.packageRootPath != _previousOptions.packageRootPath) { |
| 322 return false; | 325 return false; |
| 323 } | 326 } |
| 324 if (options.packageConfigPath != _previousOptions.packageConfigPath) { | 327 if (options.packageConfigPath != _previousOptions.packageConfigPath) { |
| 325 return false; | 328 return false; |
| 326 } | 329 } |
| 327 if (!_equalMaps( | 330 if (!_equalMaps( |
| 328 options.definedVariables, _previousOptions.definedVariables)) { | 331 options.definedVariables, _previousOptions.definedVariables)) { |
| 329 return false; | 332 return false; |
| 330 } | 333 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 361 if (options.enableSuperMixins != _previousOptions.enableSuperMixins) { | 364 if (options.enableSuperMixins != _previousOptions.enableSuperMixins) { |
| 362 return false; | 365 return false; |
| 363 } | 366 } |
| 364 if (!_equalLists( | 367 if (!_equalLists( |
| 365 options.buildSummaryInputs, _previousOptions.buildSummaryInputs)) { | 368 options.buildSummaryInputs, _previousOptions.buildSummaryInputs)) { |
| 366 return false; | 369 return false; |
| 367 } | 370 } |
| 368 if (options.disableCacheFlushing != _previousOptions.disableCacheFlushing) { | 371 if (options.disableCacheFlushing != _previousOptions.disableCacheFlushing) { |
| 369 return false; | 372 return false; |
| 370 } | 373 } |
| 374 |
| 375 // Check analysis options. |
| 376 var c = _context.analysisOptions; |
| 377 if (!(other.enableAssertInitializer == c.enableAssertInitializer && |
| 378 other.enableStrictCallChecks == c.enableStrictCallChecks && |
| 379 other.enableLazyAssignmentOperators == |
| 380 c.enableLazyAssignmentOperators && |
| 381 other.enableSuperMixins == c.enableSuperMixins && |
| 382 other.enableTiming == c.enableTiming && |
| 383 other.generateImplicitErrors == c.generateImplicitErrors && |
| 384 other.generateSdkErrors == c.generateSdkErrors && |
| 385 other.hint == c.hint && |
| 386 other.lint == c.lint && |
| 387 AnalysisOptionsImpl.compareLints(other.lintRules, c.lintRules) && |
| 388 other.preserveComments == c.preserveComments && |
| 389 other.strongMode == c.strongMode)) { |
| 390 return false; |
| 391 } |
| 392 |
| 371 return true; | 393 return true; |
| 372 } | 394 } |
| 373 | 395 |
| 374 /// Decide on the appropriate policy for which files need to be fully parsed | 396 /// Decide on the appropriate policy for which files need to be fully parsed |
| 375 /// and which files need to be diet parsed, based on [options], and return an | 397 /// and which files need to be diet parsed, based on [options], and return an |
| 376 /// [AnalyzeFunctionBodiesPredicate] that implements this policy. | 398 /// [AnalyzeFunctionBodiesPredicate] that implements this policy. |
| 377 AnalyzeFunctionBodiesPredicate _chooseDietParsingPolicy( | 399 AnalyzeFunctionBodiesPredicate _chooseDietParsingPolicy( |
| 378 CommandLineOptions options) { | 400 CommandLineOptions options) { |
| 379 if (options.shouldBatch) { | 401 if (options.shouldBatch) { |
| 380 // As analyzer is currently implemented, once a file has been diet | 402 // As analyzer is currently implemented, once a file has been diet |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 Uri uri = _context.sourceFactory.restoreUri(source); | 560 Uri uri = _context.sourceFactory.restoreUri(source); |
| 539 if (uri == null) { | 561 if (uri == null) { |
| 540 return source; | 562 return source; |
| 541 } | 563 } |
| 542 return new FileSource(sourceFile, uri); | 564 return new FileSource(sourceFile, uri); |
| 543 } | 565 } |
| 544 | 566 |
| 545 /// Create an analysis context that is prepared to analyze sources according | 567 /// Create an analysis context that is prepared to analyze sources according |
| 546 /// to the given [options], and store it in [_context]. | 568 /// to the given [options], and store it in [_context]. |
| 547 void _createAnalysisContext(CommandLineOptions options) { | 569 void _createAnalysisContext(CommandLineOptions options) { |
| 548 if (_canContextBeReused(options)) { | 570 AnalysisOptionsImpl analysisOptions = |
| 571 createAnalysisOptionsForCommandLineOptions(resourceProvider, options); |
| 572 analysisOptions.analyzeFunctionBodiesPredicate = |
| 573 _chooseDietParsingPolicy(options); |
| 574 |
| 575 if (_canContextBeReused(options, analysisOptions)) { |
| 549 return; | 576 return; |
| 550 } | 577 } |
| 578 |
| 551 _previousOptions = options; | 579 _previousOptions = options; |
| 552 | 580 |
| 553 // Save stats from previous context before clobbering it. | 581 // Save stats from previous context before clobbering it. |
| 554 if (_context != null) { | 582 if (_context != null) { |
| 555 _analyzedFileCount += _context.sources.length; | 583 _analyzedFileCount += _context.sources.length; |
| 556 } | 584 } |
| 557 | 585 |
| 558 // Find package info. | 586 // Find package info. |
| 559 _PackageInfo packageInfo = _findPackages(options); | 587 _PackageInfo packageInfo = _findPackages(options); |
| 560 | 588 |
| 561 // Process embedders. | 589 // Process embedders. |
| 562 Map<file_system.Folder, YamlMap> embedderMap = | 590 Map<file_system.Folder, YamlMap> embedderMap = |
| 563 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; | 591 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; |
| 564 | 592 |
| 565 // Scan for SDK extenders. | 593 // Scan for SDK extenders. |
| 566 bool hasSdkExt = _hasSdkExt(packageInfo.packageMap?.values); | 594 bool hasSdkExt = _hasSdkExt(packageInfo.packageMap?.values); |
| 567 | 595 |
| 568 // No summaries in the presence of embedders or extenders. | 596 // No summaries in the presence of embedders or extenders. |
| 569 bool useSummaries = embedderMap.isEmpty && !hasSdkExt; | 597 bool useSummaries = embedderMap.isEmpty && !hasSdkExt; |
| 570 | 598 |
| 571 if (!useSummaries && options.buildSummaryInputs.isNotEmpty) { | 599 if (!useSummaries && options.buildSummaryInputs.isNotEmpty) { |
| 572 throw new _DriverError( | 600 throw new _DriverError( |
| 573 'Summaries are not yet supported when using Flutter.'); | 601 'Summaries are not yet supported when using Flutter.'); |
| 574 } | 602 } |
| 575 | 603 |
| 576 // Read any input summaries. | 604 // Read any input summaries. |
| 577 SummaryDataStore summaryDataStore = new SummaryDataStore( | 605 SummaryDataStore summaryDataStore = new SummaryDataStore( |
| 578 useSummaries ? options.buildSummaryInputs : <String>[]); | 606 useSummaries ? options.buildSummaryInputs : <String>[]); |
| 579 | 607 |
| 580 AnalysisOptionsImpl analysisOptions = | |
| 581 createAnalysisOptionsForCommandLineOptions(resourceProvider, options); | |
| 582 analysisOptions.analyzeFunctionBodiesPredicate = | |
| 583 _chooseDietParsingPolicy(options); | |
| 584 | |
| 585 // Once options and embedders are processed, setup the SDK. | 608 // Once options and embedders are processed, setup the SDK. |
| 586 _setupSdk(options, useSummaries, analysisOptions); | 609 _setupSdk(options, useSummaries, analysisOptions); |
| 587 | 610 |
| 588 PackageBundle sdkBundle = sdk.getLinkedBundle(); | 611 PackageBundle sdkBundle = sdk.getLinkedBundle(); |
| 589 if (sdkBundle != null) { | 612 if (sdkBundle != null) { |
| 590 summaryDataStore.addBundle(null, sdkBundle); | 613 summaryDataStore.addBundle(null, sdkBundle); |
| 591 } | 614 } |
| 592 | 615 |
| 593 // Choose a package resolution policy and a diet parsing policy based on | 616 // Choose a package resolution policy and a diet parsing policy based on |
| 594 // the command-line options. | 617 // the command-line options. |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 for (var package in packages) { | 912 for (var package in packages) { |
| 890 var packageName = path.basename(package.path); | 913 var packageName = path.basename(package.path); |
| 891 var realPath = package.resolveSymbolicLinksSync(); | 914 var realPath = package.resolveSymbolicLinksSync(); |
| 892 result[packageName] = [ | 915 result[packageName] = [ |
| 893 PhysicalResourceProvider.INSTANCE.getFolder(realPath) | 916 PhysicalResourceProvider.INSTANCE.getFolder(realPath) |
| 894 ]; | 917 ]; |
| 895 } | 918 } |
| 896 return result; | 919 return result; |
| 897 } | 920 } |
| 898 } | 921 } |
| OLD | NEW |