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

Side by Side Diff: pkg/analyzer/lib/src/summary/bazel_summary.dart

Issue 2383233002: Cache Uri to Package and Package to node mappings. (Closed)
Patch Set: Created 4 years, 2 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 | no next file » | 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) 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:convert'; 5 import 'dart:convert';
6 6
7 import 'package:analyzer/file_system/file_system.dart'; 7 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/src/generated/engine.dart'; 8 import 'package:analyzer/src/generated/engine.dart';
9 import 'package:analyzer/src/generated/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/generated/utilities_collection.dart'; 10 import 'package:analyzer/src/generated/utilities_collection.dart';
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 final PackageBundle sdkBundle; 103 final PackageBundle sdkBundle;
104 104
105 /** 105 /**
106 * Mapping from bundle paths to corresponding [Package]s. The packages in 106 * Mapping from bundle paths to corresponding [Package]s. The packages in
107 * the map were consistent with their constituent sources at the moment when 107 * the map were consistent with their constituent sources at the moment when
108 * they were put into the map. 108 * they were put into the map.
109 */ 109 */
110 final Map<Folder, List<Package>> folderToPackagesMap = {}; 110 final Map<Folder, List<Package>> folderToPackagesMap = {};
111 111
112 /** 112 /**
113 * Mapping from [Uri]s to corresponding [_LinkNode]s. 113 * Mapping from [Uri]s to corresponding [Package]s.
114 */ 114 */
115 final Map<Uri, _LinkNode> uriToNodeMap = {}; 115 final Map<Uri, Package> uriToPackageMap = {};
116
117 /**
118 * Mapping from [Package]s to corresponding [_LinkNode]s.
119 */
120 final Map<Package, _LinkNode> packageToNodeMap = {};
116 121
117 SummaryProvider(this.provider, this.getOutputFolder, AnalysisContext context) 122 SummaryProvider(this.provider, this.getOutputFolder, AnalysisContext context)
118 : context = context, 123 : context = context,
119 sdkBundle = context.sourceFactory.dartSdk?.getLinkedBundle(); 124 sdkBundle = context.sourceFactory.dartSdk?.getLinkedBundle();
120 125
121 /** 126 /**
122 * Return the complete list of [Package]s that are required to provide all 127 * Return the complete list of [Package]s that are required to provide all
123 * resolution results for the given [source]. 128 * resolution results for the given [source].
124 * 129 *
125 * The same list of packages is returned for the same [Source], i.e. always 130 * The same list of packages is returned for the same [Source], i.e. always
(...skipping 29 matching lines...) Expand all
155 .where((package) => package.linked != null) 160 .where((package) => package.linked != null)
156 .toList(); 161 .toList();
157 } 162 }
158 163
159 /** 164 /**
160 * Return the [Package] that contains information about the source with 165 * Return the [Package] that contains information about the source with
161 * the given [uri], or `null` if such package does not exist. 166 * the given [uri], or `null` if such package does not exist.
162 */ 167 */
163 @visibleForTesting 168 @visibleForTesting
164 Package getUnlinkedForUri(Uri uri) { 169 Package getUnlinkedForUri(Uri uri) {
165 Folder outputFolder = getOutputFolder(uri); 170 return uriToPackageMap.putIfAbsent(uri, () {
166 if (outputFolder != null) { 171 Folder outputFolder = getOutputFolder(uri);
167 String uriStr = uri.toString(); 172 if (outputFolder != null) {
168 List<Package> packages = _getUnlinkedPackages(outputFolder); 173 String uriStr = uri.toString();
169 for (Package package in packages) { 174 List<Package> packages = _getUnlinkedPackages(outputFolder);
170 if (package._unitUris.contains(uriStr)) { 175 for (Package package in packages) {
171 return package; 176 if (package._unitUris.contains(uriStr)) {
177 return package;
178 }
172 } 179 }
173 } 180 }
174 } 181 return null;
175 return null; 182 });
176 } 183 }
177 184
178 /** 185 /**
179 * Return the hexadecimal string of the MD5 hash of the contents of the 186 * Return the hexadecimal string of the MD5 hash of the contents of the
180 * given [source] in [context]. 187 * given [source] in [context].
181 */ 188 */
182 String _computeSourceHashHex(Source source) { 189 String _computeSourceHashHex(Source source) {
183 String text = context.getContents(source).data; 190 String text = context.getContents(source).data;
184 List<int> bytes = UTF8.encode(text); 191 List<int> bytes = UTF8.encode(text);
185 List<int> hashBytes = md5.convert(bytes).bytes; 192 List<int> hashBytes = md5.convert(bytes).bytes;
186 return hex.encode(hashBytes); 193 return hex.encode(hashBytes);
187 } 194 }
188 195
189 /** 196 /**
190 * Return the node for the given [uri], or `null` if there is no unlinked 197 * Return the node for the given [uri], or `null` if there is no unlinked
191 * bundle that contains [uri]. 198 * bundle that contains [uri].
192 */ 199 */
193 _LinkNode _getLinkNodeForUri(Uri uri) { 200 _LinkNode _getLinkNodeForUri(Uri uri) {
194 return uriToNodeMap.putIfAbsent(uri, () { 201 Package package = getUnlinkedForUri(uri);
195 Package package = getUnlinkedForUri(uri); 202 return packageToNodeMap.putIfAbsent(package, () {
196 if (package == null) { 203 if (package == null) {
197 return null; 204 return null;
198 } 205 }
199 return new _LinkNode(this, package); 206 return new _LinkNode(this, package);
200 }); 207 });
201 } 208 }
202 209
203 /** 210 /**
204 * Return all consistent unlinked [Package]s in the given [folder]. Some of 211 * Return all consistent unlinked [Package]s in the given [folder]. Some of
205 * the returned packages might be already linked. 212 * the returned packages might be already linked.
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 appendDependencies(this); 409 appendDependencies(this);
403 if (transitiveDependencies.any((node) => node.failed)) { 410 if (transitiveDependencies.any((node) => node.failed)) {
404 failed = true; 411 failed = true;
405 } 412 }
406 } 413 }
407 } 414 }
408 415
409 @override 416 @override
410 String toString() => package.toString(); 417 String toString() => package.toString();
411 } 418 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698