Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewkolos committed May 5, 2023
1 parent ea4bc2a commit 6654a91
Show file tree
Hide file tree
Showing 16 changed files with 168 additions and 392 deletions.
133 changes: 50 additions & 83 deletions packages/flutter_tools/lib/src/android/android_sdk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:meta/meta.dart';
import 'package:process/process.dart';

import '../base/common.dart';
import '../base/file_system.dart';
import '../base/os.dart';
import '../base/logger.dart';
import '../base/platform.dart';
import '../base/process.dart';
import '../base/version.dart';
Expand Down Expand Up @@ -44,8 +44,6 @@ class AndroidSdk {
}

static const String javaHomeEnvironmentVariable = 'JAVA_HOME';
static const String _javaExecutable = 'java';

/// The Android SDK root directory.
final Directory directory;

Expand Down Expand Up @@ -77,9 +75,7 @@ class AndroidSdk {
/// the SDK on demand.
bool get licensesAvailable => directory.childDirectory('licenses').existsSync();

static AndroidSdk? locateAndroidSdk({
Java? java,
}) {
static AndroidSdk? locateAndroidSdk() {
String? findAndroidHomeDir() {
String? androidHomeDir;
if (globals.config.containsKey('android-sdk')) {
Expand Down Expand Up @@ -158,7 +154,16 @@ class AndroidSdk {
return null;
}

return AndroidSdk(globals.fs.directory(androidHomeDir), java: java);
return AndroidSdk(
globals.fs.directory(androidHomeDir),
java: Java.find(
androidStudio: globals.androidStudio,
logger: globals.logger,
fileSystem: globals.fs,
platform: globals.platform,
processManager: globals.processManager
),
);
}

static bool validSdkDirectory(String dir) {
Expand Down Expand Up @@ -419,53 +424,8 @@ class AndroidSdk {

/// Returns the version of java in the format \d(.\d)+(.\d)+
/// Returns null if version not found.
String? getJavaVersion({
required AndroidStudio? androidStudio,
required FileSystem fileSystem,
required OperatingSystemUtils operatingSystemUtils,
required Platform platform,
required ProcessUtils processUtils,
}) {
final String? javaBinary = findJavaBinary(
androidStudio: androidStudio,
fileSystem: fileSystem,
operatingSystemUtils: operatingSystemUtils,
platform: platform,
);
if (javaBinary == null) {
globals.printTrace('Could not find java binary to get version.');
return null;
}
final RunResult result = processUtils.runSync(
<String>[javaBinary, '--version'],
environment: sdkManagerEnv,
);
if (result.exitCode != 0) {
globals.printTrace(
'java --version failed: exitCode: ${result.exitCode} stdout: ${result.stdout} stderr: ${result.stderr}');
return null;
}
return parseJavaVersion(result.stdout);
}

/// Extracts JDK version from the output of java --version.
@visibleForTesting
static String? parseJavaVersion(String rawVersionOutput) {
// The contents that matter come in the format '11.0.18' or '1.8.0_202'.
final RegExp jdkVersionRegex = RegExp(r'\d+\.\d+(\.\d+(?:_\d+)?)?');
final Iterable<RegExpMatch> matches =
jdkVersionRegex.allMatches(rawVersionOutput);
if (matches.isEmpty) {
globals.logger.printWarning(_formatJavaVersionWarning(rawVersionOutput));
return null;
}
final String? versionString = matches.first.group(0);
if (versionString == null || versionString.split('_').isEmpty) {
globals.logger.printWarning(_formatJavaVersionWarning(rawVersionOutput));
return null;
}
// Trim away _d+ from versions 1.8 and below.
return versionString.split('_').first;
String? getJavaVersion() {
return _java?.getVersion()?.shortText;
}

/// A value that would be appropriate to use as JAVA_HOME.
Expand All @@ -478,11 +438,34 @@ class AndroidSdk {
return _java!.home;
}

return findJavaHome();
return findJavaHome(
logger: globals.logger,
androidStudio: globals.androidStudio,
fileSystem: globals.fs,
processManager: globals.processManager,
platform: globals.platform,
);
}

static String? findJavaHome() {
return globals.java?.home;
/// A value that would be appropriate to use as JAVA_HOME.
///
/// This method considers jdk in the following order:
/// * the JDK bundled with Android Studio, if one is found;
/// * the JAVA_HOME in the ambient environment, if set;
static String? findJavaHome({
required Logger logger,
required AndroidStudio? androidStudio,
required FileSystem fileSystem,
required ProcessManager processManager,
required Platform platform,
}) {
return Java.find(
logger: logger,
androidStudio: androidStudio,
fileSystem: fileSystem,
platform: platform,
processManager: processManager,
)?.home;
}

/// Finds the java binary that is used for all operations across the tool.
Expand All @@ -497,35 +480,19 @@ class AndroidSdk {
// Android apps exists independently of this method.
// See https://github.com/flutter/flutter/issues/124252.
static String? findJavaBinary({
required Logger logger,
required AndroidStudio? androidStudio,
required FileSystem fileSystem,
required OperatingSystemUtils operatingSystemUtils,
required Platform platform,
required ProcessManager processManager,
}) {
final String? javaHome = findJavaHome();

if (javaHome != null) {
return fileSystem.path.join(javaHome, 'bin', 'java');
}

// Fallback to PATH based lookup.
final String? pathJava = operatingSystemUtils.which(_javaExecutable)?.path;
if (pathJava != null) {
globals.printTrace('Using java from PATH.');
} else {
globals.printTrace('Could not find java path.');
}
return pathJava;
}

// Returns a user visible String that says the tool failed to parse
// the version of java along with the output.
static String _formatJavaVersionWarning(String javaVersionRaw) {
return 'Could not parse java version from: \n'
'$javaVersionRaw \n'
'If there is a version please look for an existing bug '
'https://github.com/flutter/flutter/issues/'
' and if one does not exist file a new issue.';
return Java.find(
logger: logger,
androidStudio: androidStudio,
fileSystem: fileSystem,
platform: platform,
processManager: processManager,
)?.binary;
}

/// Returns an environment with the Java folder added to PATH for use in calling
Expand Down
17 changes: 4 additions & 13 deletions packages/flutter_tools/lib/src/android/android_workflow.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import '../base/context.dart';
import '../base/file_system.dart';
import '../base/io.dart';
import '../base/logger.dart';
import '../base/os.dart';
import '../base/platform.dart';
import '../base/user_messages.dart' hide userMessages;
import '../base/version.dart';
Expand Down Expand Up @@ -86,12 +85,6 @@ class AndroidValidator extends DoctorValidator {
_androidStudio = androidStudio,
_fileSystem = fileSystem,
_logger = logger,
_operatingSystemUtils = OperatingSystemUtils(
fileSystem: fileSystem,
logger: logger,
platform: platform,
processManager: processManager,
),
_platform = platform,
_processManager = processManager,
_userMessages = userMessages,
Expand All @@ -101,7 +94,6 @@ class AndroidValidator extends DoctorValidator {
final AndroidStudio? _androidStudio;
final FileSystem _fileSystem;
final Logger _logger;
final OperatingSystemUtils _operatingSystemUtils;
final Platform _platform;
final ProcessManager _processManager;
final UserMessages _userMessages;
Expand Down Expand Up @@ -241,10 +233,11 @@ class AndroidValidator extends DoctorValidator {
_task = 'Finding Java binary';
// Now check for the JDK.
final String? javaBinary = AndroidSdk.findJavaBinary(
logger: _logger,
androidStudio: _androidStudio,
fileSystem: _fileSystem,
operatingSystemUtils: _operatingSystemUtils,
platform: _platform,
processManager: _processManager,
);
if (javaBinary == null) {
messages.add(ValidationMessage.error(_userMessages.androidMissingJdk));
Expand All @@ -268,7 +261,6 @@ class AndroidLicenseValidator extends DoctorValidator {
AndroidLicenseValidator({
required AndroidSdk? androidSdk,
required Platform platform,
required OperatingSystemUtils operatingSystemUtils,
required FileSystem fileSystem,
required ProcessManager processManager,
required Logger logger,
Expand All @@ -277,7 +269,6 @@ class AndroidLicenseValidator extends DoctorValidator {
required UserMessages userMessages,
}) : _androidSdk = androidSdk,
_platform = platform,
_operatingSystemUtils = operatingSystemUtils,
_fileSystem = fileSystem,
_processManager = processManager,
_logger = logger,
Expand All @@ -289,7 +280,6 @@ class AndroidLicenseValidator extends DoctorValidator {
final AndroidSdk? _androidSdk;
final AndroidStudio? _androidStudio;
final Stdio _stdio;
final OperatingSystemUtils _operatingSystemUtils;
final Platform _platform;
final FileSystem _fileSystem;
final ProcessManager _processManager;
Expand Down Expand Up @@ -331,10 +321,11 @@ class AndroidLicenseValidator extends DoctorValidator {

Future<bool> _checkJavaVersionNoOutput() async {
final String? javaBinary = AndroidSdk.findJavaBinary(
logger: _logger,
androidStudio: _androidStudio,
fileSystem: _fileSystem,
operatingSystemUtils: _operatingSystemUtils,
platform: _platform,
processManager: _processManager,
);
if (javaBinary == null) {
return false;
Expand Down
8 changes: 1 addition & 7 deletions packages/flutter_tools/lib/src/android/gradle.dart
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
_gradleUtils = gradleUtils,
_androidStudio = androidStudio,
_fileSystemUtils = FileSystemUtils(fileSystem: fileSystem, platform: platform),
_processUtils = ProcessUtils(logger: logger, processManager: processManager),
_platform = platform;
_processUtils = ProcessUtils(logger: logger, processManager: processManager);

final Logger _logger;
final ProcessUtils _processUtils;
Expand All @@ -158,7 +157,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
final GradleUtils _gradleUtils;
final FileSystemUtils _fileSystemUtils;
final AndroidStudio? _androidStudio;
final Platform _platform;

/// Builds the AAR and POM files for the current Flutter module or plugin.
@override
Expand Down Expand Up @@ -268,10 +266,6 @@ class AndroidGradleBuilder implements AndroidBuilder {
AndroidStudioJavaGradleConflictMigration(_logger,
project: project.android,
androidStudio: _androidStudio,
fileSystem: _fileSystem,
processUtils: _processUtils,
platform: _platform,
os: globals.os,
androidSdk: globals.androidSdk)
,
];
Expand Down
9 changes: 8 additions & 1 deletion packages/flutter_tools/lib/src/android/java.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:process/process.dart';

import '../base/file_system.dart';
Expand Down Expand Up @@ -50,10 +51,15 @@ class Java {
required AndroidStudio? androidStudio,
required Logger logger,
required FileSystem fileSystem,
required OperatingSystemUtils os,
required Platform platform,
required ProcessManager processManager,
}) {
final OperatingSystemUtils os = OperatingSystemUtils(
fileSystem: fileSystem,
logger: logger,
platform: platform,
processManager: processManager
);
final String? home = _findJavaHome(
logger: logger,
androidStudio: androidStudio,
Expand Down Expand Up @@ -178,6 +184,7 @@ String? _findJavaBinary({

// Fallback to PATH based lookup.
final String? pathJava = operatingSystemUtils.which(_kJavaExecutable)?.path;
print(pathJava);
if (pathJava != null) {
logger.printTrace('Using java from PATH.');
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
import 'package:meta/meta.dart';

import '../../base/file_system.dart';
import '../../base/os.dart';
import '../../base/platform.dart';
import '../../base/process.dart';
import '../../base/project_migrator.dart';
import '../../base/version.dart';
import '../../project.dart';
Expand Down Expand Up @@ -77,24 +74,12 @@ class AndroidStudioJavaGradleConflictMigration extends ProjectMigrator {
super.logger,
{required AndroidProject project,
AndroidStudio? androidStudio,
required FileSystem fileSystem,
required ProcessUtils processUtils,
required Platform platform,
required OperatingSystemUtils os,
AndroidSdk? androidSdk,
}) : _gradleWrapperPropertiesFile = getGradleWrapperFile(project.hostAppGradleRoot),
_androidStudio = androidStudio,
_fileSystem = fileSystem,
_processUtils = processUtils,
_platform = platform,
_os = os,
_androidSdk = androidSdk;
final File _gradleWrapperPropertiesFile;
final AndroidStudio? _androidStudio;
final FileSystem _fileSystem;
final ProcessUtils _processUtils;
final Platform _platform;
final OperatingSystemUtils _os;
final AndroidSdk? _androidSdk;

@override
Expand All @@ -113,13 +98,7 @@ class AndroidStudioJavaGradleConflictMigration extends ProjectMigrator {
return;
}

final String? javaVersionString = _androidSdk?.getJavaVersion(
androidStudio: _androidStudio,
fileSystem: _fileSystem,
operatingSystemUtils: _os,
platform: _platform,
processUtils: _processUtils,
);
final String? javaVersionString = _androidSdk?.getJavaVersion();
final Version? javaVersion = Version.parse(javaVersionString);
if (javaVersion == null) {
logger.printTrace(javaVersionNotFound);
Expand Down
3 changes: 1 addition & 2 deletions packages/flutter_tools/lib/src/context_runner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ Future<T> runInContext<T>(
androidStudio: globals.androidStudio,
),
AndroidLicenseValidator: () => AndroidLicenseValidator(
operatingSystemUtils: globals.os,
platform: globals.platform,
userMessages: globals.userMessages,
processManager: globals.processManager,
Expand All @@ -107,7 +106,7 @@ Future<T> runInContext<T>(
fileSystem: globals.fs,
stdio: globals.stdio,
),
AndroidSdk: AndroidSdk.locateAndroidSdk,
AndroidSdk: () => AndroidSdk.locateAndroidSdk(),
AndroidStudio: AndroidStudio.latestValid,
AndroidValidator: () => AndroidValidator(
androidStudio: globals.androidStudio,
Expand Down

0 comments on commit 6654a91

Please sign in to comment.