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 | 2 |
3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 import 'package:args/args.dart' show ArgParser, ArgResults; | 6 import 'package:args/args.dart' show ArgParser, ArgResults; |
7 import 'package:analyzer/src/generated/engine.dart' | 7 import 'package:analyzer/src/generated/engine.dart' |
8 show AnalysisContext, AnalysisEngine, AnalysisOptionsImpl; | 8 show AnalysisContext, AnalysisEngine, AnalysisOptionsImpl; |
9 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; | 9 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; |
10 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; | 10 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; |
11 import 'package:analyzer/src/generated/source_io.dart' | 11 import 'package:analyzer/src/generated/source_io.dart' |
12 show | 12 show |
13 CustomUriResolver, | 13 CustomUriResolver, |
14 DartUriResolver, | 14 DartUriResolver, |
15 FileUriResolver, | 15 FileUriResolver, |
16 PackageUriResolver, | 16 PackageUriResolver, |
17 SourceFactory, | 17 SourceFactory, |
18 UriResolver; | 18 UriResolver; |
19 import 'package:analyzer/src/summary/package_bundle_reader.dart' | 19 import 'package:analyzer/src/summary/package_bundle_reader.dart' |
20 show | 20 show |
21 InSummaryPackageUriResolver, | 21 InSummaryPackageUriResolver, |
22 InputPackagesResultProvider, | 22 InputPackagesResultProvider, |
23 SummaryDataStore; | 23 SummaryDataStore; |
| 24 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk; |
24 import 'package:cli_util/cli_util.dart' show getSdkDir; | 25 import 'package:cli_util/cli_util.dart' show getSdkDir; |
25 import 'package:path/path.dart' as path; | 26 import 'package:path/path.dart' as path; |
26 | 27 |
27 import 'dart_sdk.dart' show MockDartSdk, mockSdkSources; | 28 import 'dart_sdk.dart' show MockDartSdk, mockSdkSources; |
28 import 'multi_package_resolver.dart' show MultiPackageResolver; | 29 import 'multi_package_resolver.dart' show MultiPackageResolver; |
29 | 30 |
30 /// Options used to set up Source URI resolution in the analysis context. | 31 /// Options used to set up Source URI resolution in the analysis context. |
31 class AnalyzerOptions { | 32 class AnalyzerOptions { |
32 /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" | 33 /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" |
33 final Map<String, String> customUrlMappings; | 34 final Map<String, String> customUrlMappings; |
34 | 35 |
35 /// Package root when resolving 'package:' urls the standard way. | 36 /// Package root when resolving 'package:' urls the standard way. |
36 final String packageRoot; | 37 final String packageRoot; |
37 | 38 |
38 /// List of summary file paths. | 39 /// List of summary file paths. |
39 final List<String> summaryPaths; | 40 final List<String> summaryPaths; |
40 | 41 |
41 /// List of paths used for the multi-package resolver. | 42 /// List of paths used for the multi-package resolver. |
42 final List<String> packagePaths; | 43 final List<String> packagePaths; |
43 | 44 |
44 /// Whether to use a mock-sdk during compilation. | 45 /// Whether to use a mock-sdk during compilation. |
45 final bool useMockSdk; | 46 final bool useMockSdk; |
46 | 47 |
47 /// Path to the dart-sdk. Null if `useMockSdk` is true or if the path couldn't | 48 /// Path to the dart-sdk. Null if `useMockSdk` is true or if the path couldn't |
48 /// be determined | 49 /// be determined |
49 final String dartSdkPath; | 50 final String dartSdkPath; |
50 | 51 |
| 52 /// Path to the dart-sdk summary. If this is set, it will be used in favor |
| 53 /// of the unsummarized one. |
| 54 final String dartSdkSummaryPath; |
| 55 |
51 AnalyzerOptions( | 56 AnalyzerOptions( |
52 {this.summaryPaths: const [], | 57 {this.summaryPaths: const [], |
53 this.useMockSdk: false, | 58 this.useMockSdk: false, |
54 String dartSdkPath, | 59 String dartSdkPath, |
| 60 this.dartSdkSummaryPath, |
55 this.customUrlMappings: const {}, | 61 this.customUrlMappings: const {}, |
56 this.packageRoot: 'packages/', | 62 this.packageRoot: 'packages/', |
57 this.packagePaths: const []}) | 63 this.packagePaths: const []}) |
58 : dartSdkPath = dartSdkPath ?? getSdkDir().path; | 64 : dartSdkPath = dartSdkPath ?? getSdkDir().path; |
59 | 65 |
60 AnalyzerOptions.fromArguments(ArgResults args) | 66 AnalyzerOptions.fromArguments(ArgResults args) |
61 : summaryPaths = args['summary'], | 67 : summaryPaths = args['summary'], |
62 useMockSdk = false, | 68 useMockSdk = false, |
63 dartSdkPath = args['dart-sdk'] ?? getSdkDir().path, | 69 dartSdkPath = args['dart-sdk'] ?? getSdkDir().path, |
| 70 dartSdkSummaryPath = args['dart-sdk-summary'], |
64 customUrlMappings = _parseUrlMappings(args['url-mapping']), | 71 customUrlMappings = _parseUrlMappings(args['url-mapping']), |
65 packageRoot = args['package-root'], | 72 packageRoot = args['package-root'], |
66 packagePaths = args['package-paths']?.split(',') ?? []; | 73 packagePaths = args['package-paths']?.split(',') ?? []; |
67 | 74 |
68 /// Whether to resolve 'package:' uris using the multi-package resolver. | 75 /// Whether to resolve 'package:' uris using the multi-package resolver. |
69 bool get useMultiPackage => packagePaths.isNotEmpty; | 76 bool get useMultiPackage => packagePaths.isNotEmpty; |
70 | 77 |
71 static ArgParser addArguments(ArgParser parser) { | 78 static ArgParser addArguments(ArgParser parser) { |
72 return parser | 79 return parser |
73 ..addOption('summary', | 80 ..addOption('summary', |
74 abbr: 's', help: 'summary file(s) to include', allowMultiple: true) | 81 abbr: 's', help: 'summary file(s) to include', allowMultiple: true) |
75 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null) | 82 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null) |
| 83 ..addOption('dart-sdk-summary', |
| 84 help: 'Dart SDK Summary Path', defaultsTo: null) |
76 ..addOption('package-root', | 85 ..addOption('package-root', |
77 abbr: 'p', | 86 abbr: 'p', |
78 help: 'Package root to resolve "package:" imports', | 87 help: 'Package root to resolve "package:" imports', |
79 defaultsTo: 'packages/') | 88 defaultsTo: 'packages/') |
80 ..addOption('url-mapping', | 89 ..addOption('url-mapping', |
81 help: '--url-mapping=libraryUri,/path/to/library.dart uses \n' | 90 help: '--url-mapping=libraryUri,/path/to/library.dart uses \n' |
82 'library.dart as the source for an import of of "libraryUri".', | 91 'library.dart as the source for an import of of "libraryUri".', |
83 allowMultiple: true, | 92 allowMultiple: true, |
84 splitCommas: false) | 93 splitCommas: false) |
85 ..addOption('package-paths', | 94 ..addOption('package-paths', |
(...skipping 13 matching lines...) Expand all Loading... |
99 } | 108 } |
100 | 109 |
101 /// Creates an [AnalysisContext] with dev_compiler type rules and inference, | 110 /// Creates an [AnalysisContext] with dev_compiler type rules and inference, |
102 /// using [createSourceFactory] to set up its [SourceFactory]. | 111 /// using [createSourceFactory] to set up its [SourceFactory]. |
103 AnalysisContext createAnalysisContextWithSources(AnalyzerOptions options, | 112 AnalysisContext createAnalysisContextWithSources(AnalyzerOptions options, |
104 {DartUriResolver sdkResolver, List<UriResolver> fileResolvers}) { | 113 {DartUriResolver sdkResolver, List<UriResolver> fileResolvers}) { |
105 AnalysisEngine.instance.processRequiredPlugins(); | 114 AnalysisEngine.instance.processRequiredPlugins(); |
106 | 115 |
107 sdkResolver ??= options.useMockSdk | 116 sdkResolver ??= options.useMockSdk |
108 ? createMockSdkResolver(mockSdkSources) | 117 ? createMockSdkResolver(mockSdkSources) |
109 : createSdkPathResolver(options.dartSdkPath); | 118 : createSdkPathResolver(options.dartSdkSummaryPath, options.dartSdkPath); |
110 | 119 |
111 // Read the summaries. | 120 // Read the summaries. |
112 SummaryDataStore summaryData; | 121 SummaryDataStore summaryData; |
113 if (options.summaryPaths.isNotEmpty) { | 122 if (options.summaryPaths.isNotEmpty) { |
114 summaryData = new SummaryDataStore(options.summaryPaths); | 123 summaryData = new SummaryDataStore(options.summaryPaths); |
115 } | 124 } |
116 | 125 |
117 var srcFactory = _createSourceFactory(options, | 126 var srcFactory = _createSourceFactory(options, |
118 sdkResolver: sdkResolver, | 127 sdkResolver: sdkResolver, |
119 fileResolvers: fileResolvers, | 128 fileResolvers: fileResolvers, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 options.useMultiPackage | 176 options.useMultiPackage |
168 ? new MultiPackageResolver(options.packagePaths) | 177 ? new MultiPackageResolver(options.packagePaths) |
169 : new PackageUriResolver([new JavaFile(options.packageRoot)]) | 178 : new PackageUriResolver([new JavaFile(options.packageRoot)]) |
170 ]; | 179 ]; |
171 } | 180 } |
172 | 181 |
173 /// Creates a [DartUriResolver] that uses a mock 'dart:' library contents. | 182 /// Creates a [DartUriResolver] that uses a mock 'dart:' library contents. |
174 DartUriResolver createMockSdkResolver(Map<String, String> mockSources) => | 183 DartUriResolver createMockSdkResolver(Map<String, String> mockSources) => |
175 new MockDartSdk(mockSources, reportMissing: true).resolver; | 184 new MockDartSdk(mockSources, reportMissing: true).resolver; |
176 | 185 |
177 /// Creates a [DartUriResolver] that uses the SDK at the given [sdkPath]. | 186 DirectoryBasedDartSdk _createDirectoryBasedDartSdk(String sdkPath) { |
178 DartUriResolver createSdkPathResolver(String sdkPath) { | |
179 var sdk = new DirectoryBasedDartSdk( | 187 var sdk = new DirectoryBasedDartSdk( |
180 new JavaFile(sdkPath), /*useDart2jsPaths:*/ true); | 188 new JavaFile(sdkPath), /*useDart2jsPaths:*/ true); |
181 sdk.useSummary = true; | 189 sdk.useSummary = true; |
182 sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = true; | 190 sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = true; |
| 191 return sdk; |
| 192 } |
| 193 |
| 194 /// Creates a [DartUriResolver] that uses the SDK at the given [sdkPath]. |
| 195 DartUriResolver createSdkPathResolver(String sdkSummaryPath, String sdkPath) { |
| 196 var sdk = (sdkSummaryPath != null) |
| 197 ? new SummaryBasedDartSdk(sdkSummaryPath, true) |
| 198 : _createDirectoryBasedDartSdk(sdkPath); |
183 return new DartUriResolver(sdk); | 199 return new DartUriResolver(sdk); |
184 } | 200 } |
OLD | NEW |