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

Unified Diff: pkg/analyzer/tool/summary/build_sdk_summaries.dart

Issue 1735243003: Initial package indexing implementation. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/tool/summary/build_sdk_summaries.dart
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index 9de43a95600624dd2110f369cfe8492d8c1cf80d..29f49db17b6962a46ea56d57d5190c9fe6b3c069 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -1,5 +1,6 @@
import 'dart:io';
+import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/java_io.dart';
@@ -7,6 +8,7 @@ import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/sdk_io.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/summary/format.dart';
+import 'package:analyzer/src/summary/index_unit.dart';
import 'package:analyzer/src/summary/summarize_elements.dart';
import 'package:path/path.dart';
@@ -69,7 +71,8 @@ class _Builder {
AnalysisContext context;
final Set<Source> processedSources = new Set<Source>();
- final PackageBundleAssembler assembler = new PackageBundleAssembler();
+ final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
+ final PackageIndexAssembler indexAssembler = new PackageIndexAssembler();
_Builder(this.sdkPath, this.outputDirectoryPath, this.strongMode);
@@ -77,7 +80,8 @@ class _Builder {
* Build a strong or spec mode summary for the Dart SDK at [sdkPath].
*/
void build() {
- print('Generating ${strongMode ? 'strong' : 'spec'} mode summary.');
+ String modeName = strongMode ? 'strong' : 'spec';
+ print('Generating $modeName mode summary and index.');
Stopwatch sw = new Stopwatch()..start();
//
// Prepare SDK.
@@ -105,11 +109,21 @@ class _Builder {
//
// Write the whole SDK bundle.
//
- PackageBundleBuilder sdkBundle = assembler.assemble();
- String outputFilePath =
- join(outputDirectoryPath, strongMode ? 'strong.sum' : 'spec.sum');
- File file = new File(outputFilePath);
- file.writeAsBytesSync(sdkBundle.toBuffer(), mode: FileMode.WRITE_ONLY);
+ {
+ PackageBundleBuilder bundle = bundleAssembler.assemble();
+ String outputPath = join(outputDirectoryPath, '$modeName.sum');
+ File file = new File(outputPath);
+ file.writeAsBytesSync(bundle.toBuffer(), mode: FileMode.WRITE_ONLY);
+ }
+ //
+ // Write the whole SDK index.
+ //
+ {
+ PackageIndexBuilder index = indexAssembler.assemble();
+ String outputPath = join(outputDirectoryPath, '$modeName.index');
+ File file = new File(outputPath);
+ file.writeAsBytesSync(index.toBuffer(), mode: FileMode.WRITE_ONLY);
+ }
//
// Done.
//
@@ -125,8 +139,15 @@ class _Builder {
return;
}
LibraryElement element = context.computeLibraryElement(source);
- assembler.serializeLibraryElement(element);
+ bundleAssembler.serializeLibraryElement(element);
element.importedLibraries.forEach((e) => _serializeLibrary(e.source));
element.exportedLibraries.forEach((e) => _serializeLibrary(e.source));
+ // Index every unit of the library.
+ for (CompilationUnitElement unitElement in element.units) {
+ Source unitSource = unitElement.source;
+ CompilationUnit unit =
+ context.resolveCompilationUnit2(unitSource, source);
+ indexAssembler.index(unit);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698