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));