| 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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 stats.print(outSink); | 245 stats.print(outSink); |
| 246 } | 246 } |
| 247 | 247 |
| 248 return allResult; | 248 return allResult; |
| 249 } | 249 } |
| 250 | 250 |
| 251 /// Perform analysis in build mode according to the given [options]. | 251 /// Perform analysis in build mode according to the given [options]. |
| 252 ErrorSeverity _buildModeAnalyze(CommandLineOptions options) { | 252 ErrorSeverity _buildModeAnalyze(CommandLineOptions options) { |
| 253 return _analyzeAllTag.makeCurrentWhile(() { | 253 return _analyzeAllTag.makeCurrentWhile(() { |
| 254 if (options.buildModePersistentWorker) { | 254 if (options.buildModePersistentWorker) { |
| 255 new AnalyzerWorkerLoop.std(dartSdkPath: options.dartSdkPath).run(); | 255 new AnalyzerWorkerLoop.std(resourceProvider, |
| 256 dartSdkPath: options.dartSdkPath) |
| 257 .run(); |
| 256 } else { | 258 } else { |
| 257 return new BuildMode(options, stats).analyze(); | 259 return new BuildMode(resourceProvider, options, stats).analyze(); |
| 258 } | 260 } |
| 259 }); | 261 }); |
| 260 } | 262 } |
| 261 | 263 |
| 262 /// Determine whether the context created during a previous call to | 264 /// Determine whether the context created during a previous call to |
| 263 /// [_analyzeAll] can be re-used in order to analyze using [options]. | 265 /// [_analyzeAll] can be re-used in order to analyze using [options]. |
| 264 bool _canContextBeReused(CommandLineOptions options) { | 266 bool _canContextBeReused(CommandLineOptions options) { |
| 265 // TODO(paulberry): add a command-line option that disables context re-use. | 267 // TODO(paulberry): add a command-line option that disables context re-use. |
| 266 if (_context == null) { | 268 if (_context == null) { |
| 267 return false; | 269 return false; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 // Save stats from previous context before clobbering it. | 474 // Save stats from previous context before clobbering it. |
| 473 if (_context != null) { | 475 if (_context != null) { |
| 474 _analyzedFileCount += _context.sources.length; | 476 _analyzedFileCount += _context.sources.length; |
| 475 } | 477 } |
| 476 | 478 |
| 477 // Create a context. | 479 // Create a context. |
| 478 _context = AnalysisEngine.instance.createAnalysisContext(); | 480 _context = AnalysisEngine.instance.createAnalysisContext(); |
| 479 | 481 |
| 480 AnalyzeFunctionBodiesPredicate dietParsingPolicy = | 482 AnalyzeFunctionBodiesPredicate dietParsingPolicy = |
| 481 _chooseDietParsingPolicy(options); | 483 _chooseDietParsingPolicy(options); |
| 482 setAnalysisContextOptions(_context, options, | 484 setAnalysisContextOptions(resourceProvider, _context, options, |
| 483 (AnalysisOptionsImpl contextOptions) { | 485 (AnalysisOptionsImpl contextOptions) { |
| 484 contextOptions.analyzeFunctionBodiesPredicate = dietParsingPolicy; | 486 contextOptions.analyzeFunctionBodiesPredicate = dietParsingPolicy; |
| 485 }); | 487 }); |
| 486 | 488 |
| 487 // Find package info. | 489 // Find package info. |
| 488 _PackageInfo packageInfo = _findPackages(options); | 490 _PackageInfo packageInfo = _findPackages(options); |
| 489 | 491 |
| 490 // Process embedders. | 492 // Process embedders. |
| 491 Map<file_system.Folder, YamlMap> embedderMap = | 493 Map<file_system.Folder, YamlMap> embedderMap = |
| 492 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; | 494 new EmbedderYamlLocator(packageInfo.packageMap).embedderYamls; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 contextOptions.generateImplicitErrors = options.showPackageWarnings; | 650 contextOptions.generateImplicitErrors = options.showPackageWarnings; |
| 649 contextOptions.generateSdkErrors = options.showSdkWarnings; | 651 contextOptions.generateSdkErrors = options.showSdkWarnings; |
| 650 contextOptions.lint = options.lints; | 652 contextOptions.lint = options.lints; |
| 651 contextOptions.strongMode = options.strongMode; | 653 contextOptions.strongMode = options.strongMode; |
| 652 contextOptions.implicitCasts = options.implicitCasts; | 654 contextOptions.implicitCasts = options.implicitCasts; |
| 653 contextOptions.implicitDynamic = options.implicitDynamic; | 655 contextOptions.implicitDynamic = options.implicitDynamic; |
| 654 return contextOptions; | 656 return contextOptions; |
| 655 } | 657 } |
| 656 | 658 |
| 657 static void setAnalysisContextOptions( | 659 static void setAnalysisContextOptions( |
| 660 file_system.ResourceProvider resourceProvider, |
| 658 AnalysisContext context, | 661 AnalysisContext context, |
| 659 CommandLineOptions options, | 662 CommandLineOptions options, |
| 660 void configureContextOptions(AnalysisOptionsImpl contextOptions)) { | 663 void configureContextOptions(AnalysisOptionsImpl contextOptions)) { |
| 661 Map<String, String> definedVariables = options.definedVariables; | 664 Map<String, String> definedVariables = options.definedVariables; |
| 662 if (definedVariables.isNotEmpty) { | 665 if (definedVariables.isNotEmpty) { |
| 663 DeclaredVariables declaredVariables = context.declaredVariables; | 666 DeclaredVariables declaredVariables = context.declaredVariables; |
| 664 definedVariables.forEach((String variableName, String value) { | 667 definedVariables.forEach((String variableName, String value) { |
| 665 declaredVariables.define(variableName, value); | 668 declaredVariables.define(variableName, value); |
| 666 }); | 669 }); |
| 667 } | 670 } |
| 668 | 671 |
| 669 if (options.log) { | 672 if (options.log) { |
| 670 AnalysisEngine.instance.logger = new StdLogger(); | 673 AnalysisEngine.instance.logger = new StdLogger(); |
| 671 } | 674 } |
| 672 | 675 |
| 673 // Prepare context options. | 676 // Prepare context options. |
| 674 AnalysisOptionsImpl contextOptions = | 677 AnalysisOptionsImpl contextOptions = |
| 675 createAnalysisOptionsForCommandLineOptions(options); | 678 createAnalysisOptionsForCommandLineOptions(options); |
| 676 configureContextOptions(contextOptions); | 679 configureContextOptions(contextOptions); |
| 677 | 680 |
| 678 // Set context options. | 681 // Set context options. |
| 679 context.analysisOptions = contextOptions; | 682 context.analysisOptions = contextOptions; |
| 680 | 683 |
| 681 // Process analysis options file (and notify all interested parties). | 684 // Process analysis options file (and notify all interested parties). |
| 682 _processAnalysisOptions(context, options); | 685 _processAnalysisOptions(resourceProvider, context, options); |
| 683 } | 686 } |
| 684 | 687 |
| 685 /// Perform a deep comparison of two string maps. | 688 /// Perform a deep comparison of two string maps. |
| 686 static bool _equalMaps(Map<String, String> m1, Map<String, String> m2) { | 689 static bool _equalMaps(Map<String, String> m1, Map<String, String> m2) { |
| 687 if (m1.length != m2.length) { | 690 if (m1.length != m2.length) { |
| 688 return false; | 691 return false; |
| 689 } | 692 } |
| 690 for (String key in m1.keys) { | 693 for (String key in m1.keys) { |
| 691 if (!m2.containsKey(key) || m1[key] != m2[key]) { | 694 if (!m2.containsKey(key) || m1[key] != m2[key]) { |
| 692 return false; | 695 return false; |
| 693 } | 696 } |
| 694 } | 697 } |
| 695 return true; | 698 return true; |
| 696 } | 699 } |
| 697 | 700 |
| 698 static file_system.File _getOptionsFile(CommandLineOptions options) { | 701 static file_system.File _getOptionsFile( |
| 702 file_system.ResourceProvider resourceProvider, |
| 703 CommandLineOptions options) { |
| 699 file_system.File file; | 704 file_system.File file; |
| 700 String filePath = options.analysisOptionsFile; | 705 String filePath = options.analysisOptionsFile; |
| 701 if (filePath != null) { | 706 if (filePath != null) { |
| 702 file = PhysicalResourceProvider.INSTANCE.getFile(filePath); | 707 file = resourceProvider.getFile(filePath); |
| 703 if (!file.exists) { | 708 if (!file.exists) { |
| 704 printAndFail('Options file not found: $filePath', | 709 printAndFail('Options file not found: $filePath', |
| 705 exitCode: ErrorSeverity.ERROR.ordinal); | 710 exitCode: ErrorSeverity.ERROR.ordinal); |
| 706 } | 711 } |
| 707 } else { | 712 } else { |
| 708 filePath = AnalysisEngine.ANALYSIS_OPTIONS_FILE; | 713 filePath = AnalysisEngine.ANALYSIS_OPTIONS_FILE; |
| 709 file = PhysicalResourceProvider.INSTANCE.getFile(filePath); | 714 file = resourceProvider.getFile(filePath); |
| 710 if (!file.exists) { | 715 if (!file.exists) { |
| 711 filePath = AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE; | 716 filePath = AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE; |
| 712 file = PhysicalResourceProvider.INSTANCE.getFile(filePath); | 717 file = resourceProvider.getFile(filePath); |
| 713 } | 718 } |
| 714 } | 719 } |
| 715 return file; | 720 return file; |
| 716 } | 721 } |
| 717 | 722 |
| 718 /// Convert [sourcePath] into an absolute path. | 723 /// Convert [sourcePath] into an absolute path. |
| 719 static String _normalizeSourcePath(String sourcePath) => | 724 static String _normalizeSourcePath(String sourcePath) => |
| 720 path.normalize(new File(sourcePath).absolute.path); | 725 path.normalize(new File(sourcePath).absolute.path); |
| 721 | 726 |
| 722 static void _processAnalysisOptions( | 727 static void _processAnalysisOptions( |
| 723 AnalysisContext context, CommandLineOptions options) { | 728 file_system.ResourceProvider resourceProvider, |
| 724 file_system.File file = _getOptionsFile(options); | 729 AnalysisContext context, |
| 730 CommandLineOptions options) { |
| 731 file_system.File file = _getOptionsFile(resourceProvider, options); |
| 725 List<OptionsProcessor> optionsProcessors = | 732 List<OptionsProcessor> optionsProcessors = |
| 726 AnalysisEngine.instance.optionsPlugin.optionsProcessors; | 733 AnalysisEngine.instance.optionsPlugin.optionsProcessors; |
| 727 try { | 734 try { |
| 728 AnalysisOptionsProvider analysisOptionsProvider = | 735 AnalysisOptionsProvider analysisOptionsProvider = |
| 729 new AnalysisOptionsProvider(); | 736 new AnalysisOptionsProvider(); |
| 730 Map<String, YamlNode> optionMap = | 737 Map<String, YamlNode> optionMap = |
| 731 analysisOptionsProvider.getOptionsFromFile(file); | 738 analysisOptionsProvider.getOptionsFromFile(file); |
| 732 optionsProcessors.forEach( | 739 optionsProcessors.forEach( |
| 733 (OptionsProcessor p) => p.optionsProcessed(context, optionMap)); | 740 (OptionsProcessor p) => p.optionsProcessed(context, optionMap)); |
| 734 | 741 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 for (var package in packages) { | 839 for (var package in packages) { |
| 833 var packageName = path.basename(package.path); | 840 var packageName = path.basename(package.path); |
| 834 var realPath = package.resolveSymbolicLinksSync(); | 841 var realPath = package.resolveSymbolicLinksSync(); |
| 835 result[packageName] = [ | 842 result[packageName] = [ |
| 836 PhysicalResourceProvider.INSTANCE.getFolder(realPath) | 843 PhysicalResourceProvider.INSTANCE.getFolder(realPath) |
| 837 ]; | 844 ]; |
| 838 } | 845 } |
| 839 return result; | 846 return result; |
| 840 } | 847 } |
| 841 } | 848 } |
| OLD | NEW |