33// BSD-style license that can be found in the LICENSE file.
44
55import 'package:analyzer/dart/analysis/declared_variables.dart' ;
6+ import 'package:analyzer/dart/ast/ast.dart' show CompilationUnit;
67import 'package:analyzer/dart/element/element.dart'
78 show CompilationUnitElement, LibraryElement;
89import 'package:analyzer/src/context/context.dart' ;
910import 'package:analyzer/src/dart/analysis/driver.dart' ;
1011import 'package:analyzer/src/dart/analysis/file_state.dart' ;
12+ import 'package:analyzer/src/dart/analysis/one_phase_summaries_selector.dart' ;
1113import 'package:analyzer/src/dart/element/element.dart' ;
1214import 'package:analyzer/src/dart/element/handle.dart' ;
1315import 'package:analyzer/src/generated/engine.dart'
@@ -16,7 +18,9 @@ import 'package:analyzer/src/generated/source.dart';
1618import 'package:analyzer/src/summary/format.dart' ;
1719import 'package:analyzer/src/summary/idl.dart' ;
1820import 'package:analyzer/src/summary/link.dart' ;
21+ import 'package:analyzer/src/summary/one_phase.dart' ;
1922import 'package:analyzer/src/summary/package_bundle_reader.dart' ;
23+ import 'package:analyzer/src/summary/summarize_elements.dart' ;
2024import 'package:front_end/src/api_prototype/byte_store.dart' ;
2125import 'package:front_end/src/base/performance_logger.dart' ;
2226
@@ -93,7 +97,8 @@ class LibraryContext {
9397 appendLibraryFiles (targetLibrary);
9498 });
9599
96- Set <String > libraryUrisToLink = new Set <String >();
100+ var libraryUrisToLink = new Set <String >();
101+ var libraryFilesToLink = new Set <FileState >();
97102 logger.run ('Load linked bundles' , () {
98103 for (FileState library in libraries.values) {
99104 if (library.exists || library == targetLibrary) {
@@ -104,6 +109,7 @@ class LibraryContext {
104109 store.addLinkedLibrary (library.uriStr, linked);
105110 } else {
106111 libraryUrisToLink.add (library.uriStr);
112+ libraryFilesToLink.add (library);
107113 }
108114 }
109115 }
@@ -112,16 +118,47 @@ class LibraryContext {
112118 });
113119
114120 Map <String , LinkedLibraryBuilder > linkedLibraries = {};
115- logger.run ('Link bundles' , () {
116- linkedLibraries = link (libraryUrisToLink, (String uri) {
117- LinkedLibrary linkedLibrary = store.linkedMap[uri];
118- return linkedLibrary;
119- }, (String uri) {
120- UnlinkedUnit unlinkedUnit = store.unlinkedMap[uri];
121- return unlinkedUnit;
122- }, (_) => null );
123- logger.writeln ('Linked ${linkedLibraries .length } bundles.' );
124- });
121+ if (enableOnePhaseSummaries) {
122+ var uriToUnit = < String , CompilationUnit > {};
123+ logger.run ('Parse files' , () {
124+ for (var library in libraryFilesToLink) {
125+ for (var file in library.libraryFiles) {
126+ uriToUnit[file.uriStr] = file.parse ();
127+ }
128+ }
129+ logger.writeln ('Parsed ${uriToUnit .length } files.' );
130+ });
131+
132+ logger.run ('Link libraries' , () {
133+ var assembler = new PackageBundleAssembler ();
134+ summarize (uriToUnit, store, assembler, (_) => null , true );
135+
136+ var bundle = assembler.assemble ();
137+ for (int i = 0 ; i < bundle.linkedLibraryUris.length; i++ ) {
138+ var uri = bundle.linkedLibraryUris[i];
139+
140+ // TODO(scheglov) At the moment we might get parts here.
141+ if (! libraries.containsKey (uri)) {
142+ continue ;
143+ }
144+
145+ linkedLibraries[uri] = bundle.linkedLibraries[i];
146+ }
147+
148+ logger.writeln ('Linked ${linkedLibraries .length } libraries.' );
149+ });
150+ } else {
151+ logger.run ('Link libraries' , () {
152+ linkedLibraries = link (libraryUrisToLink, (String uri) {
153+ LinkedLibrary linkedLibrary = store.linkedMap[uri];
154+ return linkedLibrary;
155+ }, (String uri) {
156+ UnlinkedUnit unlinkedUnit = store.unlinkedMap[uri];
157+ return unlinkedUnit;
158+ }, (_) => null );
159+ logger.writeln ('Linked ${linkedLibraries .length } libraries.' );
160+ });
161+ }
125162
126163 for (String uri in linkedLibraries.keys) {
127164 LinkedLibraryBuilder linkedBuilder = linkedLibraries[uri];
0 commit comments