Index: lib/src/transformer/transformer.dart |
diff --git a/lib/src/transformer/transformer.dart b/lib/src/transformer/transformer.dart |
deleted file mode 100644 |
index 08a0c2a7e89c66c31f73daf47afc7fae73a8b18b..0000000000000000000000000000000000000000 |
--- a/lib/src/transformer/transformer.dart |
+++ /dev/null |
@@ -1,134 +0,0 @@ |
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library dev_compiler.src.transformer.transformer; |
- |
-import 'dart:async'; |
-import 'dart:io'; |
- |
-import 'package:barback/barback.dart'; |
-import 'package:analyzer/src/generated/engine.dart' |
- show AnalysisEngine, AnalysisOptionsImpl; |
-import 'package:path/path.dart' as path; |
- |
-import 'asset_universe.dart'; |
-import 'error_listener.dart'; |
-import 'uri_resolver.dart' show assetIdToUri, createSourceFactory; |
-import '../compiler.dart'; |
-import '../options.dart'; |
-import '../utils.dart'; |
-import 'package:analyzer/src/generated/engine.dart'; |
- |
-const String _fakeRuntimeDir = "<runtime>"; |
- |
-/// Disclaimer: this transformer is experimental and not optimized. It may run |
-/// out of memory for large applications: please use DDC's command-line runner |
-/// instead whenever possible. |
-class DdcTransformer extends AggregateTransformer { |
- final List<String> _ddcArgs; |
- |
- DdcTransformer.asPlugin(BarbackSettings settings) |
- : _ddcArgs = settings.configuration['args'] ?? []; |
- |
- @override |
- apply(AggregateTransform transform) async { |
- var inputs = await transform.primaryInputs.toList(); |
- |
- // The analyzer's source factory mechanism is synchronous, so we can't |
- // have it wait upon transform.getInput. Instead, we build the whole |
- // universe (scanning transitive dependencies and reading their sources), |
- // so as to get a non-async source getter. |
- // Note: This means we use a lot of memory: one way to fix it would be to |
- // propagate asynchonous calls throughout the analyzer. |
- var universe = new AssetUniverse(); |
- await Future.wait( |
- inputs.map((a) => universe.scanSources(a.id, transform.getInput))); |
- |
- // TODO(ochafik): invesigate the us of createAnalysisContextWithSources |
- // instead. |
- var context = AnalysisEngine.instance.createAnalysisContext(); |
- context.analysisOptions = _makeAnalysisOptions(); |
- context.sourceFactory = createSourceFactory(universe.getAssetSource); |
- |
- // Virtual file system that writes into the transformer's outputs. |
- var fileSystem = new _TransformerFileSystem( |
- transform.logger, transform.package, transform.addOutput, |
- // Seed the runtime files into our file system: |
- inputs: await _readRuntimeFiles(transform.getInput)); |
- |
- var compiler = new BatchCompiler( |
- context, |
- // Note that the output directory needs not exist, and the runtime |
- // directory is a special value that corresponds to the seeding of |
- // runtimeFiles above. |
- parseOptions([] |
- ..addAll(_ddcArgs) |
- ..addAll([ |
- '-o', |
- fileSystem.outputDir.path, |
- '--runtime-dir', |
- _fakeRuntimeDir |
- ])), |
- reporter: new TransformAnalysisErrorListener(transform.logger, context), |
- fileSystem: fileSystem); |
- |
- for (var asset in inputs) { |
- compiler.compileFromUriString(assetIdToUri(asset.id)); |
- } |
- } |
- |
- // TODO(ochafik): Provide more control over these options. |
- AnalysisOptions _makeAnalysisOptions() => new AnalysisOptionsImpl() |
- ..cacheSize = 256 // # of sources to cache ASTs for. |
- ..preserveComments = true |
- ..analyzeFunctionBodies = true |
- ..strongMode = true; |
- |
- /// Read the runtime files from the transformer (they're available as |
- /// resources of package:dev_compiler), |
- Future<Map<String, String>> _readRuntimeFiles( |
- Future<Asset> getInput(AssetId id)) async { |
- var runtimeFiles = <String, String>{}; |
- for (var file in defaultRuntimeFiles) { |
- var asset = |
- await getInput(new AssetId('dev_compiler', 'lib/runtime/$file')); |
- runtimeFiles[path.join(_fakeRuntimeDir, file)] = |
- await asset.readAsString(); |
- } |
- return runtimeFiles; |
- } |
- |
- /// We just transform all .dart and .html files in one go. |
- @override |
- classifyPrimary(AssetId id) => |
- id.extension == '.dart' || id.extension == '.html' ? '<dart>' : null; |
-} |
- |
-/// Type of [Transform.addOutput] and [AggregateTransform.addOutput]. |
-typedef void AssetOutputAdder(Asset asset); |
- |
-/// Virtual file system that outputs files into a transformer. |
-class _TransformerFileSystem implements FileSystem { |
- final String _package; |
- final Directory outputDir = Directory.current; |
- final String outputPrefix; |
- final AssetOutputAdder _addOutput; |
- final Map<String, String> inputs; |
- final TransformLogger _logger; |
- _TransformerFileSystem(this._logger, this._package, this._addOutput, |
- {this.inputs, this.outputPrefix: 'web/'}); |
- |
- @override |
- void writeAsStringSync(String file, String contents) { |
- var id = new AssetId( |
- _package, outputPrefix + path.relative(file, from: outputDir.path)); |
- _logger.fine('Adding output $id'); |
- _addOutput(new Asset.fromString(id, contents)); |
- } |
- |
- @override |
- void copySync(String src, String dest) { |
- writeAsStringSync(dest, inputs[src] ?? new File(src).readAsStringSync()); |
- } |
-} |