| 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; | 
| +} | 
|  |