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

Side by Side Diff: lib/src/package_graph.dart

Issue 2184303002: Make pub strong-mode clean. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 4 years, 4 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 | « lib/src/package.dart ('k') | lib/src/pubspec.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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 'package:collection/collection.dart';
6
5 import 'barback/transformer_cache.dart'; 7 import 'barback/transformer_cache.dart';
6 import 'entrypoint.dart'; 8 import 'entrypoint.dart';
7 import 'lock_file.dart'; 9 import 'lock_file.dart';
8 import 'package.dart'; 10 import 'package.dart';
9 import 'solver/version_solver.dart'; 11 import 'solver/version_solver.dart';
10 import 'source/cached.dart'; 12 import 'source/cached.dart';
11 import 'utils.dart';
12 13
13 /// A holistic view of the entire transitive dependency graph for an entrypoint. 14 /// A holistic view of the entire transitive dependency graph for an entrypoint.
14 class PackageGraph { 15 class PackageGraph {
15 /// The entrypoint. 16 /// The entrypoint.
16 final Entrypoint entrypoint; 17 final Entrypoint entrypoint;
17 18
18 /// The entrypoint's lockfile. 19 /// The entrypoint's lockfile.
19 /// 20 ///
20 /// This describes the sources and resolved descriptions of everything in 21 /// This describes the sources and resolved descriptions of everything in
21 /// [packages]. 22 /// [packages].
(...skipping 13 matching lines...) Expand all
35 TransformerCache _transformerCache; 36 TransformerCache _transformerCache;
36 37
37 PackageGraph(this.entrypoint, this.lockFile, this.packages); 38 PackageGraph(this.entrypoint, this.lockFile, this.packages);
38 39
39 /// Creates a package graph using the data from [result]. 40 /// Creates a package graph using the data from [result].
40 /// 41 ///
41 /// This is generally faster than loading a package graph from scratch, since 42 /// This is generally faster than loading a package graph from scratch, since
42 /// the packages' pubspecs are already fully-parsed. 43 /// the packages' pubspecs are already fully-parsed.
43 factory PackageGraph.fromSolveResult(Entrypoint entrypoint, 44 factory PackageGraph.fromSolveResult(Entrypoint entrypoint,
44 SolveResult result) { 45 SolveResult result) {
45 var packages = new Map.fromIterable(result.packages, 46 var packages = new Map<String, Package>.fromIterable(result.packages,
46 key: (id) => id.name, 47 key: (id) => id.name,
47 value: (id) { 48 value: (id) {
48 if (id.name == entrypoint.root.name) return entrypoint.root; 49 if (id.name == entrypoint.root.name) return entrypoint.root;
49 50
50 return new Package(result.pubspecs[id.name], 51 return new Package(result.pubspecs[id.name],
51 entrypoint.cache.source(id.source).getDirectory(id)); 52 entrypoint.cache.source(id.source).getDirectory(id));
52 }); 53 });
53 54
54 return new PackageGraph(entrypoint, result.lockFile, packages); 55 return new PackageGraph(entrypoint, result.lockFile, packages);
55 } 56 }
(...skipping 15 matching lines...) Expand all
71 72
72 /// Returns all transitive dependencies of [package]. 73 /// Returns all transitive dependencies of [package].
73 /// 74 ///
74 /// For the entrypoint this returns all packages in [packages], which includes 75 /// For the entrypoint this returns all packages in [packages], which includes
75 /// dev and override. For any other package, it ignores dev and override 76 /// dev and override. For any other package, it ignores dev and override
76 /// dependencies. 77 /// dependencies.
77 Set<Package> transitiveDependencies(String package) { 78 Set<Package> transitiveDependencies(String package) {
78 if (package == entrypoint.root.name) return packages.values.toSet(); 79 if (package == entrypoint.root.name) return packages.values.toSet();
79 80
80 if (_transitiveDependencies == null) { 81 if (_transitiveDependencies == null) {
81 var closure = transitiveClosure(mapMap(packages, 82 var closure = transitiveClosure(
82 value: (_, package) => package.dependencies.map((dep) => dep.name))); 83 mapMap/*<String, Package, String, Iterable<String>>*/(
83 _transitiveDependencies = mapMap(closure, 84 packages,
84 value: (_, names) => names.map((name) => packages[name]).toSet()); 85 value: (_, package) =>
86 package.dependencies.map((dep) => dep.name)));
87 _transitiveDependencies =
88 mapMap/*<String, Set<String>, String, Set<Package>>*/(
89 closure,
90 value: (depender, names) {
91 var set = names.map((name) => packages[name]).toSet();
92 set.add(packages[depender]);
93 return set;
94 });
85 } 95 }
86 96
87 return _transitiveDependencies[package]; 97 return _transitiveDependencies[package];
88 } 98 }
89 99
90 /// Returns whether [package], or any of its transitive dependencies, have 100 /// Returns whether [package], or any of its transitive dependencies, have
91 /// transformers that run on any of their public assets. 101 /// transformers that run on any of their public assets.
92 /// 102 ///
93 /// This is pessimistic; if any package can't be determined to be transformed, 103 /// This is pessimistic; if any package can't be determined to be transformed,
94 /// this returns `true`. 104 /// this returns `true`.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 /// 156 ///
147 /// Note that a static package isn't the same as an immutable package (see 157 /// Note that a static package isn't the same as an immutable package (see
148 /// [isPackageMutable]). 158 /// [isPackageMutable]).
149 bool isPackageStatic(String package) { 159 bool isPackageStatic(String package) {
150 var id = lockFile.packages[package]; 160 var id = lockFile.packages[package];
151 if (id == null) return false; 161 if (id == null) return false;
152 if (entrypoint.cache.source(id.source) is! CachedSource) return false; 162 if (entrypoint.cache.source(id.source) is! CachedSource) return false;
153 return packages[package].pubspec.transformers.isEmpty; 163 return packages[package].pubspec.transformers.isEmpty;
154 } 164 }
155 } 165 }
OLDNEW
« no previous file with comments | « lib/src/package.dart ('k') | lib/src/pubspec.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698