| 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 |