Skip to content

Commit 7417c4e

Browse files
authored
[CP] have Java.version return null if java --version fails or cannot be run (flutter#139698)
cherry-picks changes from flutter#139614 onto the stable channel
1 parent 3b804f1 commit 7417c4e

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,18 @@ class Java {
136136
/// Returns the version of java in the format \d(.\d)+(.\d)+
137137
/// Returns null if version could not be determined.
138138
late final Version? version = (() {
139+
if (!canRun()) {
140+
return null;
141+
}
142+
139143
final RunResult result = _processUtils.runSync(
140144
<String>[binaryPath, '--version'],
141145
environment: environment,
142146
);
143147
if (result.exitCode != 0) {
144148
_logger.printTrace('java --version failed: exitCode: ${result.exitCode}'
145149
' stdout: ${result.stdout} stderr: ${result.stderr}');
150+
return null;
146151
}
147152
final String rawVersionOutput = result.stdout;
148153
final List<String> versionLines = rawVersionOutput.split('\n');

packages/flutter_tools/test/general.shard/android/java_test.dart

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing)
183183
});
184184
});
185185

186-
group('getVersionString', () {
186+
group('version', () {
187187
late Java java;
188188

189189
setUp(() {
@@ -208,6 +208,23 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing)
208208
);
209209
}
210210

211+
testWithoutContext('is null when java binary cannot be run', () async {
212+
addJavaVersionCommand('');
213+
processManager.excludedExecutables.add('java');
214+
215+
expect(java.version, null);
216+
});
217+
218+
testWithoutContext('is null when java --version returns a non-zero exit code', () async {
219+
processManager.addCommand(
220+
FakeCommand(
221+
command: <String>[java.binaryPath, '--version'],
222+
exitCode: 1,
223+
),
224+
);
225+
expect(java.version, null);
226+
});
227+
211228
testWithoutContext('parses jdk 8', () {
212229
addJavaVersionCommand('''
213230
java version "1.8.0_202"

0 commit comments

Comments
 (0)