Chromium Code Reviews| Index: pkg/compiler/lib/src/source_file_provider.dart |
| diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart |
| index b0c71a4c626c1503a9a1fb294ef37ed6811fd332..14a5d0b0754ff0e2e491f5f4eaf62ea3936916d4 100644 |
| --- a/pkg/compiler/lib/src/source_file_provider.dart |
| +++ b/pkg/compiler/lib/src/source_file_provider.dart |
| @@ -257,44 +257,55 @@ class RandomAccessFileOutputProvider implements CompilerOutput { |
| } |
| } |
| - EventSink<String> call(String name, String extension) { |
| - return createEventSink(name, extension); |
| - } |
| - |
| - Uri createUri(String name, String extension) { |
| + Uri createUri(String name, String extension, OutputType type) { |
| Uri uri; |
| - if (extension == "deferred_map") { |
| - uri = out.resolve(name); |
| - } else if (name == '') { |
| - if (extension == 'js' || extension == 'dart') { |
| - uri = out; |
| - } else if (extension == 'precompiled.js') { |
| - uri = computePrecompiledUri(out); |
| - onInfo("File ($uri) is compatible with header" |
| - " \"Content-Security-Policy: script-src 'self'\""); |
| - } else if (extension == 'js.map' || extension == 'dart.map') { |
| - uri = sourceMapOut; |
| - } else if (extension == 'info.json') { |
| - String outName = out.path.substring(out.path.lastIndexOf('/') + 1); |
| - uri = out.resolve('$outName.$extension'); |
| - } else if (extension == 'data') { |
| + // TODO(johnniwinther): Unify handle of [name] and [extension] to prepare |
| + // for using a single, possibly relative, [uri] as input. |
| + switch (type) { |
| + case OutputType.js: |
| + if (name == '') { |
|
Siggi Cherem (dart-lang)
2017/02/14 23:14:17
any reason not to handle the name != '' case separ
Johnni Winther
2017/02/20 09:18:11
Because we shouldn't really be putting semantics h
|
| + uri = out; |
| + } else { |
| + uri = out.resolve('$name.$extension'); |
| + } |
| + break; |
| + case OutputType.js_map: |
| + if (name == '') { |
| + uri = sourceMapOut; |
| + } else { |
| + uri = out.resolve('$name.$extension'); |
| + } |
| + break; |
| + case OutputType.part: |
| + uri = out.resolve('$name.$extension'); |
| + break; |
| + case OutputType.serialization_data: |
| if (resolutionOutput == null) { |
| onFailure('Serialization target unspecified.'); |
| } |
| uri = resolutionOutput; |
| - } else { |
| - onFailure('Unknown extension: $extension'); |
| - } |
| - } else { |
| - uri = out.resolve('$name.$extension'); |
| + break; |
| + case OutputType.info: |
| + if (name == '') { |
| + name = out.pathSegments.last; |
| + } |
| + if (extension == '') { |
| + uri = out.resolve(name); |
| + } else { |
| + uri = out.resolve('$name.$extension'); |
| + } |
| + break; |
| + case OutputType.debug: |
| + uri = out.resolve('$name.$extension'); |
| + break; |
| + default: |
| + onFailure('Unknown output type: $type'); |
| } |
| return uri; |
| } |
| - EventSink<String> createEventSink(String name, String extension) { |
| - // TODO (johnniwinther, sigurdm): Make a better interface for |
| - // output-providers. |
| - Uri uri = createUri(name, extension); |
| + OutputSink createOutputSink(String name, String extension, OutputType type) { |
| + Uri uri = createUri(name, extension, type); |
| bool isPrimaryOutput = uri == out; |
| if (uri.scheme != 'file') { |
| @@ -332,19 +343,17 @@ class RandomAccessFileOutputProvider implements CompilerOutput { |
| } |
| } |
| - return new _EventSinkWrapper(writeStringSync, onDone); |
| + return new _OutputSinkWrapper(writeStringSync, onDone); |
| } |
| } |
| -class _EventSinkWrapper extends EventSink<String> { |
| +class _OutputSinkWrapper extends OutputSink { |
| var onAdd, onClose; |
| - _EventSinkWrapper(this.onAdd, this.onClose); |
| + _OutputSinkWrapper(this.onAdd, this.onClose); |
| void add(String data) => onAdd(data); |
| - void addError(error, [StackTrace stackTrace]) => throw error; |
| - |
| void close() => onClose(); |
| } |