Skip to content

Commit 6a25cd2

Browse files
authored
Prepare tool_runner/definition for migration to NNBD (#2784)
* Prepare tool_runner/definition for migration to NNBD * Fix up test failures
1 parent bade04b commit 6a25cd2

File tree

4 files changed

+26
-19
lines changed

4 files changed

+26
-19
lines changed

lib/dartdoc.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import 'package:dartdoc/src/logging.dart';
2323
import 'package:dartdoc/src/matching_link_result.dart';
2424
import 'package:dartdoc/src/model/model.dart';
2525
import 'package:dartdoc/src/package_meta.dart';
26-
import 'package:dartdoc/src/tool_definition.dart';
27-
import 'package:dartdoc/src/tool_runner.dart';
2826
import 'package:dartdoc/src/tuple.dart';
2927
import 'package:dartdoc/src/utils.dart';
3028
import 'package:dartdoc/src/version.dart';
@@ -194,12 +192,15 @@ class Dartdoc {
194192

195193
Stream<String> get onCheckProgress => _onCheckProgress.stream;
196194

195+
@Deprecated('Will be removed in 4.0.0. '
196+
'Use the return value from generateDocsBase instead.')
197197
PackageGraph packageGraph;
198198

199199
@visibleForTesting
200200
Future<DartdocResults> generateDocsBase() async {
201201
var stopwatch = Stopwatch()..start();
202-
packageGraph = await packageBuilder.buildPackageGraph();
202+
var packageGraph = await packageBuilder.buildPackageGraph();
203+
this.packageGraph = packageGraph;
203204
var seconds = stopwatch.elapsedMilliseconds / 1000.0;
204205
var libs = packageGraph.libraries.length;
205206
logInfo("Initialized dartdoc with $libs librar${libs == 1 ? 'y' : 'ies'} "
@@ -243,10 +244,11 @@ class Dartdoc {
243244
/// thrown if dartdoc fails in an expected way, for example if there is an
244245
/// analysis error in the code.
245246
Future<DartdocResults> generateDocs() async {
247+
DartdocResults dartdocResults;
246248
try {
247249
logInfo('Documenting ${config.topLevelPackageMeta}...');
248250

249-
var dartdocResults = await generateDocsBase();
251+
dartdocResults = await generateDocsBase();
250252
if (dartdocResults.packageGraph.localPublicLibraries.isEmpty) {
251253
logWarning('dartdoc could not find any libraries to document');
252254
}
@@ -261,10 +263,7 @@ class Dartdoc {
261263
logInfo('Success! Docs generated into $outDirPath');
262264
return dartdocResults;
263265
} finally {
264-
// Clear out any cached tool snapshots and temporary directories.
265-
SnapshotCache.instanceFor(config.resourceProvider).dispose();
266-
// ignore: unawaited_futures
267-
ToolTempFileTracker.instance?.dispose();
266+
dartdocResults?.packageGraph?.dispose();
268267
}
269268
}
270269

lib/src/model/package_graph.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import 'package:dartdoc/src/package_meta.dart'
2020
show PackageMeta, PackageMetaProvider;
2121
import 'package:dartdoc/src/render/renderer_factory.dart';
2222
import 'package:dartdoc/src/special_elements.dart';
23+
import 'package:dartdoc/src/tool_definition.dart';
24+
import 'package:dartdoc/src/tool_runner.dart';
2325
import 'package:dartdoc/src/tuple.dart';
2426
import 'package:dartdoc/src/warnings.dart';
2527

@@ -37,6 +39,14 @@ class PackageGraph with CommentReferable, Nameable {
3739
Package.fromPackageMeta(packageMeta, this);
3840
}
3941

42+
void dispose() {
43+
// Clear out any cached tool snapshots and temporary directories.
44+
// TODO(jcollins-g): Consider ownership change for these objects
45+
// so they are tied to PackageGraph instead of being global.
46+
SnapshotCache.instanceFor(config.resourceProvider).dispose();
47+
ToolTempFileTracker.instanceFor(config.resourceProvider).dispose();
48+
}
49+
4050
@override
4151
String get name => null;
4252

lib/src/tool_definition.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ class SnapshotCache {
247247
void dispose() {
248248
_instances.remove(_resourceProvider);
249249
if (snapshotCache != null && snapshotCache.exists) {
250-
return snapshotCache.delete();
250+
snapshotCache.delete();
251251
}
252252
return null;
253253
}

lib/src/tool_runner.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@ class ToolTempFileTracker {
2525
: temporaryDirectory =
2626
resourceProvider.createSystemTemp('dartdoc_tools_');
2727

28-
static ToolTempFileTracker _instance;
28+
static final Map<ResourceProvider, ToolTempFileTracker> _instances = {};
2929

30-
static ToolTempFileTracker get instance => _instance;
31-
32-
static ToolTempFileTracker createInstance(
33-
ResourceProvider resourceProvider) =>
34-
_instance ??= ToolTempFileTracker._(resourceProvider);
30+
static ToolTempFileTracker instanceFor(ResourceProvider resourceProvider) =>
31+
_instances.putIfAbsent(
32+
resourceProvider, () => ToolTempFileTracker._(resourceProvider));
3533

3634
int _temporaryFileCount = 0;
3735

@@ -46,9 +44,9 @@ class ToolTempFileTracker {
4644
}
4745

4846
/// Call once no more files are to be created.
49-
Future<void> dispose() async {
47+
void dispose() {
5048
if (temporaryDirectory.exists) {
51-
return temporaryDirectory.delete();
49+
temporaryDirectory.delete();
5250
}
5351
}
5452
}
@@ -219,8 +217,8 @@ class ToolRunner {
219217
// file before running the tool synchronously.
220218

221219
// Write the content to a temp file.
222-
var tmpFile = ToolTempFileTracker.createInstance(resourceProvider)
223-
.createTemporaryFile();
220+
var tmpFile =
221+
ToolTempFileTracker.instanceFor(resourceProvider).createTemporaryFile();
224222
tmpFile.writeAsStringSync(content);
225223
return pathContext.absolute(tmpFile.path);
226224
}

0 commit comments

Comments
 (0)