Migrate some workflows and doctor validators to null safety (#79807)

This commit is contained in:
Jenn Magder 2021-04-05 14:00:36 -07:00 committed by GitHub
parent bbd58f4d9c
commit 30370c9f99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 47 additions and 79 deletions

View file

@ -2,10 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/config.dart'; import '../base/config.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/platform.dart'; import '../base/platform.dart';
@ -16,7 +12,7 @@ import '../intellij/intellij.dart';
import 'android_studio.dart'; import 'android_studio.dart';
class AndroidStudioValidator extends DoctorValidator { class AndroidStudioValidator extends DoctorValidator {
AndroidStudioValidator(this._studio, { @required FileSystem fileSystem }) AndroidStudioValidator(this._studio, { required FileSystem fileSystem })
: _fileSystem = fileSystem, : _fileSystem = fileSystem,
super('Android Studio'); super('Android Studio');
@ -40,27 +36,29 @@ class AndroidStudioValidator extends DoctorValidator {
final List<ValidationMessage> messages = <ValidationMessage>[]; final List<ValidationMessage> messages = <ValidationMessage>[];
ValidationType type = ValidationType.missing; ValidationType type = ValidationType.missing;
final String studioVersionText = _studio.version == Version.unknown final String? studioVersionText = _studio.version == Version.unknown
? null ? null
: userMessages.androidStudioVersion(_studio.version.toString()); : userMessages.androidStudioVersion(_studio.version.toString());
messages.add(ValidationMessage( messages.add(ValidationMessage(
userMessages.androidStudioLocation(_studio.directory), userMessages.androidStudioLocation(_studio.directory),
)); ));
final IntelliJPlugins plugins = IntelliJPlugins(_studio.pluginsPath, fileSystem: _fileSystem); if (_studio.pluginsPath != null) {
plugins.validatePackage( final IntelliJPlugins plugins = IntelliJPlugins(_studio.pluginsPath!, fileSystem: _fileSystem);
messages, plugins.validatePackage(
<String>['flutter-intellij', 'flutter-intellij.jar'], messages,
'Flutter', <String>['flutter-intellij', 'flutter-intellij.jar'],
IntelliJPlugins.kIntellijFlutterPluginUrl, 'Flutter',
minVersion: IntelliJPlugins.kMinFlutterPluginVersion, IntelliJPlugins.kIntellijFlutterPluginUrl,
); minVersion: IntelliJPlugins.kMinFlutterPluginVersion,
plugins.validatePackage( );
messages, plugins.validatePackage(
<String>['Dart'], messages,
'Dart', <String>['Dart'],
IntelliJPlugins.kIntellijDartPluginUrl, 'Dart',
); IntelliJPlugins.kIntellijDartPluginUrl,
);
}
if (_studio.isValid) { if (_studio.isValid) {
type = _hasIssues(messages) type = _hasIssues(messages)
@ -90,9 +88,9 @@ class AndroidStudioValidator extends DoctorValidator {
class NoAndroidStudioValidator extends DoctorValidator { class NoAndroidStudioValidator extends DoctorValidator {
NoAndroidStudioValidator({ NoAndroidStudioValidator({
@required Config config, required Config config,
@required Platform platform, required Platform platform,
@required UserMessages userMessages, required UserMessages userMessages,
}) : _config = config, }) : _config = config,
_platform = platform, _platform = platform,
_userMessages = userMessages, _userMessages = userMessages,

View file

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import '../doctor_validator.dart'; import '../doctor_validator.dart';
@ -18,7 +16,7 @@ import '../features.dart';
@immutable @immutable
class CustomDeviceWorkflow implements Workflow { class CustomDeviceWorkflow implements Workflow {
const CustomDeviceWorkflow({ const CustomDeviceWorkflow({
@required FeatureFlags featureFlags required FeatureFlags featureFlags
}) : _featureFlags = featureFlags; }) : _featureFlags = featureFlags;
final FeatureFlags _featureFlags; final FeatureFlags _featureFlags;

View file

@ -4,7 +4,6 @@
// @dart = 2.8 // @dart = 2.8
import 'android/android_sdk.dart';
import 'android/gradle_utils.dart'; import 'android/gradle_utils.dart';
import 'artifacts.dart'; import 'artifacts.dart';
import 'base/bot_detector.dart'; import 'base/bot_detector.dart';
@ -51,7 +50,6 @@ CocoaPodsValidator get cocoapodsValidator => context.get<CocoaPodsValidator>();
LocalEngineLocator get localEngineLocator => context.get<LocalEngineLocator>(); LocalEngineLocator get localEngineLocator => context.get<LocalEngineLocator>();
AndroidSdk get androidSdk => context.get<AndroidSdk>();
CocoaPods get cocoaPods => context.get<CocoaPods>(); CocoaPods get cocoaPods => context.get<CocoaPods>();
FlutterVersion get flutterVersion => context.get<FlutterVersion>(); FlutterVersion get flutterVersion => context.get<FlutterVersion>();
FuchsiaArtifacts get fuchsiaArtifacts => context.get<FuchsiaArtifacts>(); FuchsiaArtifacts get fuchsiaArtifacts => context.get<FuchsiaArtifacts>();

View file

@ -4,6 +4,7 @@
import 'package:process/process.dart'; import 'package:process/process.dart';
import 'android/android_sdk.dart';
import 'android/android_studio.dart'; import 'android/android_studio.dart';
import 'base/config.dart'; import 'base/config.dart';
import 'base/context.dart'; import 'base/context.dart';
@ -28,6 +29,7 @@ Logger get logger => context.get<Logger>()!;
OperatingSystemUtils get os => context.get<OperatingSystemUtils>()!; OperatingSystemUtils get os => context.get<OperatingSystemUtils>()!;
Signals get signals => context.get<Signals>() ?? LocalSignals.instance; Signals get signals => context.get<Signals>() ?? LocalSignals.instance;
AndroidStudio? get androidStudio => context.get<AndroidStudio>(); AndroidStudio? get androidStudio => context.get<AndroidStudio>();
AndroidSdk? get androidSdk => context.get<AndroidSdk>();
/// Currently active implementation of the file system. /// Currently active implementation of the file system.
/// ///

View file

@ -2,10 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:archive/archive.dart'; import 'package:archive/archive.dart';
import 'package:meta/meta.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/version.dart'; import '../base/version.dart';
@ -41,7 +38,7 @@ import '../doctor_validator.dart';
/// plugin versions. /// plugin versions.
class IntelliJPlugins { class IntelliJPlugins {
IntelliJPlugins(this.pluginsPath, { IntelliJPlugins(this.pluginsPath, {
@required FileSystem fileSystem required FileSystem fileSystem
}) : _fileSystem = fileSystem; }) : _fileSystem = fileSystem;
final FileSystem _fileSystem; final FileSystem _fileSystem;
@ -56,15 +53,15 @@ class IntelliJPlugins {
List<String> packageNames, List<String> packageNames,
String title, String title,
String url, { String url, {
Version minVersion, Version? minVersion,
}) { }) {
for (final String packageName in packageNames) { for (final String packageName in packageNames) {
if (!_hasPackage(packageName)) { if (!_hasPackage(packageName)) {
continue; continue;
} }
final String versionText = _readPackageVersion(packageName); final String? versionText = _readPackageVersion(packageName);
final Version version = Version.parse(versionText); final Version? version = Version.parse(versionText);
if (version != null && minVersion != null && version < minVersion) { if (version != null && minVersion != null && version < minVersion) {
messages.add(ValidationMessage.error( messages.add(ValidationMessage.error(
'$title plugin version $versionText - the recommended minimum version is $minVersion'), '$title plugin version $versionText - the recommended minimum version is $minVersion'),
@ -90,7 +87,7 @@ class IntelliJPlugins {
return _fileSystem.isDirectorySync(packagePath); return _fileSystem.isDirectorySync(packagePath);
} }
ArchiveFile _findPluginXml(String packageName) { ArchiveFile? _findPluginXml(String packageName) {
final List<File> mainJarFileList = <File>[]; final List<File> mainJarFileList = <File>[];
if (packageName.endsWith('.jar')) { if (packageName.endsWith('.jar')) {
// package exists (checked in _hasPackage) // package exists (checked in _hasPackage)
@ -131,7 +128,7 @@ class IntelliJPlugins {
for (final File file in mainJarFileList) { for (final File file in mainJarFileList) {
final Archive archive = ZipDecoder().decodeBytes(file.readAsBytesSync()); final Archive archive = ZipDecoder().decodeBytes(file.readAsBytesSync());
final ArchiveFile archiveFile = archive.findFile('META-INF/plugin.xml'); final ArchiveFile? archiveFile = archive.findFile('META-INF/plugin.xml');
if (archiveFile != null) { if (archiveFile != null) {
return archiveFile; return archiveFile;
} }
@ -139,9 +136,9 @@ class IntelliJPlugins {
return null; return null;
} }
String _readPackageVersion(String packageName) { String? _readPackageVersion(String packageName) {
try { try {
final ArchiveFile archiveFile = _findPluginXml(packageName); final ArchiveFile? archiveFile = _findPluginXml(packageName);
if (archiveFile == null) { if (archiveFile == null) {
return null; return null;
} }

View file

@ -2,10 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/platform.dart'; import '../base/platform.dart';
import '../doctor_validator.dart'; import '../doctor_validator.dart';
import '../features.dart'; import '../features.dart';
@ -16,8 +12,8 @@ import '../features.dart';
/// repository to the flutter repo. /// repository to the flutter repo.
class LinuxWorkflow implements Workflow { class LinuxWorkflow implements Workflow {
const LinuxWorkflow({ const LinuxWorkflow({
@required Platform platform, required Platform platform,
@required FeatureFlags featureFlags, required FeatureFlags featureFlags,
}) : _platform = platform, }) : _platform = platform,
_featureFlags = featureFlags; _featureFlags = featureFlags;

View file

@ -2,20 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/platform.dart'; import '../base/platform.dart';
import '../doctor_validator.dart'; import '../doctor_validator.dart';
import '../features.dart'; import '../features.dart';
/// The macOS-specific implementation of a [Workflow]. /// The macOS-specific implementation of a [Workflow].
class MacOSWorkflow implements Workflow { class MacOSWorkflow implements Workflow {
const MacOSWorkflow({ const MacOSWorkflow({
@required Platform platform, required Platform platform,
@required FeatureFlags featureFlags, required FeatureFlags featureFlags,
}) : _platform = platform, }) : _platform = platform,
_featureFlags = featureFlags; _featureFlags = featureFlags;

View file

@ -2,10 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import 'base/platform.dart'; import 'base/platform.dart';
import 'doctor_validator.dart'; import 'doctor_validator.dart';
@ -15,7 +11,7 @@ import 'doctor_validator.dart';
/// validated along with `NO_PROXY`. /// validated along with `NO_PROXY`.
class ProxyValidator extends DoctorValidator { class ProxyValidator extends DoctorValidator {
ProxyValidator({ ProxyValidator({
@required Platform platform, required Platform platform,
}) : shouldShow = _getEnv('HTTP_PROXY', platform).isNotEmpty, }) : shouldShow = _getEnv('HTTP_PROXY', platform).isNotEmpty,
_httpProxy = _getEnv('HTTP_PROXY', platform), _httpProxy = _getEnv('HTTP_PROXY', platform),
_noProxy = _getEnv('NO_PROXY', platform), _noProxy = _getEnv('NO_PROXY', platform),

View file

@ -2,18 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/platform.dart'; import '../base/platform.dart';
import '../doctor_validator.dart'; import '../doctor_validator.dart';
import '../features.dart'; import '../features.dart';
class WebWorkflow extends Workflow { class WebWorkflow extends Workflow {
const WebWorkflow({ const WebWorkflow({
@required Platform platform, required Platform platform,
@required FeatureFlags featureFlags, required FeatureFlags featureFlags,
}) : _platform = platform, }) : _platform = platform,
_featureFlags = featureFlags; _featureFlags = featureFlags;

View file

@ -2,21 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/context.dart'; import '../base/context.dart';
import '../base/user_messages.dart' hide userMessages; import '../base/user_messages.dart' hide userMessages;
import '../doctor_validator.dart'; import '../doctor_validator.dart';
import 'visual_studio.dart'; import 'visual_studio.dart';
VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValidator>(); VisualStudioValidator? get visualStudioValidator => context.get<VisualStudioValidator>();
class VisualStudioValidator extends DoctorValidator { class VisualStudioValidator extends DoctorValidator {
const VisualStudioValidator({ const VisualStudioValidator({
@required VisualStudio visualStudio, required VisualStudio visualStudio,
@required UserMessages userMessages, required UserMessages userMessages,
}) : _visualStudio = visualStudio, }) : _visualStudio = visualStudio,
_userMessages = userMessages, _userMessages = userMessages,
super('Visual Studio - develop for Windows'); super('Visual Studio - develop for Windows');
@ -28,7 +24,7 @@ class VisualStudioValidator extends DoctorValidator {
Future<ValidationResult> validate() async { Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[]; final List<ValidationMessage> messages = <ValidationMessage>[];
ValidationType status = ValidationType.missing; ValidationType status = ValidationType.missing;
String versionInfo; String? versionInfo;
if (_visualStudio.isInstalled) { if (_visualStudio.isInstalled) {
status = ValidationType.installed; status = ValidationType.installed;
@ -46,7 +42,7 @@ class VisualStudioValidator extends DoctorValidator {
messages.add(ValidationMessage(_userMessages.visualStudioIsPrerelease)); messages.add(ValidationMessage(_userMessages.visualStudioIsPrerelease));
} }
final String windows10SdkVersion = _visualStudio.getWindows10SDKVersion(); final String? windows10SdkVersion = _visualStudio.getWindows10SDKVersion();
if (windows10SdkVersion != null) { if (windows10SdkVersion != null) {
messages.add(ValidationMessage(_userMessages.windows10SdkVersion(windows10SdkVersion))); messages.add(ValidationMessage(_userMessages.windows10SdkVersion(windows10SdkVersion)));
} }

View file

@ -2,17 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:meta/meta.dart';
import '../base/context.dart'; import '../base/context.dart';
import '../base/platform.dart'; import '../base/platform.dart';
import '../doctor_validator.dart'; import '../doctor_validator.dart';
import '../features.dart'; import '../features.dart';
/// The [WindowsWorkflow] instance. /// The [WindowsWorkflow] instance.
WindowsWorkflow get windowsWorkflow => context.get<WindowsWorkflow>(); WindowsWorkflow? get windowsWorkflow => context.get<WindowsWorkflow>();
/// The Windows-specific implementation of a [Workflow]. /// The Windows-specific implementation of a [Workflow].
/// ///
@ -20,8 +16,8 @@ WindowsWorkflow get windowsWorkflow => context.get<WindowsWorkflow>();
/// desktop configuration setting to be enabled. /// desktop configuration setting to be enabled.
class WindowsWorkflow implements Workflow { class WindowsWorkflow implements Workflow {
const WindowsWorkflow({ const WindowsWorkflow({
@required Platform platform, required Platform platform,
@required FeatureFlags featureFlags, required FeatureFlags featureFlags,
}) : _platform = platform, }) : _platform = platform,
_featureFlags = featureFlags; _featureFlags = featureFlags;