| Index: pkg/polymer/lib/src/build/script_compactor.dart
|
| diff --git a/pkg/polymer/lib/src/build/script_compactor.dart b/pkg/polymer/lib/src/build/script_compactor.dart
|
| index 20d805287fcc472d0d4c662559f97d5fdd5647fc..bd3b3d8da21d70716ff5503d1504900f90df40da 100644
|
| --- a/pkg/polymer/lib/src/build/script_compactor.dart
|
| +++ b/pkg/polymer/lib/src/build/script_compactor.dart
|
| @@ -249,13 +249,15 @@ class _ScriptCompactor extends PolymerTransformer {
|
| // Process all classes and top-level functions to include initializers,
|
| // register custom elements, and include special fields and methods in
|
| // custom element classes.
|
| + var functionsSeen = new Set<FunctionElement>();
|
| + var classesSeen = new Set<ClassElement>();
|
| for (var id in entryLibraries) {
|
| var lib = resolver.getLibrary(id);
|
| - for (var fun in _visibleTopLevelMethodsOf(lib)) {
|
| + for (var fun in _visibleTopLevelMethodsOf(lib, functionsSeen)) {
|
| _processFunction(fun, id);
|
| }
|
|
|
| - for (var cls in _visibleClassesOf(lib)) {
|
| + for (var cls in _visibleClassesOf(lib, classesSeen)) {
|
| _processClass(cls, id, recorder);
|
| }
|
| }
|
| @@ -807,28 +809,41 @@ class _ResolvedTypes {
|
|
|
| /// Retrieves all classses that are visible if you were to import [lib]. This
|
| /// includes exported classes from other libraries.
|
| -List<ClassElement> _visibleClassesOf(LibraryElement lib) {
|
| +List<ClassElement> _visibleClassesOf(LibraryElement lib,
|
| + Set<ClassElement> seen) {
|
| var result = [];
|
| - result.addAll(lib.units.expand((u) => u.types));
|
| + addAllNew(list) => list.forEach((e) {
|
| + if (!seen.contains(e)) result.add(e);
|
| + });
|
| + addAllNew(lib.units.expand((u) => u.types));
|
| for (var e in lib.exports) {
|
| - var exported = e.exportedLibrary.units.expand((u) => u.types).toList();
|
| + var exportedLibrary = e.exportedLibrary;
|
| + if (seen.contains(exportedLibrary)) continue;
|
| + var exported = exportedLibrary.units.expand((u) => u.types).toList();
|
| _filter(exported, e.combinators);
|
| - result.addAll(exported);
|
| + addAllNew(exported);
|
| }
|
| + seen.addAll(result);
|
| return result;
|
| }
|
|
|
| /// Retrieves all top-level methods that are visible if you were to import
|
| /// [lib]. This includes exported methods from other libraries too.
|
| -List<FunctionElement> _visibleTopLevelMethodsOf(LibraryElement lib) {
|
| +List<FunctionElement> _visibleTopLevelMethodsOf(
|
| + LibraryElement lib, Set<FunctionElement> seen) {
|
| var result = [];
|
| - result.addAll(lib.units.expand((u) => u.functions));
|
| + addAllNew(list) => list.forEach((e) {
|
| + if (!seen.contains(e)) result.add(e);
|
| + });
|
| + addAllNew(lib.units.expand((u) => u.functions));
|
| for (var e in lib.exports) {
|
| - var exported = e.exportedLibrary.units
|
| - .expand((u) => u.functions).toList();
|
| + var exportedLibrary = e.exportedLibrary;
|
| + if (seen.contains(exportedLibrary)) continue;
|
| + var exported = exportedLibrary.units.expand((u) => u.functions).toList();
|
| _filter(exported, e.combinators);
|
| - result.addAll(exported);
|
| + addAllNew(exported);
|
| }
|
| + seen.addAll(result);
|
| return result;
|
| }
|
|
|
|
|