Skip to content

Commit 77ea848

Browse files
authored
Inject Usage dependency into FallbackDiscovery and BuildEvent (flutter#53443)
* Usage dependency injection * Review edits
1 parent c3ec1ca commit 77ea848

15 files changed

+108
-78
lines changed

packages/flutter_tools/lib/src/android/gradle.dart

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,9 @@ Future<void> buildGradleApp({
242242

243243
final bool usesAndroidX = isAppUsingAndroidX(project.android.hostAppGradleRoot);
244244
if (usesAndroidX) {
245-
BuildEvent('app-using-android-x').send();
245+
BuildEvent('app-using-android-x', flutterUsage: globals.flutterUsage).send();
246246
} else if (!usesAndroidX) {
247-
BuildEvent('app-not-using-android-x').send();
247+
BuildEvent('app-not-using-android-x', flutterUsage: globals.flutterUsage).send();
248248
globals.printStatus("$warningMark Your app isn't using AndroidX.", emphasis: true);
249249
globals.printStatus(
250250
'To avoid potential build failures, you can quickly migrate your app '
@@ -404,7 +404,7 @@ Future<void> buildGradleApp({
404404

405405
if (exitCode != 0) {
406406
if (detectedGradleError == null) {
407-
BuildEvent('gradle-unkown-failure').send();
407+
BuildEvent('gradle-unkown-failure', flutterUsage: globals.flutterUsage).send();
408408
throwToolExit(
409409
'Gradle task $assembleTask failed with exit code $exitCode',
410410
exitCode: exitCode,
@@ -430,7 +430,7 @@ Future<void> buildGradleApp({
430430
shouldBuildPluginAsAar: shouldBuildPluginAsAar,
431431
retries: retries - 1,
432432
);
433-
BuildEvent(successEventLabel).send();
433+
BuildEvent(successEventLabel, flutterUsage: globals.flutterUsage).send();
434434
return;
435435
case GradleBuildStatus.retryWithAarPlugins:
436436
await buildGradleApp(
@@ -442,13 +442,13 @@ Future<void> buildGradleApp({
442442
shouldBuildPluginAsAar: true,
443443
retries: retries - 1,
444444
);
445-
BuildEvent(successEventLabel).send();
445+
BuildEvent(successEventLabel, flutterUsage: globals.flutterUsage).send();
446446
return;
447447
case GradleBuildStatus.exit:
448448
// noop.
449449
}
450450
}
451-
BuildEvent('gradle-${detectedGradleError.eventLabel}-failure').send();
451+
BuildEvent('gradle-${detectedGradleError.eventLabel}-failure', flutterUsage: globals.flutterUsage).send();
452452
throwToolExit(
453453
'Gradle task $assembleTask failed with exit code $exitCode',
454454
exitCode: exitCode,
@@ -697,7 +697,7 @@ String _calculateSha(File file) {
697697
}
698698

699699
void _exitWithUnsupportedProjectMessage() {
700-
BuildEvent('unsupported-project', eventError: 'gradle-plugin').send();
700+
BuildEvent('unsupported-project', eventError: 'gradle-plugin', flutterUsage: globals.flutterUsage).send();
701701
throwToolExit(
702702
'$warningMark Your app is using an unsupported Gradle project. '
703703
'To fix this problem, create a new project by running `flutter create -t app <app-directory>` '
@@ -706,7 +706,7 @@ void _exitWithUnsupportedProjectMessage() {
706706
}
707707

708708
void _exitWithProjectNotUsingGradleMessage() {
709-
BuildEvent('unsupported-project', eventError: 'app-not-using-gradle').send();
709+
BuildEvent('unsupported-project', eventError: 'app-not-using-gradle', flutterUsage: globals.flutterUsage).send();
710710
throwToolExit(
711711
'$warningMark The build process for Android has changed, and the '
712712
'current project configuration is no longer valid. Please consult\n\n'
@@ -770,7 +770,7 @@ Future<void> buildPluginsAsAar(
770770
} on ToolExit {
771771
// Log the entire plugin entry in `.flutter-plugins` since it
772772
// includes the plugin name and the version.
773-
BuildEvent('gradle-plugin-aar-failure', eventError: plugin).send();
773+
BuildEvent('gradle-plugin-aar-failure', eventError: plugin, flutterUsage: globals.flutterUsage).send();
774774
throwToolExit('The plugin $pluginName could not be built due to the issue above.');
775775
}
776776
}
@@ -866,12 +866,13 @@ void _exitWithExpectedFileNotFound({
866866
assert(fileExtension != null);
867867

868868
final String androidGradlePluginVersion =
869-
getGradleVersionForAndroidPlugin(project.android.hostAppGradleRoot);
869+
getGradleVersionForAndroidPlugin(project.android.hostAppGradleRoot);
870870
BuildEvent('gradle-expected-file-not-found',
871871
settings:
872-
'androidGradlePluginVersion: $androidGradlePluginVersion, '
873-
'fileExtension: $fileExtension'
874-
).send();
872+
'androidGradlePluginVersion: $androidGradlePluginVersion, '
873+
'fileExtension: $fileExtension',
874+
flutterUsage: globals.flutterUsage,
875+
).send();
875876
throwToolExit(
876877
'Gradle build failed to produce an $fileExtension file. '
877878
"It's likely that this file was generated under ${project.android.buildDirectory.path}, "

packages/flutter_tools/lib/src/android/gradle_errors.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ final GradleHandledError androidXFailureHandler = GradleHandledError(
183183
BuildEvent(
184184
'gradle-android-x-failure',
185185
eventError: 'app-not-using-plugins',
186+
flutterUsage: globals.flutterUsage,
186187
).send();
187188
}
188189
if (hasPlugins && !usesAndroidX) {
@@ -195,6 +196,7 @@ final GradleHandledError androidXFailureHandler = GradleHandledError(
195196
BuildEvent(
196197
'gradle-android-x-failure',
197198
eventError: 'app-not-using-androidx',
199+
flutterUsage: globals.flutterUsage,
198200
).send();
199201
}
200202
if (hasPlugins && usesAndroidX && shouldBuildPluginAsAar) {
@@ -204,6 +206,7 @@ final GradleHandledError androidXFailureHandler = GradleHandledError(
204206
BuildEvent(
205207
'gradle-android-x-failure',
206208
eventError: 'using-jetifier',
209+
flutterUsage: globals.flutterUsage,
207210
).send();
208211
}
209212
if (hasPlugins && usesAndroidX && !shouldBuildPluginAsAar) {
@@ -214,6 +217,7 @@ final GradleHandledError androidXFailureHandler = GradleHandledError(
214217
BuildEvent(
215218
'gradle-android-x-failure',
216219
eventError: 'not-using-jetifier',
220+
flutterUsage: globals.flutterUsage,
217221
).send();
218222
return GradleBuildStatus.retryWithAarPlugins;
219223
}

packages/flutter_tools/lib/src/android/gradle_utils.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ void writeLocalProperties(File properties) {
301301
}
302302

303303
void exitWithNoSdkMessage() {
304-
BuildEvent('unsupported-project', eventError: 'android-sdk-not-found').send();
304+
BuildEvent('unsupported-project', eventError: 'android-sdk-not-found', flutterUsage: globals.flutterUsage).send();
305305
throwToolExit(
306306
'$warningMark No Android SDK found. '
307307
'Try setting the ANDROID_HOME environment variable.'

packages/flutter_tools/lib/src/commands/build_ios.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class BuildIOSCommand extends BuildSubCommand {
8989
);
9090

9191
if (!result.success) {
92-
await diagnoseXcodeBuildFailure(result);
92+
await diagnoseXcodeBuildFailure(result, globals.flutterUsage, globals.logger);
9393
throwToolExit('Encountered error while building for $logTarget.');
9494
}
9595

packages/flutter_tools/lib/src/context_runner.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ Future<T> runInContext<T>(
220220
platform: globals.platform,
221221
fileSystem: globals.fs,
222222
terminal: globals.terminal,
223+
usage: globals.flutterUsage,
223224
),
224225
},
225226
);

packages/flutter_tools/lib/src/ios/devices.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ class IOSDevice extends Device {
242242
);
243243
if (!buildResult.success) {
244244
_logger.printError('Could not build the precompiled application for the device.');
245-
await diagnoseXcodeBuildFailure(buildResult);
245+
await diagnoseXcodeBuildFailure(buildResult, globals.flutterUsage, _logger);
246246
_logger.printError('');
247247
return LaunchResult.failed();
248248
}
@@ -338,6 +338,7 @@ class IOSDevice extends Device {
338338
mDnsObservatoryDiscovery: MDnsObservatoryDiscovery.instance,
339339
portForwarder: portForwarder,
340340
protocolDiscovery: observatoryDiscovery,
341+
flutterUsage: globals.flutterUsage,
341342
);
342343
final Uri localUri = await fallbackDiscovery.discover(
343344
assumedDevicePort: assumedObservatoryPort,

packages/flutter_tools/lib/src/ios/fallback_discovery.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:vm_service/vm_service_io.dart' as vm_service_io;
99
import '../base/io.dart';
1010
import '../base/logger.dart';
1111
import '../device.dart';
12-
import '../globals.dart' as globals;
1312
import '../mdns_discovery.dart';
1413
import '../protocol_discovery.dart';
1514
import '../reporting/reporting.dart';
@@ -42,12 +41,14 @@ class FallbackDiscovery {
4241
@required MDnsObservatoryDiscovery mDnsObservatoryDiscovery,
4342
@required Logger logger,
4443
@required ProtocolDiscovery protocolDiscovery,
44+
@required Usage flutterUsage,
4545
Future<VmService> Function(String wsUri, {Log log}) vmServiceConnectUri =
4646
vm_service_io.vmServiceConnectUri,
4747
}) : _logger = logger,
4848
_mDnsObservatoryDiscovery = mDnsObservatoryDiscovery,
4949
_portForwarder = portForwarder,
5050
_protocolDiscovery = protocolDiscovery,
51+
_flutterUsage = flutterUsage,
5152
_vmServiceConnectUri = vmServiceConnectUri;
5253

5354
static const String _kEventName = 'ios-handshake';
@@ -56,6 +57,7 @@ class FallbackDiscovery {
5657
final MDnsObservatoryDiscovery _mDnsObservatoryDiscovery;
5758
final Logger _logger;
5859
final ProtocolDiscovery _protocolDiscovery;
60+
final Usage _flutterUsage;
5961
final Future<VmService> Function(String wsUri, {Log log}) _vmServiceConnectUri;
6062

6163
/// Attempt to discover the observatory port.
@@ -87,7 +89,7 @@ class FallbackDiscovery {
8789
UsageEvent(
8890
_kEventName,
8991
'mdns-success',
90-
flutterUsage: globals.flutterUsage,
92+
flutterUsage: _flutterUsage,
9193
).send();
9294
return result;
9395
}
@@ -98,7 +100,7 @@ class FallbackDiscovery {
98100
UsageEvent(
99101
_kEventName,
100102
'mdns-failure',
101-
flutterUsage: globals.flutterUsage,
103+
flutterUsage: _flutterUsage,
102104
).send();
103105

104106
try {
@@ -107,7 +109,7 @@ class FallbackDiscovery {
107109
UsageEvent(
108110
_kEventName,
109111
'fallback-success',
110-
flutterUsage: globals.flutterUsage,
112+
flutterUsage: _flutterUsage,
111113
).send();
112114
return result;
113115
}
@@ -121,7 +123,7 @@ class FallbackDiscovery {
121123
UsageEvent(
122124
_kEventName,
123125
'fallback-failure',
124-
flutterUsage: globals.flutterUsage,
126+
flutterUsage: _flutterUsage,
125127
).send();
126128
return null;
127129
}
@@ -167,7 +169,7 @@ class FallbackDiscovery {
167169
UsageEvent(
168170
_kEventName,
169171
'success',
170-
flutterUsage: globals.flutterUsage,
172+
flutterUsage: _flutterUsage,
171173
).send();
172174
return Uri.parse('http://localhost:$hostPort');
173175
}
@@ -207,7 +209,7 @@ class FallbackDiscovery {
207209
_kEventName,
208210
eventAction,
209211
label: eventLabel,
210-
flutterUsage: globals.flutterUsage,
212+
flutterUsage: _flutterUsage,
211213
).send();
212214
}
213215
}

packages/flutter_tools/lib/src/ios/mac.dart

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ Future<XcodeBuildResult> buildXcodeProject({
342342
if (e.toString().contains('timed out')) {
343343
BuildEvent('xcode-show-build-settings-timeout',
344344
command: showBuildSettingsCommand.join(' '),
345+
flutterUsage: globals.flutterUsage,
345346
).send();
346347
}
347348
rethrow;
@@ -447,13 +448,14 @@ return result.exitCode != 0 &&
447448
result.stdout.contains('there are two concurrent builds running');
448449
}
449450

450-
Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result) async {
451+
Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result, Usage flutterUsage, Logger logger) async {
451452
if (result.xcodeBuildExecution != null &&
452453
result.xcodeBuildExecution.buildForPhysicalDevice &&
453454
result.stdout?.toUpperCase()?.contains('BITCODE') == true) {
454455
BuildEvent('xcode-bitcode-failure',
455456
command: result.xcodeBuildExecution.buildCommands.toString(),
456457
settings: result.xcodeBuildExecution.buildSettings.toString(),
458+
flutterUsage: flutterUsage,
457459
).send();
458460
}
459461

@@ -463,11 +465,11 @@ Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result) async {
463465
if (result.stdout?.contains('Building for iOS') == true
464466
&& result.stdout?.contains('but the linked and embedded framework') == true
465467
&& result.stdout?.contains('was built for iOS') == true) {
466-
globals.printError('');
467-
globals.printError('Your Xcode project requires migration. See https://flutter.dev/docs/development/ios-project-migration for details.');
468-
globals.printError('');
469-
globals.printError('You can temporarily work around this issue by running:');
470-
globals.printError(' rm -rf ios/Flutter/App.framework');
468+
logger.printError('');
469+
logger.printError('Your Xcode project requires migration. See https://flutter.dev/docs/development/ios-project-migration for details.');
470+
logger.printError('');
471+
logger.printError('You can temporarily work around this issue by running:');
472+
logger.printError(' rm -rf ios/Flutter/App.framework');
471473
return;
472474
}
473475

@@ -476,7 +478,7 @@ Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result) async {
476478
result.stdout?.contains('BCEROR') == true &&
477479
// May need updating if Xcode changes its outputs.
478480
result.stdout?.contains("Xcode couldn't find a provisioning profile matching") == true) {
479-
globals.printError(noProvisioningProfileInstruction, emphasis: true);
481+
logger.printError(noProvisioningProfileInstruction, emphasis: true);
480482
return;
481483
}
482484
// Make sure the user has specified one of:
@@ -486,26 +488,26 @@ Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result) async {
486488
result.xcodeBuildExecution.buildForPhysicalDevice &&
487489
!<String>['DEVELOPMENT_TEAM', 'PROVISIONING_PROFILE'].any(
488490
result.xcodeBuildExecution.buildSettings.containsKey)) {
489-
globals.printError(noDevelopmentTeamInstruction, emphasis: true);
491+
logger.printError(noDevelopmentTeamInstruction, emphasis: true);
490492
return;
491493
}
492494
if (result.xcodeBuildExecution != null &&
493495
result.xcodeBuildExecution.buildForPhysicalDevice &&
494496
result.xcodeBuildExecution.buildSettings['PRODUCT_BUNDLE_IDENTIFIER']?.contains('com.example') == true) {
495-
globals.printError('');
496-
globals.printError('It appears that your application still contains the default signing identifier.');
497-
globals.printError("Try replacing 'com.example' with your signing id in Xcode:");
498-
globals.printError(' open ios/Runner.xcworkspace');
497+
logger.printError('');
498+
logger.printError('It appears that your application still contains the default signing identifier.');
499+
logger.printError("Try replacing 'com.example' with your signing id in Xcode:");
500+
logger.printError(' open ios/Runner.xcworkspace');
499501
return;
500502
}
501503
if (result.stdout?.contains('Code Sign error') == true) {
502-
globals.printError('');
503-
globals.printError('It appears that there was a problem signing your application prior to installation on the device.');
504-
globals.printError('');
505-
globals.printError('Verify that the Bundle Identifier in your project is your signing id in Xcode');
506-
globals.printError(' open ios/Runner.xcworkspace');
507-
globals.printError('');
508-
globals.printError("Also try selecting 'Product > Build' to fix the problem:");
504+
logger.printError('');
505+
logger.printError('It appears that there was a problem signing your application prior to installation on the device.');
506+
logger.printError('');
507+
logger.printError('Verify that the Bundle Identifier in your project is your signing id in Xcode');
508+
logger.printError(' open ios/Runner.xcworkspace');
509+
logger.printError('');
510+
logger.printError("Also try selecting 'Product > Build' to fix the problem:");
509511
return;
510512
}
511513
}

packages/flutter_tools/lib/src/ios/xcodeproj.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,17 +254,20 @@ class XcodeProjectInterpreter {
254254
@required Logger logger,
255255
@required FileSystem fileSystem,
256256
@required Terminal terminal,
257+
@required Usage usage,
257258
}) : _platform = platform,
258-
_fileSystem = fileSystem,
259-
_terminal = terminal,
260-
_logger = logger,
261-
_processUtils = ProcessUtils(logger: logger, processManager: processManager);
259+
_fileSystem = fileSystem,
260+
_terminal = terminal,
261+
_logger = logger,
262+
_processUtils = ProcessUtils(logger: logger, processManager: processManager),
263+
_usage = usage;
262264

263265
final Platform _platform;
264266
final FileSystem _fileSystem;
265267
final ProcessUtils _processUtils;
266268
final Terminal _terminal;
267269
final Logger _logger;
270+
final Usage _usage;
268271

269272
static const String _executable = '/usr/bin/xcodebuild';
270273
static final RegExp _versionRegex = RegExp(r'Xcode ([0-9.]+)');
@@ -359,6 +362,7 @@ class XcodeProjectInterpreter {
359362
if (error is ProcessException && error.toString().contains('timed out')) {
360363
BuildEvent('xcode-show-build-settings-timeout',
361364
command: showBuildSettingsCommand.join(' '),
365+
flutterUsage: _usage,
362366
).send();
363367
}
364368
_logger.printTrace('Unexpected failure to get the build settings: $error.');

0 commit comments

Comments
 (0)