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

Side by Side Diff: pkg/analyzer_cli/lib/src/build_mode.dart

Issue 2796953002: Add --build-summary-only-unlinked flag, which makes the output summary be an unlinked summary inste… (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | pkg/analyzer_cli/lib/src/options.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer_cli.src.build_mode; 5 library analyzer_cli.src.build_mode;
6 6
7 import 'dart:core'; 7 import 'dart:core';
8 import 'dart:io' as io; 8 import 'dart:io' as io;
9 9
10 import 'package:analyzer/dart/ast/ast.dart' show CompilationUnit; 10 import 'package:analyzer/dart/ast/ast.dart' show CompilationUnit;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 AnalysisResult analysisResult = context.performAnalysisTask(); 192 AnalysisResult analysisResult = context.performAnalysisTask();
193 if (!analysisResult.hasMoreWork) { 193 if (!analysisResult.hasMoreWork) {
194 break; 194 break;
195 } 195 }
196 } 196 }
197 } 197 }
198 198
199 // Write summary. 199 // Write summary.
200 assembler = new PackageBundleAssembler(); 200 assembler = new PackageBundleAssembler();
201 if (_shouldOutputSummary) { 201 if (_shouldOutputSummary) {
202 _serializeAstBasedSummary(explicitSources); 202 if (options.buildSummaryOnlyUnlinked) {
203 for (var src in explicitSources) {
204 // Note: This adds the unit to the assembler if it needed to be
205 // computed, so we don't need to explicitly do that.
206 _unlinkedUnitForUri('${src.uri}');
207 }
208 } else {
209 _serializeAstBasedSummary(explicitSources);
210 assembler.recordDependencies(summaryDataStore);
211 }
203 // Write the whole package bundle. 212 // Write the whole package bundle.
204 assembler.recordDependencies(summaryDataStore);
205 PackageBundleBuilder bundle = assembler.assemble(); 213 PackageBundleBuilder bundle = assembler.assemble();
206 if (options.buildSummaryOutput != null) { 214 if (options.buildSummaryOutput != null) {
207 io.File file = new io.File(options.buildSummaryOutput); 215 io.File file = new io.File(options.buildSummaryOutput);
208 file.writeAsBytesSync(bundle.toBuffer(), mode: io.FileMode.WRITE_ONLY); 216 file.writeAsBytesSync(bundle.toBuffer(), mode: io.FileMode.WRITE_ONLY);
209 } 217 }
210 if (options.buildSummaryOutputSemantic != null) { 218 if (options.buildSummaryOutputSemantic != null) {
211 bundle.flushInformative(); 219 bundle.flushInformative();
212 io.File file = new io.File(options.buildSummaryOutputSemantic); 220 io.File file = new io.File(options.buildSummaryOutputSemantic);
213 file.writeAsBytesSync(bundle.toBuffer(), mode: io.FileMode.WRITE_ONLY); 221 file.writeAsBytesSync(bundle.toBuffer(), mode: io.FileMode.WRITE_ONLY);
214 } 222 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 * Serialize the package with the given [sources] into [assembler] using only 351 * Serialize the package with the given [sources] into [assembler] using only
344 * their ASTs and [LinkedUnit]s of input packages. 352 * their ASTs and [LinkedUnit]s of input packages.
345 */ 353 */
346 void _serializeAstBasedSummary(List<Source> sources) { 354 void _serializeAstBasedSummary(List<Source> sources) {
347 Set<String> sourceUris = 355 Set<String> sourceUris =
348 sources.map((Source s) => s.uri.toString()).toSet(); 356 sources.map((Source s) => s.uri.toString()).toSet();
349 357
350 LinkedLibrary _getDependency(String absoluteUri) => 358 LinkedLibrary _getDependency(String absoluteUri) =>
351 summaryDataStore.linkedMap[absoluteUri]; 359 summaryDataStore.linkedMap[absoluteUri];
352 360
353 UnlinkedUnit _getUnit(String absoluteUri) {
354 // Maybe an input package contains the source.
355 {
356 UnlinkedUnit unlinkedUnit = summaryDataStore.unlinkedMap[absoluteUri];
357 if (unlinkedUnit != null) {
358 return unlinkedUnit;
359 }
360 }
361 // Parse the source and serialize its AST.
362 Uri uri = Uri.parse(absoluteUri);
363 Source source = context.sourceFactory.forUri2(uri);
364 if (!source.exists()) {
365 // TODO(paulberry): we should report a warning/error because DDC
366 // compilations are unlikely to work.
367 return null;
368 }
369 return uriToUnit.putIfAbsent(uri, () {
370 CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
371 UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
372 assembler.addUnlinkedUnit(source, unlinkedUnit);
373 return unlinkedUnit;
374 });
375 }
376
377 Map<String, LinkedLibraryBuilder> linkResult = link( 361 Map<String, LinkedLibraryBuilder> linkResult = link(
378 sourceUris, 362 sourceUris,
379 _getDependency, 363 _getDependency,
380 _getUnit, 364 _unlinkedUnitForUri,
381 context.declaredVariables.get, 365 context.declaredVariables.get,
382 options.strongMode); 366 options.strongMode);
383 linkResult.forEach(assembler.addLinkedLibrary); 367 linkResult.forEach(assembler.addLinkedLibrary);
384 } 368 }
369
370 /**
371 * Returns the [UnlinkedUnit] for [absoluteUri], either by computing it or
372 * using the stored one in [uriToUnit].
373 *
374 * If the [UnlinkedUnit] needed to be computed, it will also be added to the
jakemac 2017/04/04 16:44:46 I don't really like this behavior, but I don't see
Paul Berry 2017/04/04 18:30:30 Actually what I would prefer is if we just compute
jakemac 2017/04/04 19:21:06 Acknowledged.
375 * [assembler].
376 */
377 UnlinkedUnit _unlinkedUnitForUri(String absoluteUri) {
378 // Maybe an input package contains the source.
379 {
380 UnlinkedUnit unlinkedUnit = summaryDataStore.unlinkedMap[absoluteUri];
381 if (unlinkedUnit != null) {
382 return unlinkedUnit;
383 }
384 }
385 // Parse the source and serialize its AST.
386 Uri uri = Uri.parse(absoluteUri);
387 Source source = context.sourceFactory.forUri2(uri);
388 if (!source.exists()) {
389 // TODO(paulberry): we should report a warning/error because DDC
390 // compilations are unlikely to work.
391 return null;
392 }
393 return uriToUnit.putIfAbsent(uri, () {
394 CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
395 UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
396 assembler.addUnlinkedUnit(source, unlinkedUnit);
397 return unlinkedUnit;
398 });
399 }
385 } 400 }
386 401
387 /** 402 /**
388 * Instances of the class [ExplicitSourceResolver] map URIs to files on disk 403 * Instances of the class [ExplicitSourceResolver] map URIs to files on disk
389 * using a fixed mapping provided at construction time. 404 * using a fixed mapping provided at construction time.
390 */ 405 */
391 class ExplicitSourceResolver extends UriResolver { 406 class ExplicitSourceResolver extends UriResolver {
392 final Map<Uri, File> uriToFileMap; 407 final Map<Uri, File> uriToFileMap;
393 final Map<String, Uri> pathToUriMap; 408 final Map<String, Uri> pathToUriMap;
394 409
(...skipping 25 matching lines...) Expand all
420 * Build the inverse mapping of [uriToSourceMap]. 435 * Build the inverse mapping of [uriToSourceMap].
421 */ 436 */
422 static Map<String, Uri> _computePathToUriMap(Map<Uri, File> uriToSourceMap) { 437 static Map<String, Uri> _computePathToUriMap(Map<Uri, File> uriToSourceMap) {
423 Map<String, Uri> pathToUriMap = <String, Uri>{}; 438 Map<String, Uri> pathToUriMap = <String, Uri>{};
424 uriToSourceMap.forEach((Uri uri, File file) { 439 uriToSourceMap.forEach((Uri uri, File file) {
425 pathToUriMap[file.path] = uri; 440 pathToUriMap[file.path] = uri;
426 }); 441 });
427 return pathToUriMap; 442 return pathToUriMap;
428 } 443 }
429 } 444 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer_cli/lib/src/options.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698