OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:collection'; | 6 import 'dart:collection'; |
7 import 'dart:convert'; | 7 import 'dart:convert'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 _LibraryNode libraryNode = nodes[libraryFile.uri.toString()]; | 441 _LibraryNode libraryNode = nodes[libraryFile.uri.toString()]; |
442 | 442 |
443 Set<String> libraryUrisToLink = new Set<String>(); | 443 Set<String> libraryUrisToLink = new Set<String>(); |
444 int numberOfNodesWithLinked = 0; | 444 int numberOfNodesWithLinked = 0; |
445 _logger.runTimed2(() { | 445 _logger.runTimed2(() { |
446 for (_LibraryNode node in nodes.values) { | 446 for (_LibraryNode node in nodes.values) { |
447 String key = '${node.linkedHash}.linked'; | 447 String key = '${node.linkedHash}.linked'; |
448 List<int> bytes = _byteStore.get(key); | 448 List<int> bytes = _byteStore.get(key); |
449 if (bytes != null) { | 449 if (bytes != null) { |
450 PackageBundle linked = new PackageBundle.fromBuffer(bytes); | 450 PackageBundle linked = new PackageBundle.fromBuffer(bytes); |
451 node.linked = linked; | |
452 store.addBundle(null, linked); | 451 store.addBundle(null, linked); |
453 numberOfNodesWithLinked++; | 452 numberOfNodesWithLinked++; |
454 } else { | 453 } else { |
455 libraryUrisToLink.add(node.uri.toString()); | 454 libraryUrisToLink.add(node.uri.toString()); |
456 } | 455 } |
457 } | 456 } |
458 }, () => 'Loaded $numberOfNodesWithLinked linked bundles'); | 457 }, () => 'Loaded $numberOfNodesWithLinked linked bundles'); |
459 | 458 |
460 Map<String, LinkedLibraryBuilder> linkedLibraries = {}; | 459 Map<String, LinkedLibraryBuilder> linkedLibraries = {}; |
461 _logger.runTimed2(() { | 460 _logger.runTimed2(() { |
(...skipping 15 matching lines...) Expand all Loading... |
477 linkedLibraries.forEach((uri, linkedBuilder) { | 476 linkedLibraries.forEach((uri, linkedBuilder) { |
478 _LibraryNode node = nodes[uri]; | 477 _LibraryNode node = nodes[uri]; |
479 String key = '${node.linkedHash}.linked'; | 478 String key = '${node.linkedHash}.linked'; |
480 List<int> bytes; | 479 List<int> bytes; |
481 { | 480 { |
482 PackageBundleAssembler assembler = new PackageBundleAssembler(); | 481 PackageBundleAssembler assembler = new PackageBundleAssembler(); |
483 assembler.addLinkedLibrary(uri, linkedBuilder); | 482 assembler.addLinkedLibrary(uri, linkedBuilder); |
484 bytes = assembler.assemble().toBuffer(); | 483 bytes = assembler.assemble().toBuffer(); |
485 } | 484 } |
486 PackageBundle linked = new PackageBundle.fromBuffer(bytes); | 485 PackageBundle linked = new PackageBundle.fromBuffer(bytes); |
487 node.linked = linked; | |
488 store.addBundle(null, linked); | 486 store.addBundle(null, linked); |
489 _byteStore.put(key, bytes); | 487 _byteStore.put(key, bytes); |
490 }); | 488 }); |
491 | 489 |
492 return new LibraryContext(libraryFile, libraryNode, store); | 490 return new LibraryContext(libraryFile, libraryNode, store); |
493 }); | 491 }); |
494 } | 492 } |
495 | 493 |
496 /** | 494 /** |
497 * Return the [_File] for the given [path] in [_sourceFactory]. | 495 * Return the [_File] for the given [path] in [_sourceFactory]. |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 class _LibraryNode { | 849 class _LibraryNode { |
852 final AnalysisDriver driver; | 850 final AnalysisDriver driver; |
853 final Map<String, _LibraryNode> nodes; | 851 final Map<String, _LibraryNode> nodes; |
854 final Uri uri; | 852 final Uri uri; |
855 final List<PackageBundle> unlinkedBundles = <PackageBundle>[]; | 853 final List<PackageBundle> unlinkedBundles = <PackageBundle>[]; |
856 | 854 |
857 Set<_LibraryNode> transitiveDependencies; | 855 Set<_LibraryNode> transitiveDependencies; |
858 List<_LibraryNode> _dependencies; | 856 List<_LibraryNode> _dependencies; |
859 String _linkedHash; | 857 String _linkedHash; |
860 | 858 |
861 List<int> linkedNewBytes; | |
862 PackageBundle linked; | |
863 | |
864 _LibraryNode(this.driver, this.nodes, this.uri); | 859 _LibraryNode(this.driver, this.nodes, this.uri); |
865 | 860 |
866 /** | 861 /** |
867 * Retrieve the dependencies of this node. | 862 * Retrieve the dependencies of this node. |
868 */ | 863 */ |
869 List<_LibraryNode> get dependencies { | 864 List<_LibraryNode> get dependencies { |
870 if (_dependencies == null) { | 865 if (_dependencies == null) { |
871 Set<_LibraryNode> dependencies = new Set<_LibraryNode>(); | 866 Set<_LibraryNode> dependencies = new Set<_LibraryNode>(); |
872 | 867 |
873 void appendDependency(String uriStr) { | 868 void appendDependency(String uriStr) { |
(...skipping 28 matching lines...) Expand all Loading... |
902 } | 897 } |
903 | 898 |
904 _dependencies = dependencies.toList(); | 899 _dependencies = dependencies.toList(); |
905 } | 900 } |
906 return _dependencies; | 901 return _dependencies; |
907 } | 902 } |
908 | 903 |
909 @override | 904 @override |
910 int get hashCode => uri.hashCode; | 905 int get hashCode => uri.hashCode; |
911 | 906 |
912 bool get isReady => linked != null; | |
913 | |
914 String get linkedHash { | 907 String get linkedHash { |
915 _linkedHash ??= driver._linkedHashMap.putIfAbsent(uri, () { | 908 _linkedHash ??= driver._linkedHashMap.putIfAbsent(uri, () { |
916 computeTransitiveDependencies(); | 909 computeTransitiveDependencies(); |
917 | 910 |
918 // Add all unlinked API signatures. | 911 // Add all unlinked API signatures. |
919 List<String> signatures = <String>[]; | 912 List<String> signatures = <String>[]; |
920 signatures.add(driver._sdkBundle.apiSignature); | 913 signatures.add(driver._sdkBundle.apiSignature); |
921 transitiveDependencies | 914 transitiveDependencies |
922 .map((node) => node.unlinkedBundles) | 915 .map((node) => node.unlinkedBundles) |
923 .expand((bundles) => bundles) | 916 .expand((bundles) => bundles) |
(...skipping 24 matching lines...) Expand all Loading... |
948 } | 941 } |
949 } | 942 } |
950 | 943 |
951 appendDependencies(this); | 944 appendDependencies(this); |
952 } | 945 } |
953 } | 946 } |
954 | 947 |
955 @override | 948 @override |
956 String toString() => uri.toString(); | 949 String toString() => uri.toString(); |
957 } | 950 } |
OLD | NEW |