Skip to content

Commit b776fd7

Browse files
authored
Display null safety tag only on migrated packages (#2411)
* Pass correct packages information to AnalysisDriver * add test * comments and cleanup
1 parent 4f63711 commit b776fd7

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

lib/src/model/package_builder.dart

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@ import 'package:analyzer/src/generated/source_io.dart';
2121
import 'package:analyzer/src/source/package_map_resolver.dart';
2222
import 'package:dartdoc/src/dartdoc_options.dart';
2323
import 'package:dartdoc/src/logging.dart';
24-
import 'package:dartdoc/src/model/model.dart';
24+
import 'package:dartdoc/src/model/model.dart' hide Package;
2525
import 'package:dartdoc/src/quiver.dart' as quiver;
2626
import 'package:dartdoc/src/package_config_provider.dart';
2727
import 'package:dartdoc/src/package_meta.dart'
2828
show PackageMeta, PackageMetaProvider;
2929
import 'package:dartdoc/src/render/renderer_factory.dart';
3030
import 'package:dartdoc/src/special_elements.dart';
3131
import 'package:meta/meta.dart';
32+
// TODO(jcollins-g): do not directly import path, use ResourceProvider instead
3233
import 'package:path/path.dart' as path;
34+
import 'package:pub_semver/pub_semver.dart';
3335

3436
/// Everything you need to instantiate a PackageGraph object for documenting.
3537
abstract class PackageBuilder {
@@ -98,6 +100,8 @@ class PubPackageBuilder implements PackageBuilder {
98100

99101
ResourceProvider get resourceProvider => packageMetaProvider.resourceProvider;
100102

103+
/* late final */ Packages packages;
104+
101105
Future<void> _calculatePackageMap() async {
102106
assert(_packageMap == null);
103107
_packageMap = <String, List<Folder>>{};
@@ -106,8 +110,27 @@ class PubPackageBuilder implements PackageBuilder {
106110
.findPackageConfig(resourceProvider.getFolder(cwd.path));
107111
if (info == null) return;
108112

113+
var rpc = resourceProvider.pathContext;
114+
// This complicated expression transforms a list of [package_config.Package]
115+
// into [analyzer.Packages]. It's a bit confusing because [info.packages]
116+
// is actually the list of [package_config.Package] objects, rather than
117+
// the [Packages] object we need.
118+
packages = Packages(Map.fromEntries(info.packages.map((p) => MapEntry<
119+
String, Package>(
120+
p.name,
121+
Package(
122+
name: p.name,
123+
rootFolder:
124+
resourceProvider.getFolder(rpc.normalize(rpc.fromUri(p.root))),
125+
languageVersion: p.languageVersion != null
126+
? Version(p.languageVersion.major, p.languageVersion.minor, 0)
127+
: null,
128+
libFolder: resourceProvider.getFolder(
129+
rpc.normalize(rpc.fromUri(p.packageUriRoot)),
130+
))))));
131+
109132
for (var package in info.packages) {
110-
var packagePath = path.normalize(path.fromUri(package.packageUriRoot));
133+
var packagePath = rpc.normalize(rpc.fromUri(package.packageUriRoot));
111134
var resource = resourceProvider.getResource(packagePath);
112135
if (resource is Folder) {
113136
_packageMap[package.name] = [resource];
@@ -154,7 +177,6 @@ class PubPackageBuilder implements PackageBuilder {
154177
}
155178

156179
AnalysisDriver _driver;
157-
158180
AnalysisDriver get driver {
159181
if (_driver == null) {
160182
var log = PerformanceLog(null);
@@ -163,13 +185,11 @@ class PubPackageBuilder implements PackageBuilder {
163185
..hint = false
164186
// TODO(jcollins-g): pass in an ExperimentStatus instead?
165187
..contextFeatures = FeatureSet.fromEnableFlags(config.enableExperiment);
166-
167-
// TODO(jcollins-g): Make use of currently not existing API for managing
168-
// many AnalysisDrivers
188+
// TODO(jcollins-g): make use of AnalysisContextCollection()
169189
// TODO(jcollins-g): make use of DartProject isApi()
170190
_driver = AnalysisDriver(scheduler, log, resourceProvider,
171191
MemoryByteStore(), FileContentOverlay(), null, sourceFactory, options,
172-
packages: Packages.empty);
192+
packages: packages);
173193
driver.results.listen((_) => logProgress(''));
174194
driver.exceptions.listen((_) {});
175195
scheduler.start();

test/end2end/model_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,10 @@ void main() {
491491
expect(exLibrary.name, 'ex');
492492
});
493493

494+
test('does not have a null safety label if not null safe', () {
495+
expect(exLibrary.isNullSafety, isFalse);
496+
});
497+
494498
test('has a line number and column', () {
495499
expect(exLibrary.characterLocation, isNotNull);
496500
});

0 commit comments

Comments
 (0)