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

Side by Side Diff: packages/web_components/lib/build/html_import_annotation_recorder.dart

Issue 2312183003: Removed Polymer from Observatory deps (Closed)
Patch Set: Created 4 years, 3 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 unified diff | Download patch
OLDNEW
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 // 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 library web_components.build.html_import_recorder_inliner; 4 library web_components.build.html_import_recorder_inliner;
5 5
6 import 'package:analyzer/analyzer.dart';
7 import 'package:analyzer/src/generated/ast.dart';
8 import 'package:analyzer/src/generated/element.dart'; 6 import 'package:analyzer/src/generated/element.dart';
9 import 'package:barback/barback.dart';
10 import 'package:initialize/transformer.dart'; 7 import 'package:initialize/transformer.dart';
11 import 'package:path/path.dart' as path; 8 import 'package:path/path.dart' as path;
12 import '../src/normalize_path.dart'; 9 import '../src/normalize_path.dart';
13 10
14 /// [InitializerPlugin] for @HtmlImport annotations. This records all paths 11 /// [InitializerPlugin] for @HtmlImport annotations. This records all paths
15 /// seen, normalizes them relative to the entry point, and records the values in 12 /// seen, normalizes them relative to the entry point, and records the values in
16 /// [importPaths]. 13 /// [importPaths].
17 /// 14 ///
18 /// Note: This does nothing with the paths on its own, a separate step needs to 15 /// Note: This does nothing with the paths on its own, a separate step needs to
19 /// add the imports to the entry point document. 16 /// add the imports to the entry point document.
20 class HtmlImportAnnotationRecorder implements InitializerPlugin { 17 class HtmlImportAnnotationRecorder implements InitializerPlugin {
21 /// All the normalized import paths that were seen. 18 /// All the normalized import paths that were seen.
22 final Set<String> importPaths = new Set<String>(); 19 final Set<String> importPaths = new Set<String>();
23 20
24 TransformLogger _logger;
25
26 HtmlImportAnnotationRecorder(); 21 HtmlImportAnnotationRecorder();
27 22
28 /// Applies to anything named `HtmlImport` which annotates a library. 23 /// Applies to anything named `HtmlImport` which annotates a library.
29 bool shouldApply(InitializerPluginData pluginData) { 24 bool shouldApply(InitializerPluginData pluginData) {
30 var annotationElement = pluginData.initializer.annotationNode.element; 25 var annotationElement = pluginData.initializer.annotationNode.element;
31 var logger = pluginData.logger; 26 var logger = pluginData.logger;
32 DartType type; 27 DartType type;
33 if (annotationElement is ConstructorElement) { 28 if (annotationElement is ConstructorElement) {
34 type = annotationElement.returnType; 29 type = annotationElement.returnType;
35 } else if (annotationElement is PropertyAccessorElement) { 30 } else if (annotationElement is PropertyAccessorElement) {
36 type = annotationElement.variable.propagatedType; 31 type = annotationElement.variable.propagatedType;
37 if (type == null) { 32 if (type == null) {
38 type = pluginData.resolver.evaluateConstant(annotationElement.library, 33 type = pluginData.resolver
39 pluginData.initializer.annotationNode.name).value.type; 34 .evaluateConstant(annotationElement.library,
35 pluginData.initializer.annotationNode.name)
36 .value
37 .type;
40 } 38 }
41 } else { 39 } else {
42 logger.error('Unsupported annotation type. Only constructors and ' 40 logger.error('Unsupported annotation type. Only constructors and '
43 'properties are supported as initializers.'); 41 'properties are supported as initializers.');
44 return false; 42 return false;
45 } 43 }
46 if (type.name != 'HtmlImport') return false; 44 if (type.name != 'HtmlImport') return false;
47 if (pluginData.initializer.targetElement is! LibraryElement) { 45 if (pluginData.initializer.targetElement is! LibraryElement) {
48 logger.error('Invalid HtmlImport annotation on non-library element.'); 46 logger.error('Invalid HtmlImport annotation on non-library element.');
49 return false; 47 return false;
50 } 48 }
51 return true; 49 return true;
52 } 50 }
53 51
54 /// Records the normalized url and returns [null] so that no [InitEntry] will 52 /// Records the normalized url and returns [null] so that no [InitEntry] will
55 /// be created. 53 /// be created.
56 String apply(InitializerPluginData pluginData) { 54 String apply(InitializerPluginData pluginData) {
57 var bootstrapId = pluginData.bootstrapId; 55 var bootstrapId = pluginData.bootstrapId;
58 var logger = pluginData.logger; 56 var logger = pluginData.logger;
59 var annotation = pluginData.initializer.annotationNode; 57 var annotation = pluginData.initializer.annotationNode;
60 var annotationElement = pluginData.initializer.annotationElement; 58 var annotationElement = pluginData.initializer.annotationElement;
61 var element = pluginData.initializer.targetElement as LibraryElement; 59 var element = pluginData.initializer.targetElement as LibraryElement;
62 var resolver = pluginData.resolver; 60 var resolver = pluginData.resolver;
63 var libraryDirective =
64 pluginData.initializer.targetNode.parent.parent as LibraryDirective;
65 61
66 var originalImportPath; 62 var originalImportPath;
67 if (annotationElement.element is PropertyAccessorElement) { 63 if (annotationElement.element is PropertyAccessorElement) {
68 originalImportPath = resolver.evaluateConstant( 64 originalImportPath = resolver
69 element.library, annotation.name).value.fields[ 65 .evaluateConstant(element.library, annotation.name)
70 'filePath'].stringValue; 66 .value
67 .fields['filePath']
68 .toStringValue();
71 } else { 69 } else {
72 assert(annotationElement.element is ConstructorElement); 70 assert(annotationElement.element is ConstructorElement);
73 originalImportPath = resolver.evaluateConstant(element.library, 71 originalImportPath = resolver
74 annotation.arguments.arguments.first).value.stringValue; 72 .evaluateConstant(
73 element.library, annotation.arguments.arguments.first)
74 .value
75 .toStringValue();
75 } 76 }
76 77
77 var libPath; 78 var libPath;
78 var segments = element.source.uri.pathSegments; 79 var segments = element.source.uri.pathSegments;
79 var package = segments[0]; 80 var package = segments[0];
80 if (bootstrapId.package == package && 81 if (bootstrapId.package == package &&
81 bootstrapId.path.startsWith('${segments[1]}/')) { 82 bootstrapId.path.startsWith('${segments[1]}/')) {
82 package = null; 83 package = null;
83 libPath = path.url.relative( 84 libPath = path.url.relative(
84 path.url.joinAll(segments.getRange(1, segments.length)), 85 path.url.joinAll(segments.getRange(1, segments.length)),
85 from: path.url.dirname(path.url.join(bootstrapId.path))); 86 from: path.url.dirname(path.url.join(bootstrapId.path)));
86 } else if (segments[1] == 'lib') { 87 } else if (segments[1] == 'lib') {
87 libPath = path.url.joinAll(segments.getRange(2, segments.length)); 88 libPath = path.url.joinAll(segments.getRange(2, segments.length));
88 } else { 89 } else {
89 logger.error('Unable to import `${element.source.uri.path}` from ' 90 logger.error('Unable to import `${element.source.uri.path}` from '
90 '${bootstrapId}.'); 91 '${bootstrapId}.');
91 return null; 92 return null;
92 } 93 }
93 94
94 importPaths 95 importPaths
95 .add(normalizeHtmlImportPath(originalImportPath, package, libPath)); 96 .add(normalizeHtmlImportPath(originalImportPath, package, libPath));
96 97
97 // Don't emit an InitEntry. 98 // Don't emit an InitEntry.
98 return null; 99 return null;
99 } 100 }
100 } 101 }
OLDNEW
« no previous file with comments | « packages/web_components/lib/build.log ('k') | packages/web_components/lib/build/import_inliner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698