| OLD | NEW |
| 1 import 'dart:io' as io; | 1 import 'dart:io' as io; |
| 2 import 'dart:math' show min; | 2 import 'dart:math' show min; |
| 3 | 3 |
| 4 import 'package:analyzer/dart/element/element.dart'; | 4 import 'package:analyzer/dart/element/element.dart'; |
| 5 import 'package:analyzer/file_system/file_system.dart'; | 5 import 'package:analyzer/file_system/file_system.dart'; |
| 6 import 'package:analyzer/src/context/cache.dart'; | 6 import 'package:analyzer/src/context/cache.dart'; |
| 7 import 'package:analyzer/src/context/context.dart'; | 7 import 'package:analyzer/src/context/context.dart'; |
| 8 import 'package:analyzer/src/dart/element/element.dart'; | 8 import 'package:analyzer/src/dart/element/element.dart'; |
| 9 import 'package:analyzer/src/generated/engine.dart'; | 9 import 'package:analyzer/src/generated/engine.dart'; |
| 10 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; | 10 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider; |
| 11 import 'package:analyzer/src/generated/source.dart'; | 11 import 'package:analyzer/src/generated/source.dart'; |
| 12 import 'package:analyzer/src/generated/source_io.dart'; | 12 import 'package:analyzer/src/generated/source_io.dart'; |
| 13 import 'package:analyzer/src/generated/utilities_dart.dart'; | 13 import 'package:analyzer/src/generated/utilities_dart.dart'; |
| 14 import 'package:analyzer/src/summary/format.dart'; | |
| 15 import 'package:analyzer/src/summary/idl.dart'; | 14 import 'package:analyzer/src/summary/idl.dart'; |
| 16 import 'package:analyzer/src/summary/resynthesize.dart'; | 15 import 'package:analyzer/src/summary/resynthesize.dart'; |
| 17 import 'package:analyzer/src/task/dart.dart'; | 16 import 'package:analyzer/src/task/dart.dart'; |
| 18 import 'package:analyzer/task/dart.dart'; | 17 import 'package:analyzer/task/dart.dart'; |
| 19 import 'package:analyzer/task/general.dart'; | 18 import 'package:analyzer/task/general.dart'; |
| 20 import 'package:analyzer/task/model.dart'; | 19 import 'package:analyzer/task/model.dart'; |
| 21 import 'package:front_end/src/base/source.dart'; | 20 import 'package:front_end/src/base/source.dart'; |
| 22 | 21 |
| 23 /** | 22 /** |
| 24 * A [ConflictingSummaryException] indicates that two different summaries | 23 * A [ConflictingSummaryException] indicates that two different summaries |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 * summary package bundles. It contains maps which can be used to find linked | 361 * summary package bundles. It contains maps which can be used to find linked |
| 363 * and unlinked summaries by URI. | 362 * and unlinked summaries by URI. |
| 364 */ | 363 */ |
| 365 class SummaryDataStore { | 364 class SummaryDataStore { |
| 366 /** | 365 /** |
| 367 * List of all [PackageBundle]s. | 366 * List of all [PackageBundle]s. |
| 368 */ | 367 */ |
| 369 final List<PackageBundle> bundles = <PackageBundle>[]; | 368 final List<PackageBundle> bundles = <PackageBundle>[]; |
| 370 | 369 |
| 371 /** | 370 /** |
| 372 * List of dependency information for the package bundles in this | |
| 373 * [SummaryDataStore], in a form that is ready to store in a newly generated | |
| 374 * summary. Computing this information has nonzero cost, so it is only | |
| 375 * recorded if the [SummaryDataStore] is constructed with the argument | |
| 376 * `recordDependencies`. Otherwise `null`. | |
| 377 */ | |
| 378 final List<PackageDependencyInfoBuilder> dependencies; | |
| 379 | |
| 380 /** | |
| 381 * Map from the URI of a compilation unit to the unlinked summary of that | 371 * Map from the URI of a compilation unit to the unlinked summary of that |
| 382 * compilation unit. | 372 * compilation unit. |
| 383 */ | 373 */ |
| 384 final Map<String, UnlinkedUnit> unlinkedMap = <String, UnlinkedUnit>{}; | 374 final Map<String, UnlinkedUnit> unlinkedMap = <String, UnlinkedUnit>{}; |
| 385 | 375 |
| 386 /** | 376 /** |
| 387 * Map from the URI of a library to the linked summary of that library. | 377 * Map from the URI of a library to the linked summary of that library. |
| 388 */ | 378 */ |
| 389 final Map<String, LinkedLibrary> linkedMap = <String, LinkedLibrary>{}; | 379 final Map<String, LinkedLibrary> linkedMap = <String, LinkedLibrary>{}; |
| 390 | 380 |
| 391 /** | 381 /** |
| 392 * Map from the URI of a library to the summary path that contained it. | 382 * Map from the URI of a library to the summary path that contained it. |
| 393 */ | 383 */ |
| 394 final Map<String, String> uriToSummaryPath = <String, String>{}; | 384 final Map<String, String> uriToSummaryPath = <String, String>{}; |
| 395 | 385 |
| 396 /** | 386 /** |
| 397 * List of summary paths. | 387 * List of summary paths. |
| 398 */ | 388 */ |
| 399 final Iterable<String> _summaryPaths; | 389 final Iterable<String> _summaryPaths; |
| 400 | 390 |
| 401 /** | 391 /** |
| 402 * If true, do not accept multiple summaries that contain the same Dart uri. | 392 * If true, do not accept multiple summaries that contain the same Dart uri. |
| 403 */ | 393 */ |
| 404 bool _disallowOverlappingSummaries; | 394 bool _disallowOverlappingSummaries; |
| 405 | 395 |
| 406 /** | 396 /** |
| 407 * Create a [SummaryDataStore] and populate it with the summaries in | 397 * Create a [SummaryDataStore] and populate it with the summaries in |
| 408 * [summaryPaths]. If [recordDependencyInfo] is `true`, record | 398 * [summaryPaths]. |
| 409 * [PackageDependencyInfo] for each summary, for later access via | |
| 410 * [dependencies]. | |
| 411 */ | 399 */ |
| 412 SummaryDataStore(Iterable<String> summaryPaths, | 400 SummaryDataStore(Iterable<String> summaryPaths, |
| 413 {bool recordDependencyInfo: false, | 401 {bool disallowOverlappingSummaries: false, |
| 414 bool disallowOverlappingSummaries: false, | |
| 415 ResourceProvider resourceProvider}) | 402 ResourceProvider resourceProvider}) |
| 416 : _summaryPaths = summaryPaths, | 403 : _summaryPaths = summaryPaths, |
| 417 _disallowOverlappingSummaries = disallowOverlappingSummaries, | 404 _disallowOverlappingSummaries = disallowOverlappingSummaries { |
| 418 dependencies = | |
| 419 recordDependencyInfo ? <PackageDependencyInfoBuilder>[] : null { | |
| 420 summaryPaths.forEach((String path) => _fillMaps(path, resourceProvider)); | 405 summaryPaths.forEach((String path) => _fillMaps(path, resourceProvider)); |
| 421 } | 406 } |
| 422 | 407 |
| 423 /** | 408 /** |
| 424 * Add the given [bundle] loaded from the file with the given [path]. | 409 * Add the given [bundle] loaded from the file with the given [path]. |
| 425 */ | 410 */ |
| 426 void addBundle(String path, PackageBundle bundle) { | 411 void addBundle(String path, PackageBundle bundle) { |
| 427 bundles.add(bundle); | 412 bundles.add(bundle); |
| 428 if (dependencies != null) { | |
| 429 Set<String> includedPackageNames = new Set<String>(); | |
| 430 bool includesDartUris = false; | |
| 431 bool includesFileUris = false; | |
| 432 for (String uriString in bundle.unlinkedUnitUris) { | |
| 433 Uri uri = Uri.parse(uriString); | |
| 434 String scheme = uri.scheme; | |
| 435 if (scheme == 'package') { | |
| 436 List<String> pathSegments = uri.pathSegments; | |
| 437 includedPackageNames.add(pathSegments.isEmpty ? '' : pathSegments[0]); | |
| 438 } else if (scheme == 'file') { | |
| 439 includesFileUris = true; | |
| 440 } else if (scheme == 'dart') { | |
| 441 includesDartUris = true; | |
| 442 } | |
| 443 } | |
| 444 dependencies.add(new PackageDependencyInfoBuilder( | |
| 445 includedPackageNames: includedPackageNames.toList()..sort(), | |
| 446 includesDartUris: includesDartUris, | |
| 447 includesFileUris: includesFileUris, | |
| 448 apiSignature: bundle.apiSignature, | |
| 449 summaryPath: path)); | |
| 450 } | |
| 451 for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) { | 413 for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) { |
| 452 String uri = bundle.unlinkedUnitUris[i]; | 414 String uri = bundle.unlinkedUnitUris[i]; |
| 453 if (_disallowOverlappingSummaries && | 415 if (_disallowOverlappingSummaries && |
| 454 uriToSummaryPath.containsKey(uri) && | 416 uriToSummaryPath.containsKey(uri) && |
| 455 (uriToSummaryPath[uri] != path)) { | 417 (uriToSummaryPath[uri] != path)) { |
| 456 throw new ConflictingSummaryException( | 418 throw new ConflictingSummaryException( |
| 457 _summaryPaths, uri, uriToSummaryPath[uri], path); | 419 _summaryPaths, uri, uriToSummaryPath[uri], path); |
| 458 } | 420 } |
| 459 uriToSummaryPath[uri] = path; | 421 uriToSummaryPath[uri] = path; |
| 460 addUnlinkedUnit(uri, bundle.unlinkedUnits[i]); | 422 addUnlinkedUnit(uri, bundle.unlinkedUnits[i]); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 var file = resourceProvider.getFile(path); | 488 var file = resourceProvider.getFile(path); |
| 527 buffer = file.readAsBytesSync(); | 489 buffer = file.readAsBytesSync(); |
| 528 } else { | 490 } else { |
| 529 io.File file = new io.File(path); | 491 io.File file = new io.File(path); |
| 530 buffer = file.readAsBytesSync(); | 492 buffer = file.readAsBytesSync(); |
| 531 } | 493 } |
| 532 PackageBundle bundle = new PackageBundle.fromBuffer(buffer); | 494 PackageBundle bundle = new PackageBundle.fromBuffer(buffer); |
| 533 addBundle(path, bundle); | 495 addBundle(path, bundle); |
| 534 } | 496 } |
| 535 } | 497 } |
| OLD | NEW |