[CP] have `Java.version` return null if `java --version` fails or cannot be run (#139698)
cherry-picks changes from https://github.com/flutter/flutter/pull/139614 onto the stable channel
diff --git a/packages/flutter_tools/lib/src/android/java.dart b/packages/flutter_tools/lib/src/android/java.dart
index 699fcfd..f1e2934 100644
--- a/packages/flutter_tools/lib/src/android/java.dart
+++ b/packages/flutter_tools/lib/src/android/java.dart
@@ -136,6 +136,10 @@
/// Returns the version of java in the format \d(.\d)+(.\d)+
/// Returns null if version could not be determined.
late final Version? version = (() {
+ if (!canRun()) {
+ return null;
+ }
+
final RunResult result = _processUtils.runSync(
<String>[binaryPath, '--version'],
environment: environment,
@@ -143,6 +147,7 @@
if (result.exitCode != 0) {
_logger.printTrace('java --version failed: exitCode: ${result.exitCode}'
' stdout: ${result.stdout} stderr: ${result.stderr}');
+ return null;
}
final String rawVersionOutput = result.stdout;
final List<String> versionLines = rawVersionOutput.split('\n');
diff --git a/packages/flutter_tools/test/general.shard/android/java_test.dart b/packages/flutter_tools/test/general.shard/android/java_test.dart
index c7ff678..368f256 100644
--- a/packages/flutter_tools/test/general.shard/android/java_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/java_test.dart
@@ -183,7 +183,7 @@
});
});
- group('getVersionString', () {
+ group('version', () {
late Java java;
setUp(() {
@@ -208,6 +208,23 @@
);
}
+ testWithoutContext('is null when java binary cannot be run', () async {
+ addJavaVersionCommand('');
+ processManager.excludedExecutables.add('java');
+
+ expect(java.version, null);
+ });
+
+ testWithoutContext('is null when java --version returns a non-zero exit code', () async {
+ processManager.addCommand(
+ FakeCommand(
+ command: <String>[java.binaryPath, '--version'],
+ exitCode: 1,
+ ),
+ );
+ expect(java.version, null);
+ });
+
testWithoutContext('parses jdk 8', () {
addJavaVersionCommand('''
java version "1.8.0_202"