OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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:io'; | 5 import 'dart:io'; |
6 import 'package:analyzer/src/command_line/arguments.dart' | 6 import 'package:analyzer/src/command_line/arguments.dart' |
7 show | 7 show |
8 defineAnalysisArguments, | 8 defineAnalysisArguments, |
9 filterUnknownArguments, | 9 filterUnknownArguments, |
10 ignoreUnrecognizedFlagsFlag; | 10 ignoreUnrecognizedFlagsFlag; |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 _usageException('Output file $firstOutPath must be within the module ' | 173 _usageException('Output file $firstOutPath must be within the module ' |
174 'root directory $moduleRoot'); | 174 'root directory $moduleRoot'); |
175 } | 175 } |
176 modulePath = | 176 modulePath = |
177 path.withoutExtension(path.relative(firstOutPath, from: moduleRoot)); | 177 path.withoutExtension(path.relative(firstOutPath, from: moduleRoot)); |
178 } else { | 178 } else { |
179 moduleRoot = path.dirname(firstOutPath); | 179 moduleRoot = path.dirname(firstOutPath); |
180 modulePath = path.basenameWithoutExtension(firstOutPath); | 180 modulePath = path.basenameWithoutExtension(firstOutPath); |
181 } | 181 } |
182 | 182 |
183 var unit = new BuildUnit(modulePath, libraryRoot, argResults.rest, | 183 var unit = new BuildUnit( |
184 (source) => _moduleForLibrary(moduleRoot, source, compilerOpts)); | 184 modulePath, |
| 185 libraryRoot, |
| 186 argResults.rest, |
| 187 (source) => |
| 188 _moduleForLibrary(moduleRoot, source, analyzerOptions, compilerOpts)); |
185 | 189 |
186 var module = compiler.compile(unit, compilerOpts); | 190 var module = compiler.compile(unit, compilerOpts); |
187 module.errors.forEach(printFn); | 191 module.errors.forEach(printFn); |
188 | 192 |
189 if (!module.isValid) { | 193 if (!module.isValid) { |
190 throw compilerOpts.unsafeForceCompile | 194 throw compilerOpts.unsafeForceCompile |
191 ? new ForceCompileErrorException() | 195 ? new ForceCompileErrorException() |
192 : new CompileErrorException(); | 196 : new CompileErrorException(); |
193 } | 197 } |
194 | 198 |
(...skipping 15 matching lines...) Expand all Loading... |
210 var file = new File(summaryPath); | 214 var file = new File(summaryPath); |
211 if (!file.existsSync() || | 215 if (!file.existsSync() || |
212 _changed(file.readAsBytesSync(), module.summaryBytes)) { | 216 _changed(file.readAsBytesSync(), module.summaryBytes)) { |
213 if (!file.parent.existsSync()) file.parent.createSync(recursive: true); | 217 if (!file.parent.existsSync()) file.parent.createSync(recursive: true); |
214 file.writeAsBytesSync(module.summaryBytes); | 218 file.writeAsBytesSync(module.summaryBytes); |
215 } | 219 } |
216 } | 220 } |
217 } | 221 } |
218 } | 222 } |
219 | 223 |
220 String _moduleForLibrary( | 224 String _moduleForLibrary(String moduleRoot, Source source, |
221 String moduleRoot, Source source, CompilerOptions compilerOpts) { | 225 AnalyzerOptions analyzerOptions, CompilerOptions compilerOpts) { |
222 if (source is InSummarySource) { | 226 if (source is InSummarySource) { |
223 var summaryPath = source.summaryPath; | 227 var summaryPath = source.summaryPath; |
| 228 |
| 229 if (analyzerOptions.customSummaryModules.containsKey(summaryPath)) { |
| 230 return analyzerOptions.customSummaryModules[summaryPath]; |
| 231 } |
| 232 |
224 var ext = '.${compilerOpts.summaryExtension}'; | 233 var ext = '.${compilerOpts.summaryExtension}'; |
225 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) { | 234 if (path.isWithin(moduleRoot, summaryPath) && summaryPath.endsWith(ext)) { |
226 var buildUnitPath = | 235 var buildUnitPath = |
227 summaryPath.substring(0, summaryPath.length - ext.length); | 236 summaryPath.substring(0, summaryPath.length - ext.length); |
228 return path.url | 237 return path.url |
229 .joinAll(path.split(path.relative(buildUnitPath, from: moduleRoot))); | 238 .joinAll(path.split(path.relative(buildUnitPath, from: moduleRoot))); |
230 } | 239 } |
231 | 240 |
232 _usageException('Imported file ${source.uri} is not within the module root ' | 241 _usageException('Imported file ${source.uri} is not within the module root ' |
233 'directory $moduleRoot'); | 242 'directory $moduleRoot'); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 /// Thrown when the input source code has errors. | 274 /// Thrown when the input source code has errors. |
266 class CompileErrorException implements Exception { | 275 class CompileErrorException implements Exception { |
267 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; | 276 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; |
268 } | 277 } |
269 | 278 |
270 /// Thrown when force compilation failed (probably due to static errors). | 279 /// Thrown when force compilation failed (probably due to static errors). |
271 class ForceCompileErrorException extends CompileErrorException { | 280 class ForceCompileErrorException extends CompileErrorException { |
272 toString() => | 281 toString() => |
273 '\nForce-compilation not successful. Please check static errors.'; | 282 '\nForce-compilation not successful. Please check static errors.'; |
274 } | 283 } |
OLD | NEW |