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

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

Issue 2710313002: rework analyzer_cli to use ContextBuilder getAnalysisOptions (Closed)
Patch Set: Created 3 years, 9 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 | « pkg/analyzer_cli/lib/src/build_mode.dart ('k') | pkg/analyzer_cli/test/all.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' as io; 9 import 'dart:io' as io;
10 10
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 554
555 if (!useSummaries && options.buildSummaryInputs.isNotEmpty) { 555 if (!useSummaries && options.buildSummaryInputs.isNotEmpty) {
556 throw new _DriverError( 556 throw new _DriverError(
557 'Summaries are not yet supported when using Flutter.'); 557 'Summaries are not yet supported when using Flutter.');
558 } 558 }
559 559
560 // Read any input summaries. 560 // Read any input summaries.
561 SummaryDataStore summaryDataStore = new SummaryDataStore( 561 SummaryDataStore summaryDataStore = new SummaryDataStore(
562 useSummaries ? options.buildSummaryInputs : <String>[]); 562 useSummaries ? options.buildSummaryInputs : <String>[]);
563 563
564 // Create a temporary source factory without an SDK resolver
565 // for resolving "include:" directives in analysis options files.
566 SourceFactory tempSourceFactory = _chooseUriResolutionPolicy(
567 options, embedderMap, packageInfo, summaryDataStore, false, null);
568
569 AnalysisOptionsImpl analysisOptions = 564 AnalysisOptionsImpl analysisOptions =
570 createAnalysisOptions(resourceProvider, tempSourceFactory, options); 565 createAnalysisOptionsForCommandLineOptions(resourceProvider, options);
571 analysisOptions.analyzeFunctionBodiesPredicate = 566 analysisOptions.analyzeFunctionBodiesPredicate =
572 _chooseDietParsingPolicy(options); 567 _chooseDietParsingPolicy(options);
573 568
574 // Once options and embedders are processed, setup the SDK. 569 // Once options and embedders are processed, setup the SDK.
575 _setupSdk(options, useSummaries, analysisOptions); 570 _setupSdk(options, useSummaries, analysisOptions);
576 571
577 PackageBundle sdkBundle = sdk.getLinkedBundle(); 572 PackageBundle sdkBundle = sdk.getLinkedBundle();
578 if (sdkBundle != null) { 573 if (sdkBundle != null) {
579 summaryDataStore.addBundle(null, sdkBundle); 574 summaryDataStore.addBundle(null, sdkBundle);
580 } 575 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 sourcePath = path.absolute(sourcePath); 728 sourcePath = path.absolute(sourcePath);
734 sourcePath = path.normalize(sourcePath); 729 sourcePath = path.normalize(sourcePath);
735 return !path.isWithin(dartSdkPath, sourcePath); 730 return !path.isWithin(dartSdkPath, sourcePath);
736 }); 731 });
737 dartSdk.analysisOptions = analysisOptions; 732 dartSdk.analysisOptions = analysisOptions;
738 sdk = dartSdk; 733 sdk = dartSdk;
739 } 734 }
740 } 735 }
741 } 736 }
742 737
743 static AnalysisOptionsImpl createAnalysisOptions( 738 static AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
744 file_system.ResourceProvider resourceProvider, 739 ResourceProvider resourceProvider, CommandLineOptions options) {
745 SourceFactory sourceFactory, 740 if (options.analysisOptionsFile != null) {
746 CommandLineOptions options) { 741 file_system.File file =
747 // Prepare context options. 742 resourceProvider.getFile(options.analysisOptionsFile);
748 AnalysisOptionsImpl analysisOptions = 743 if (!file.exists) {
749 createAnalysisOptionsForCommandLineOptions(options); 744 printAndFail('Options file not found: ${options.analysisOptionsFile}',
745 exitCode: ErrorSeverity.ERROR.ordinal);
746 }
747 }
750 748
751 // Process analysis options file (and notify all interested parties). 749 AnalysisOptionsImpl contextOptions = new ContextBuilder(
752 _processAnalysisOptions( 750 resourceProvider, null, null,
753 resourceProvider, sourceFactory, analysisOptions, options); 751 options: options.contextBuilderOptions)
Brian Wilkerson 2017/02/23 21:29:23 Might be good to create a ContextBuilder in one pl
danrubel 2017/02/23 21:51:20 Good point. I'll do that when we start using Conte
754 return analysisOptions; 752 .getAnalysisOptions(options.sourceFiles.isNotEmpty
755 } 753 ? options.sourceFiles[0]
754 : path.current);
756 755
757 static AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
758 CommandLineOptions options) {
759 AnalysisOptionsImpl contextOptions = new AnalysisOptionsImpl();
760 contextOptions.trackCacheDependencies = false; 756 contextOptions.trackCacheDependencies = false;
761 contextOptions.disableCacheFlushing = options.disableCacheFlushing; 757 contextOptions.disableCacheFlushing = options.disableCacheFlushing;
762 contextOptions.hint = !options.disableHints; 758 contextOptions.hint = !options.disableHints;
763 contextOptions.enableStrictCallChecks = options.enableStrictCallChecks;
764 contextOptions.enableSuperMixins = options.enableSuperMixins;
765 contextOptions.generateImplicitErrors = options.showPackageWarnings; 759 contextOptions.generateImplicitErrors = options.showPackageWarnings;
766 contextOptions.generateSdkErrors = options.showSdkWarnings; 760 contextOptions.generateSdkErrors = options.showSdkWarnings;
767 contextOptions.lint = options.lints; 761
768 contextOptions.strongMode = options.strongMode; 762 // The following options are updated as appropriate by the
769 contextOptions.implicitCasts = options.implicitCasts; 763 // ContextBuilder getAnalysisOptions(...)
770 contextOptions.implicitDynamic = options.implicitDynamic; 764 //contextOptions.enableStrictCallChecks = options.enableStrictCallChecks;
765 //contextOptions.enableSuperMixins = options.enableSuperMixins;
766 //contextOptions.strongMode = options.strongMode;
767 //contextOptions.implicitCasts = options.implicitCasts;
768 //contextOptions.implicitDynamic = options.implicitDynamic;
Brian Wilkerson 2017/02/23 21:29:22 Did you intend to remove these?
danrubel 2017/02/23 21:51:20 Yeah. Forgot to do so. Now removed.
769
771 return contextOptions; 770 return contextOptions;
772 } 771 }
773 772
774 static void setAnalysisContextOptions( 773 static void setAnalysisContextOptions(
775 file_system.ResourceProvider resourceProvider, 774 file_system.ResourceProvider resourceProvider,
776 SourceFactory sourceFactory,
777 AnalysisContext context, 775 AnalysisContext context,
778 CommandLineOptions options, 776 CommandLineOptions options,
779 void configureContextOptions(AnalysisOptionsImpl contextOptions)) { 777 void configureContextOptions(AnalysisOptionsImpl contextOptions)) {
780 AnalysisOptionsImpl analysisOptions = 778 AnalysisOptionsImpl analysisOptions =
781 createAnalysisOptions(resourceProvider, sourceFactory, options); 779 createAnalysisOptionsForCommandLineOptions(resourceProvider, options);
782 configureContextOptions(analysisOptions); 780 configureContextOptions(analysisOptions);
783 setupAnalysisContext(context, options, analysisOptions); 781 setupAnalysisContext(context, options, analysisOptions);
784 } 782 }
785 783
786 static void setupAnalysisContext(AnalysisContext context, 784 static void setupAnalysisContext(AnalysisContext context,
787 CommandLineOptions options, AnalysisOptionsImpl analysisOptions) { 785 CommandLineOptions options, AnalysisOptionsImpl analysisOptions) {
788 Map<String, String> definedVariables = options.definedVariables; 786 Map<String, String> definedVariables = options.definedVariables;
789 if (definedVariables.isNotEmpty) { 787 if (definedVariables.isNotEmpty) {
790 DeclaredVariables declaredVariables = context.declaredVariables; 788 DeclaredVariables declaredVariables = context.declaredVariables;
791 definedVariables.forEach((String variableName, String value) { 789 definedVariables.forEach((String variableName, String value) {
(...skipping 28 matching lines...) Expand all
820 return false; 818 return false;
821 } 819 }
822 for (String key in m1.keys) { 820 for (String key in m1.keys) {
823 if (!m2.containsKey(key) || m1[key] != m2[key]) { 821 if (!m2.containsKey(key) || m1[key] != m2[key]) {
824 return false; 822 return false;
825 } 823 }
826 } 824 }
827 return true; 825 return true;
828 } 826 }
829 827
830 static file_system.File _getOptionsFile(
831 file_system.ResourceProvider resourceProvider,
832 CommandLineOptions options) {
833 file_system.File file;
834 String filePath = options.analysisOptionsFile;
835 if (filePath != null) {
836 file = resourceProvider.getFile(filePath);
837 if (!file.exists) {
838 printAndFail('Options file not found: $filePath',
839 exitCode: ErrorSeverity.ERROR.ordinal);
840 }
841 } else {
842 filePath = AnalysisEngine.ANALYSIS_OPTIONS_FILE;
843 file = resourceProvider.getFile(filePath);
844 if (!file.exists) {
845 filePath = AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
846 file = resourceProvider.getFile(filePath);
847 }
848 }
849 return file;
850 }
851
852 /// Convert [sourcePath] into an absolute path. 828 /// Convert [sourcePath] into an absolute path.
853 static String _normalizeSourcePath(String sourcePath) => 829 static String _normalizeSourcePath(String sourcePath) =>
854 path.normalize(new io.File(sourcePath).absolute.path); 830 path.normalize(new io.File(sourcePath).absolute.path);
855
856 static void _processAnalysisOptions(
857 file_system.ResourceProvider resourceProvider,
858 SourceFactory sourceFactory,
859 AnalysisOptionsImpl analysisOptions,
860 CommandLineOptions options) {
861 file_system.File file = _getOptionsFile(resourceProvider, options);
862
863 AnalysisOptionsProvider analysisOptionsProvider =
864 new AnalysisOptionsProvider(sourceFactory);
865 Map<String, YamlNode> optionMap =
866 analysisOptionsProvider.getOptionsFromFile(file);
867
868 // Fill in lint rule defaults in case lints are enabled and rules are
869 // not specified in an options file.
870 if (options.lints && !containsLintRuleEntry(optionMap)) {
871 analysisOptions.lintRules = Registry.ruleRegistry.defaultRules;
872 }
873
874 // Ask engine to further process options.
875 if (optionMap != null) {
876 applyToAnalysisOptions(analysisOptions, optionMap);
877 }
878 }
879 } 831 }
880 832
881 /// Provides a framework to read command line options from stdin and feed them 833 /// Provides a framework to read command line options from stdin and feed them
882 /// to a callback. 834 /// to a callback.
883 class _BatchRunner { 835 class _BatchRunner {
884 /// Run the tool in 'batch' mode, receiving command lines through stdin and 836 /// Run the tool in 'batch' mode, receiving command lines through stdin and
885 /// returning pass/fail status through stdout. This feature is intended for 837 /// returning pass/fail status through stdout. This feature is intended for
886 /// use in unit testing. 838 /// use in unit testing.
887 static void runAsBatch(List<String> sharedArgs, _BatchRunnerHandler handler) { 839 static void runAsBatch(List<String> sharedArgs, _BatchRunnerHandler handler) {
888 outSink.writeln('>>> BATCH START'); 840 outSink.writeln('>>> BATCH START');
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 for (var package in packages) { 914 for (var package in packages) {
963 var packageName = path.basename(package.path); 915 var packageName = path.basename(package.path);
964 var realPath = package.resolveSymbolicLinksSync(); 916 var realPath = package.resolveSymbolicLinksSync();
965 result[packageName] = [ 917 result[packageName] = [
966 PhysicalResourceProvider.INSTANCE.getFolder(realPath) 918 PhysicalResourceProvider.INSTANCE.getFolder(realPath)
967 ]; 919 ];
968 } 920 }
969 return result; 921 return result;
970 } 922 }
971 } 923 }
OLDNEW
« no previous file with comments | « pkg/analyzer_cli/lib/src/build_mode.dart ('k') | pkg/analyzer_cli/test/all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698