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

Unified Diff: pkg/analyzer/lib/src/summary/summarize_elements.dart

Issue 1722413002: Extract PackageBundleAssembler and use for SDK and package summary generation. (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
« no previous file with comments | « no previous file | pkg/analyzer/tool/summary/build_sdk_summaries.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/summary/summarize_elements.dart
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index afd3ab1e00ce94fcb6de287ef7ab6353139c0641..bef46a9abe41649c9d866b5e338f0efa79dcd45f 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -4,6 +4,8 @@
library serialization.elements;
+import 'dart:convert';
+
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/element/element.dart';
@@ -17,6 +19,7 @@ import 'package:analyzer/src/summary/format.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary/name_filter.dart';
import 'package:analyzer/src/summary/summarize_const_expr.dart';
+import 'package:crypto/crypto.dart';
/**
* Serialize all the elements in [lib] to a summary using [ctx] as the context
@@ -24,7 +27,8 @@ import 'package:analyzer/src/summary/summarize_const_expr.dart';
*/
LibrarySerializationResult serializeLibrary(
LibraryElement lib, TypeProvider typeProvider, bool strongMode) {
- var serializer = new _LibrarySerializer(lib, typeProvider, strongMode);
+ _LibrarySerializer serializer =
+ new _LibrarySerializer(lib, typeProvider, strongMode);
LinkedLibraryBuilder linked = serializer.serializeLibrary();
return new LibrarySerializationResult(linked, serializer.unlinkedUnits,
serializer.unitUris, serializer.unitSources);
@@ -106,6 +110,57 @@ class LibrarySerializationResult {
}
/**
+ * Object that gathers information uses it to assemble a new
+ * [PackageBundleBuilder].
+ */
+class PackageBundleAssembler {
+ final List<String> _linkedLibraryUris = <String>[];
+ final List<LinkedLibraryBuilder> _linkedLibraries = <LinkedLibraryBuilder>[];
+ final List<String> _unlinkedUnitUris = <String>[];
+ final List<UnlinkedUnitBuilder> _unlinkedUnits = <UnlinkedUnitBuilder>[];
+ final List<String> _unlinkedUnitHashes = <String>[];
+
+ /**
+ * Assemble a new [PackageBundleBuilder] using the gathered information.
+ */
+ PackageBundleBuilder assemble() {
+ return new PackageBundleBuilder(
+ linkedLibraryUris: _linkedLibraryUris,
+ linkedLibraries: _linkedLibraries,
+ unlinkedUnitUris: _unlinkedUnitUris,
+ unlinkedUnits: _unlinkedUnits,
+ unlinkedUnitHashes: _unlinkedUnitHashes);
+ }
+
+ /**
+ * Serialize the library with the given [element].
+ */
+ void serializeLibraryElement(LibraryElement element) {
+ String uri = element.source.uri.toString();
+ LibrarySerializationResult libraryResult = serializeLibrary(
+ element,
+ element.context.typeProvider,
+ element.context.analysisOptions.strongMode);
+ _linkedLibraryUris.add(uri);
+ _linkedLibraries.add(libraryResult.linked);
+ _unlinkedUnitUris.addAll(libraryResult.unitUris);
+ _unlinkedUnits.addAll(libraryResult.unlinkedUnits);
+ for (Source source in libraryResult.unitSources) {
+ _unlinkedUnitHashes.add(_hash(source.contents.data));
+ }
+ }
+
+ /**
+ * Compute a hash of the given file contents.
+ */
+ String _hash(String contents) {
+ MD5 md5 = new MD5();
+ md5.add(UTF8.encode(contents));
+ return CryptoUtils.bytesToHex(md5.close());
+ }
+}
+
+/**
* Instances of this class keep track of intermediate state during
* serialization of a single compilation unit.
*/
@@ -1331,7 +1386,7 @@ class _LibrarySerializer {
/**
* Retrieve a list of the Sources for the compilation units in the library.
*/
- List<String> get unitSources => compilationUnitSerializers
+ List<Source> get unitSources => compilationUnitSerializers
.map((_CompilationUnitSerializer s) => s.unitSource)
.toList();
« no previous file with comments | « no previous file | pkg/analyzer/tool/summary/build_sdk_summaries.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698