Allow the analytics instance to be created later (#3179)
diff --git a/lib/src/pub_embeddable_command.dart b/lib/src/pub_embeddable_command.dart index 0403d17..c1fa863 100644 --- a/lib/src/pub_embeddable_command.dart +++ b/lib/src/pub_embeddable_command.dart
@@ -31,9 +31,15 @@ class PubAnalytics { /// Name of the custom dimension of the dependency kind. final String dependencyKindCustomDimensionName; - final Analytics analytics; - PubAnalytics(this.analytics, - {required this.dependencyKindCustomDimensionName}); + + final Analytics? Function() _analyticsGetter; + + Analytics? get analytics => _analyticsGetter(); + + PubAnalytics( + this._analyticsGetter, { + required this.dependencyKindCustomDimensionName, + }); } /// Exposes the `pub` commands as a command to be embedded in another command
diff --git a/lib/src/solver/result.dart b/lib/src/solver/result.dart index ee5cdc8..8d4e891 100644 --- a/lib/src/solver/result.dart +++ b/lib/src/solver/result.dart
@@ -129,8 +129,10 @@ } /// Send analytics about the package resolution. - void sendAnalytics(PubAnalytics analytics) { - ArgumentError.checkNotNull(analytics); + void sendAnalytics(PubAnalytics pubAnalytics) { + ArgumentError.checkNotNull(pubAnalytics); + final analytics = pubAnalytics.analytics; + if (analytics == null) return; for (final package in packages) { final source = package.source; @@ -143,21 +145,21 @@ DependencyType.direct: 'direct', DependencyType.none: 'transitive' }[_root.dependencyType(package.name)]!; - analytics.analytics.sendEvent( + analytics.sendEvent( 'pub-get', package.name, label: package.version.canonicalizedVersion, value: 1, parameters: { 'ni': '1', // We consider a pub-get a non-interactive event. - analytics.dependencyKindCustomDimensionName: dependencyKind, + pubAnalytics.dependencyKindCustomDimensionName: dependencyKind, }, ); log.fine( 'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind'); } } - analytics.analytics.sendTiming( + analytics.sendTiming( 'resolution', resolutionTime.inMilliseconds, category: 'pub-get',
diff --git a/tool/test-bin/pub_command_runner.dart b/tool/test-bin/pub_command_runner.dart index 810c925..52eaf73 100644 --- a/tool/test-bin/pub_command_runner.dart +++ b/tool/test-bin/pub_command_runner.dart
@@ -14,12 +14,14 @@ import 'package:pub/src/log.dart' as log; import 'package:usage/usage.dart'; +final _LoggingAnalytics loggingAnalytics = _LoggingAnalytics(); + class Runner extends CommandRunner<int> { ArgResults _options; Runner() : super('pub_command_runner', 'Tests the embeddable pub command.') { final analytics = Platform.environment['_PUB_LOG_ANALYTICS'] == 'true' - ? PubAnalytics(_LoggingAnalytics(), + ? PubAnalytics(() => loggingAnalytics, dependencyKindCustomDimensionName: 'cd1') : null; addCommand(pubCommand(analytics: analytics));