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

Unified Diff: packages/initialize/lib/transformer.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/initialize/lib/src/mirror_loader.dart ('k') | packages/initialize/pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/initialize/lib/transformer.dart
diff --git a/packages/initialize/lib/transformer.dart b/packages/initialize/lib/transformer.dart
index a1f01fa1650f4fe972dc854e516447cafb442f8d..34acd4ace11f7dd9b564c7ea7b7e835ab054df31 100644
--- a/packages/initialize/lib/transformer.dart
+++ b/packages/initialize/lib/transformer.dart
@@ -5,8 +5,9 @@ library initialize.transformer;
import 'dart:async';
import 'dart:collection' show Queue;
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
import 'package:barback/barback.dart';
import 'package:code_transformers/assets.dart';
import 'package:code_transformers/resolver.dart';
@@ -24,15 +25,17 @@ export 'build/initializer_plugin.dart';
/// a new file that bootstraps your application.
Asset generateBootstrapFile(Resolver resolver, Transform transform,
AssetId primaryAssetId, AssetId newEntryPointId,
- {bool errorIfNotFound: true, List<InitializerPlugin> plugins,
+ {bool errorIfNotFound: true,
+ List<InitializerPlugin> plugins,
bool appendDefaultPlugin: true}) {
if (appendDefaultPlugin) {
if (plugins == null) plugins = [];
plugins.add(const DefaultInitializerPlugin());
}
return new _BootstrapFileBuilder(
- resolver, transform, primaryAssetId, newEntryPointId, errorIfNotFound,
- plugins: plugins).run();
+ resolver, transform, primaryAssetId, newEntryPointId, errorIfNotFound,
+ plugins: plugins)
+ .run();
}
/// Transformer which removes the mirror-based initialization logic and replaces
@@ -98,18 +101,19 @@ class InitializeTransformer extends Transformer {
});
});
}
+
// Finds the first (and only) dart script on an html page and returns the
// [AssetId] that points to it
AssetId _findMainScript(
dom.Document document, AssetId entryPoint, Transform transform) {
- var scripts = document.querySelectorAll('script[type="application/dart"]');
+ var scripts = _getScripts(document);
if (scripts.length != 1) {
transform.logger.error('Expected exactly one dart script in $entryPoint '
'but found ${scripts.length}.');
return null;
}
- var src = scripts[0].attributes['src'];
+ var src = _getScriptAttribute(scripts[0]);
if (src == null) {
// TODO(jakemac): Support inline scripts,
transform.logger.error('Inline scripts are not supported at this time, '
@@ -125,26 +129,51 @@ class InitializeTransformer extends Transformer {
// [entryPoint].
void _replaceEntryWithBootstrap(Transform transform, dom.Document document,
AssetId entryPoint, AssetId originalDartFile, AssetId newDartFile) {
- var found = false;
-
- var scripts = document
- .querySelectorAll('script[type="application/dart"]')
+ var scripts = _getScripts(document)
.where((script) {
- var assetId = uriToAssetId(entryPoint, script.attributes['src'],
+ var assetId = uriToAssetId(entryPoint, _getScriptAttribute(script),
transform.logger, script.sourceSpan);
return assetId == originalDartFile;
}).toList();
if (scripts.length != 1) {
- transform.logger.error(
- 'Expected exactly one script pointing to $originalDartFile in '
- '$entryPoint, but found ${scripts.length}.');
+ transform.logger
+ .error('Expected exactly one script pointing to $originalDartFile in '
+ '$entryPoint, but found ${scripts.length}.');
return;
}
- scripts[0].attributes['src'] = path.url.relative(newDartFile.path,
- from: path.dirname(entryPoint.path));
+ _setScriptAttribute(
+ scripts[0],
+ path.url
+ .relative(newDartFile.path, from: path.dirname(entryPoint.path)));
transform.addOutput(new Asset.fromString(entryPoint, document.outerHtml));
}
+
+ String _getScriptAttribute(dom.Element element) {
+ switch (element.localName) {
+ case 'script':
+ return element.attributes['src'];
+ case 'link':
+ return element.attributes['href'];
+ default:
+ throw 'Unrecognized element $element';
+ }
+ }
+
+ void _setScriptAttribute(dom.Element element, String path) {
+ switch (element.localName) {
+ case 'script':
+ element.attributes['src'] = path;
+ break;
+ case 'link':
+ element.attributes['href'] = path;
+ break;
+ }
+ }
+
+ List<dom.Element> _getScripts(dom.Document document) =>
+ document.querySelectorAll(
+ 'script[type="application/dart"], link[rel="x-dart-test"]');
}
// Class which builds a bootstrap file.
@@ -157,11 +186,13 @@ class _BootstrapFileBuilder {
/// The resolved initialize library.
LibraryElement _initializeLibrary;
+
/// The resolved Initializer class from the initialize library.
ClassElement _initializer;
/// Queue for intialization annotations.
final _initQueue = new Queue<InitializerData>();
+
/// All the annotations we have seen for each element
final _seenAnnotations = new Map<Element, Set<ElementAnnotation>>();
@@ -234,10 +265,11 @@ class _BootstrapFileBuilder {
bool _readAnnotations(Element element) {
var found = false;
- if (element.metadata.isEmpty) return found;
+ // analyzer 0.29 doesn't allow this optimization :
+ //if (element.metadata.isEmpty) return found;
var metaNodes;
- var node = element.node;
+ var node = element.computeNode();
if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
metaNodes = node.parent.parent.metadata;
} else if (node is ClassDeclaration || node is FunctionDeclaration) {
@@ -326,8 +358,8 @@ $initializersBuffer
_logger.error("Can't import `${id}` from `${_newEntryPoint}`");
} else if (path.url.split(id.path)[0] ==
path.url.split(_newEntryPoint.path)[0]) {
- var relativePath = path.url.relative(id.path,
- from: path.url.dirname(_newEntryPoint.path));
+ var relativePath = path.url
+ .relative(id.path, from: path.url.dirname(_newEntryPoint.path));
buffer.write("import '${relativePath}'");
} else {
_logger.error("Can't import `${id}` from `${_newEntryPoint}`");
@@ -409,8 +441,9 @@ $initializersBuffer
}
return (new List.from(library.imports)
- ..addAll(library.exports)
- ..sort((a, b) => a.nameOffset.compareTo(b.nameOffset))).map(getLibrary);
+ ..addAll(library.exports)
+ ..sort((a, b) => a.nameOffset.compareTo(b.nameOffset)))
+ .map(getLibrary);
}
}
« no previous file with comments | « packages/initialize/lib/src/mirror_loader.dart ('k') | packages/initialize/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698