| 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' as io; | 9 import 'dart:io' as io; |
| 10 | 10 |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 _previousOptions = options; | 484 _previousOptions = options; |
| 485 | 485 |
| 486 // Save stats from previous context before clobbering it. | 486 // Save stats from previous context before clobbering it. |
| 487 if (_context != null) { | 487 if (_context != null) { |
| 488 _analyzedFileCount += _context.sources.length; | 488 _analyzedFileCount += _context.sources.length; |
| 489 } | 489 } |
| 490 | 490 |
| 491 // Create a context. | 491 // Create a context. |
| 492 _context = AnalysisEngine.instance.createAnalysisContext(); | 492 _context = AnalysisEngine.instance.createAnalysisContext(); |
| 493 | 493 |
| 494 AnalyzeFunctionBodiesPredicate dietParsingPolicy = | |
| 495 _chooseDietParsingPolicy(options); | |
| 496 setAnalysisContextOptions(resourceProvider, _context, options, | |
| 497 (AnalysisOptionsImpl contextOptions) { | |
| 498 contextOptions.analyzeFunctionBodiesPredicate = dietParsingPolicy; | |
| 499 }); | |
| 500 | |
| 501 // Find package info. | 494 // Find package info. |
| 502 _PackageInfo packageInfo = _findPackages(options); | 495 _PackageInfo packageInfo = _findPackages(options); |
| 503 | 496 |
| 504 // Process embedders. | 497 // Process embedders. |
| 505 Map<file_system.Folder, YamlMap> embedderMap = | 498 Map<file_system.Folder, YamlMap> embedderMap = |
| 506 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; | 499 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; |
| 507 | 500 |
| 508 // Scan for SDK extenders. | 501 // Scan for SDK extenders. |
| 509 bool hasSdkExt = _hasSdkExt(packageInfo.packageMap?.values); | 502 bool hasSdkExt = _hasSdkExt(packageInfo.packageMap?.values); |
| 510 | 503 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 521 useSummaries ? options.buildSummaryInputs : <String>[]); | 514 useSummaries ? options.buildSummaryInputs : <String>[]); |
| 522 | 515 |
| 523 // Once options and embedders are processed, setup the SDK. | 516 // Once options and embedders are processed, setup the SDK. |
| 524 _setupSdk(options, useSummaries); | 517 _setupSdk(options, useSummaries); |
| 525 | 518 |
| 526 // Choose a package resolution policy and a diet parsing policy based on | 519 // Choose a package resolution policy and a diet parsing policy based on |
| 527 // the command-line options. | 520 // the command-line options. |
| 528 SourceFactory sourceFactory = _chooseUriResolutionPolicy( | 521 SourceFactory sourceFactory = _chooseUriResolutionPolicy( |
| 529 options, embedderMap, packageInfo, summaryDataStore); | 522 options, embedderMap, packageInfo, summaryDataStore); |
| 530 | 523 |
| 524 AnalyzeFunctionBodiesPredicate dietParsingPolicy = |
| 525 _chooseDietParsingPolicy(options); |
| 526 setAnalysisContextOptions( |
| 527 resourceProvider, sourceFactory, _context, options, |
| 528 (AnalysisOptionsImpl contextOptions) { |
| 529 contextOptions.analyzeFunctionBodiesPredicate = dietParsingPolicy; |
| 530 }); |
| 531 |
| 531 _context.sourceFactory = sourceFactory; | 532 _context.sourceFactory = sourceFactory; |
| 532 _context.resultProvider = | 533 _context.resultProvider = |
| 533 new InputPackagesResultProvider(_context, summaryDataStore); | 534 new InputPackagesResultProvider(_context, summaryDataStore); |
| 534 } | 535 } |
| 535 | 536 |
| 536 /// Return discovered packagespec, or `null` if none is found. | 537 /// Return discovered packagespec, or `null` if none is found. |
| 537 Packages _discoverPackagespec(Uri root) { | 538 Packages _discoverPackagespec(Uri root) { |
| 538 try { | 539 try { |
| 539 Packages packages = pkg_discovery.findPackagesFromFile(root); | 540 Packages packages = pkg_discovery.findPackagesFromFile(root); |
| 540 if (packages != Packages.noPackages) { | 541 if (packages != Packages.noPackages) { |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 contextOptions.generateSdkErrors = options.showSdkWarnings; | 674 contextOptions.generateSdkErrors = options.showSdkWarnings; |
| 674 contextOptions.lint = options.lints; | 675 contextOptions.lint = options.lints; |
| 675 contextOptions.strongMode = options.strongMode; | 676 contextOptions.strongMode = options.strongMode; |
| 676 contextOptions.implicitCasts = options.implicitCasts; | 677 contextOptions.implicitCasts = options.implicitCasts; |
| 677 contextOptions.implicitDynamic = options.implicitDynamic; | 678 contextOptions.implicitDynamic = options.implicitDynamic; |
| 678 return contextOptions; | 679 return contextOptions; |
| 679 } | 680 } |
| 680 | 681 |
| 681 static void setAnalysisContextOptions( | 682 static void setAnalysisContextOptions( |
| 682 file_system.ResourceProvider resourceProvider, | 683 file_system.ResourceProvider resourceProvider, |
| 684 SourceFactory sourceFactory, |
| 683 AnalysisContext context, | 685 AnalysisContext context, |
| 684 CommandLineOptions options, | 686 CommandLineOptions options, |
| 685 void configureContextOptions(AnalysisOptionsImpl contextOptions)) { | 687 void configureContextOptions(AnalysisOptionsImpl contextOptions)) { |
| 686 Map<String, String> definedVariables = options.definedVariables; | 688 Map<String, String> definedVariables = options.definedVariables; |
| 687 if (definedVariables.isNotEmpty) { | 689 if (definedVariables.isNotEmpty) { |
| 688 DeclaredVariables declaredVariables = context.declaredVariables; | 690 DeclaredVariables declaredVariables = context.declaredVariables; |
| 689 definedVariables.forEach((String variableName, String value) { | 691 definedVariables.forEach((String variableName, String value) { |
| 690 declaredVariables.define(variableName, value); | 692 declaredVariables.define(variableName, value); |
| 691 }); | 693 }); |
| 692 } | 694 } |
| 693 | 695 |
| 694 if (options.log) { | 696 if (options.log) { |
| 695 AnalysisEngine.instance.logger = new StdLogger(); | 697 AnalysisEngine.instance.logger = new StdLogger(); |
| 696 } | 698 } |
| 697 | 699 |
| 698 // Prepare context options. | 700 // Prepare context options. |
| 699 AnalysisOptionsImpl contextOptions = | 701 AnalysisOptionsImpl contextOptions = |
| 700 createAnalysisOptionsForCommandLineOptions(options); | 702 createAnalysisOptionsForCommandLineOptions(options); |
| 701 configureContextOptions(contextOptions); | 703 configureContextOptions(contextOptions); |
| 702 | 704 |
| 703 // Set context options. | 705 // Set context options. |
| 704 context.analysisOptions = contextOptions; | 706 context.analysisOptions = contextOptions; |
| 705 | 707 |
| 706 // Process analysis options file (and notify all interested parties). | 708 // Process analysis options file (and notify all interested parties). |
| 707 _processAnalysisOptions(resourceProvider, context, options); | 709 _processAnalysisOptions(resourceProvider, sourceFactory, context, options); |
| 708 } | 710 } |
| 709 | 711 |
| 710 /// Perform a deep comparison of two string lists. | 712 /// Perform a deep comparison of two string lists. |
| 711 static bool _equalLists(List<String> l1, List<String> l2) { | 713 static bool _equalLists(List<String> l1, List<String> l2) { |
| 712 if (l1.length != l2.length) { | 714 if (l1.length != l2.length) { |
| 713 return false; | 715 return false; |
| 714 } | 716 } |
| 715 for (int i = 0; i < l1.length; i++) { | 717 for (int i = 0; i < l1.length; i++) { |
| 716 if (l1[i] != l2[i]) { | 718 if (l1[i] != l2[i]) { |
| 717 return false; | 719 return false; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 } | 756 } |
| 755 return file; | 757 return file; |
| 756 } | 758 } |
| 757 | 759 |
| 758 /// Convert [sourcePath] into an absolute path. | 760 /// Convert [sourcePath] into an absolute path. |
| 759 static String _normalizeSourcePath(String sourcePath) => | 761 static String _normalizeSourcePath(String sourcePath) => |
| 760 path.normalize(new io.File(sourcePath).absolute.path); | 762 path.normalize(new io.File(sourcePath).absolute.path); |
| 761 | 763 |
| 762 static void _processAnalysisOptions( | 764 static void _processAnalysisOptions( |
| 763 file_system.ResourceProvider resourceProvider, | 765 file_system.ResourceProvider resourceProvider, |
| 766 SourceFactory sourceFactory, |
| 764 AnalysisContext context, | 767 AnalysisContext context, |
| 765 CommandLineOptions options) { | 768 CommandLineOptions options) { |
| 766 file_system.File file = _getOptionsFile(resourceProvider, options); | 769 file_system.File file = _getOptionsFile(resourceProvider, options); |
| 767 List<OptionsProcessor> optionsProcessors = | 770 List<OptionsProcessor> optionsProcessors = |
| 768 AnalysisEngine.instance.optionsPlugin.optionsProcessors; | 771 AnalysisEngine.instance.optionsPlugin.optionsProcessors; |
| 772 |
| 769 try { | 773 try { |
| 770 AnalysisOptionsProvider analysisOptionsProvider = | 774 AnalysisOptionsProvider analysisOptionsProvider = |
| 771 new AnalysisOptionsProvider(); | 775 new AnalysisOptionsProvider(sourceFactory); |
| 772 Map<String, YamlNode> optionMap = | 776 Map<String, YamlNode> optionMap = |
| 773 analysisOptionsProvider.getOptionsFromFile(file); | 777 analysisOptionsProvider.getOptionsFromFile(file); |
| 774 optionsProcessors.forEach( | 778 optionsProcessors.forEach( |
| 775 (OptionsProcessor p) => p.optionsProcessed(context, optionMap)); | 779 (OptionsProcessor p) => p.optionsProcessed(context, optionMap)); |
| 776 | 780 |
| 777 // Fill in lint rule defaults in case lints are enabled and rules are | 781 // Fill in lint rule defaults in case lints are enabled and rules are |
| 778 // not specified in an options file. | 782 // not specified in an options file. |
| 779 if (options.lints && !containsLintRuleEntry(optionMap)) { | 783 if (options.lints && !containsLintRuleEntry(optionMap)) { |
| 780 setLints(context, linterPlugin.contributedRules); | 784 setLints(context, linterPlugin.contributedRules); |
| 781 } | 785 } |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 for (var package in packages) { | 878 for (var package in packages) { |
| 875 var packageName = path.basename(package.path); | 879 var packageName = path.basename(package.path); |
| 876 var realPath = package.resolveSymbolicLinksSync(); | 880 var realPath = package.resolveSymbolicLinksSync(); |
| 877 result[packageName] = [ | 881 result[packageName] = [ |
| 878 PhysicalResourceProvider.INSTANCE.getFolder(realPath) | 882 PhysicalResourceProvider.INSTANCE.getFolder(realPath) |
| 879 ]; | 883 ]; |
| 880 } | 884 } |
| 881 return result; | 885 return result; |
| 882 } | 886 } |
| 883 } | 887 } |
| OLD | NEW |