Index: pkg/polymer/lib/src/summary.dart |
diff --git a/pkg/polymer/lib/src/summary.dart b/pkg/polymer/lib/src/summary.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..841870ae0c92bc55e510d98170d7b8ec81db5afc |
--- /dev/null |
+++ b/pkg/polymer/lib/src/summary.dart |
@@ -0,0 +1,88 @@ |
+// Copyright (c) 2012, 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. |
+ |
+/** |
+ * Summary information for components and libraries. |
+ * |
+ * These classes are used for modular compilation. Summaries are a subset of the |
+ * information collected by Info objects (see `info.dart`). When we are |
+ * compiling a single file, the information extracted from that file is stored |
+ * as info objects, but any information that is needed from other files (like |
+ * imported components) is stored as a summary. |
+ */ |
+library polymer.src.summary; |
+ |
+import 'package:source_maps/span.dart' show Span; |
+ |
+// TODO(sigmund): consider moving UrlInfo out of info.dart |
+import 'info.dart' show UrlInfo; |
+ |
+/** |
+ * Summary information from other library-like objects, which includes HTML |
+ * components and dart libraries). |
+ */ |
+class LibrarySummary { |
+ /** Path to the sources represented by this summary. */ |
+ final UrlInfo dartCodeUrl; |
+ |
+ /** Name given to this source after it was compiled. */ |
+ final String outputFilename; |
+ |
+ LibrarySummary(this.dartCodeUrl, this.outputFilename); |
+} |
+ |
+/** Summary information for an HTML file that defines custom elements. */ |
+class HtmlFileSummary extends LibrarySummary { |
+ /** |
+ * Summary of each component defined either explicitly the HTML file or |
+ * included transitively from `<link rel="import">` tags. |
+ */ |
+ final Map<String, ComponentSummary> components; |
+ |
+ HtmlFileSummary(UrlInfo dartCodeUrl, String outputFilename, this.components) |
+ : super(dartCodeUrl, outputFilename); |
+} |
+ |
+/** Information about a web component definition. */ |
+class ComponentSummary extends LibrarySummary { |
+ /** The component tag name, defined with the `name` attribute on `element`. */ |
+ final String tagName; |
+ |
+ /** |
+ * The tag name that this component extends, defined with the `extends` |
+ * attribute on `element`. |
+ */ |
+ final String extendsTag; |
+ |
+ /** |
+ * The Dart class containing the component's behavior, derived from tagName or |
+ * defined in the `constructor` attribute on `element`. |
+ */ |
+ final String className; |
+ |
+ /** Summary of the base component, if any. */ |
+ final ComponentSummary extendsComponent; |
+ |
+ /** |
+ * True if [tagName] was defined by more than one component. Used internally |
+ * by the analyzer. Conflicting component will be skipped by the compiler. |
+ */ |
+ bool hasConflict; |
+ |
+ /** Original span where this component is declared. */ |
+ final Span sourceSpan; |
+ |
+ ComponentSummary(UrlInfo dartCodeUrl, String outputFilename, |
+ this.tagName, this.extendsTag, this.className, this.extendsComponent, |
+ this.sourceSpan, [this.hasConflict = false]) |
+ : super(dartCodeUrl, outputFilename); |
+ |
+ /** |
+ * Gets the HTML tag extended by the base of the component hierarchy. |
+ * Equivalent to [extendsTag] if this inherits directly from an HTML element, |
+ * in other words, if [extendsComponent] is null. |
+ */ |
+ String get baseExtendsTag => |
+ extendsComponent == null ? extendsTag : extendsComponent.baseExtendsTag; |
+} |