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

Side by Side Diff: pkg/analyzer/tool/summary/build_sdk_summaries.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 unified diff | Download patch
OLDNEW
1 import 'dart:convert';
2 import 'dart:io'; 1 import 'dart:io';
3 2
4 import 'package:analyzer/dart/element/element.dart'; 3 import 'package:analyzer/dart/element/element.dart';
5 import 'package:analyzer/src/generated/engine.dart'; 4 import 'package:analyzer/src/generated/engine.dart';
6 import 'package:analyzer/src/generated/java_io.dart'; 5 import 'package:analyzer/src/generated/java_io.dart';
7 import 'package:analyzer/src/generated/sdk.dart'; 6 import 'package:analyzer/src/generated/sdk.dart';
8 import 'package:analyzer/src/generated/sdk_io.dart'; 7 import 'package:analyzer/src/generated/sdk_io.dart';
9 import 'package:analyzer/src/generated/source.dart'; 8 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/summary/format.dart'; 9 import 'package:analyzer/src/summary/format.dart';
11 import 'package:analyzer/src/summary/summarize_elements.dart'; 10 import 'package:analyzer/src/summary/summarize_elements.dart';
12 import 'package:crypto/crypto.dart';
13 import 'package:path/path.dart'; 11 import 'package:path/path.dart';
14 12
15 main(List<String> args) { 13 main(List<String> args) {
16 if (args.length < 1 || args.length > 2) { 14 if (args.length < 1 || args.length > 2) {
17 _printUsage(); 15 _printUsage();
18 exitCode = 1; 16 exitCode = 1;
19 return; 17 return;
20 } 18 }
21 // 19 //
22 // Prepare output file path. 20 // Prepare output file path.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 62 }
65 63
66 class _Builder { 64 class _Builder {
67 final String sdkPath; 65 final String sdkPath;
68 final String outputDirectoryPath; 66 final String outputDirectoryPath;
69 final bool strongMode; 67 final bool strongMode;
70 68
71 AnalysisContext context; 69 AnalysisContext context;
72 final Set<Source> processedSources = new Set<Source>(); 70 final Set<Source> processedSources = new Set<Source>();
73 71
74 final List<String> linkedLibraryUris = <String>[]; 72 final PackageBundleAssembler assembler = new PackageBundleAssembler();
75 final List<LinkedLibraryBuilder> linkedLibraries = <LinkedLibraryBuilder>[];
76 final List<String> unlinkedUnitUris = <String>[];
77 final List<UnlinkedUnitBuilder> unlinkedUnits = <UnlinkedUnitBuilder>[];
78 final List<String> unlinkedUnitHashes = <String>[];
79 73
80 _Builder(this.sdkPath, this.outputDirectoryPath, this.strongMode); 74 _Builder(this.sdkPath, this.outputDirectoryPath, this.strongMode);
81 75
82 /** 76 /**
83 * Build a strong or spec mode summary for the Dart SDK at [sdkPath]. 77 * Build a strong or spec mode summary for the Dart SDK at [sdkPath].
84 */ 78 */
85 void build() { 79 void build() {
86 print('Generating ${strongMode ? 'strong' : 'spec'} mode summary.'); 80 print('Generating ${strongMode ? 'strong' : 'spec'} mode summary.');
87 Stopwatch sw = new Stopwatch()..start(); 81 Stopwatch sw = new Stopwatch()..start();
88 // 82 //
(...skipping 15 matching lines...) Expand all
104 // 98 //
105 // Serialize each SDK library. 99 // Serialize each SDK library.
106 // 100 //
107 for (String uri in uriSet) { 101 for (String uri in uriSet) {
108 Source libSource = sdk.mapDartUri(uri); 102 Source libSource = sdk.mapDartUri(uri);
109 _serializeLibrary(libSource); 103 _serializeLibrary(libSource);
110 } 104 }
111 // 105 //
112 // Write the whole SDK bundle. 106 // Write the whole SDK bundle.
113 // 107 //
114 PackageBundleBuilder sdkBundle = new PackageBundleBuilder( 108 PackageBundleBuilder sdkBundle = assembler.assemble();
115 linkedLibraryUris: linkedLibraryUris,
116 linkedLibraries: linkedLibraries,
117 unlinkedUnitUris: unlinkedUnitUris,
118 unlinkedUnits: unlinkedUnits,
119 unlinkedUnitHashes: unlinkedUnitHashes);
120 String outputFilePath = 109 String outputFilePath =
121 join(outputDirectoryPath, strongMode ? 'strong.sum' : 'spec.sum'); 110 join(outputDirectoryPath, strongMode ? 'strong.sum' : 'spec.sum');
122 File file = new File(outputFilePath); 111 File file = new File(outputFilePath);
123 file.writeAsBytesSync(sdkBundle.toBuffer(), mode: FileMode.WRITE_ONLY); 112 file.writeAsBytesSync(sdkBundle.toBuffer(), mode: FileMode.WRITE_ONLY);
124 // 113 //
125 // Done. 114 // Done.
126 // 115 //
127 print('\tDone in ${sw.elapsedMilliseconds} ms.'); 116 print('\tDone in ${sw.elapsedMilliseconds} ms.');
128 } 117 }
129 118
130 /** 119 /**
131 * Compute a hash of the given file contents.
132 */
133 String _hash(String contents) {
134 MD5 md5 = new MD5();
135 md5.add(UTF8.encode(contents));
136 return CryptoUtils.bytesToHex(md5.close());
137 }
138
139 /**
140 * Serialize the library with the given [source] and all its direct or 120 * Serialize the library with the given [source] and all its direct or
141 * indirect imports and exports. 121 * indirect imports and exports.
142 */ 122 */
143 void _serializeLibrary(Source source) { 123 void _serializeLibrary(Source source) {
144 if (!processedSources.add(source)) { 124 if (!processedSources.add(source)) {
145 return; 125 return;
146 } 126 }
147 LibraryElement element = context.computeLibraryElement(source); 127 LibraryElement element = context.computeLibraryElement(source);
148 _serializeSingleLibrary(element); 128 assembler.serializeLibraryElement(element);
149 element.importedLibraries.forEach((e) => _serializeLibrary(e.source)); 129 element.importedLibraries.forEach((e) => _serializeLibrary(e.source));
150 element.exportedLibraries.forEach((e) => _serializeLibrary(e.source)); 130 element.exportedLibraries.forEach((e) => _serializeLibrary(e.source));
151 } 131 }
152
153 /**
154 * Serialize the library with the given [element].
155 */
156 void _serializeSingleLibrary(LibraryElement element) {
157 String uri = element.source.uri.toString();
158 LibrarySerializationResult libraryResult =
159 serializeLibrary(element, context.typeProvider, strongMode);
160 linkedLibraryUris.add(uri);
161 linkedLibraries.add(libraryResult.linked);
162 unlinkedUnitUris.addAll(libraryResult.unitUris);
163 unlinkedUnits.addAll(libraryResult.unlinkedUnits);
164 for (Source source in libraryResult.unitSources) {
165 unlinkedUnitHashes.add(_hash(source.contents.data));
166 }
167 }
168 } 132 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/summarize_elements.dart ('k') | pkg/analyzer_cli/lib/src/package_analyzer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698