android_studio_validator.dart 3.12 KB
Newer Older
1 2 3 4 5 6
// Copyright 2017 The Chromium 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 'dart:async';

7
import '../base/user_messages.dart';
8
import '../base/version.dart';
9 10
import '../doctor.dart';
import '../globals.dart';
11
import '../intellij/intellij.dart';
12 13 14
import 'android_studio.dart';

class AndroidStudioValidator extends DoctorValidator {
15
  AndroidStudioValidator(this._studio) : super('Android Studio');
16

17 18
  final AndroidStudio _studio;

19
  static List<DoctorValidator> get allValidators {
20 21
    final List<DoctorValidator> validators = <DoctorValidator>[];
    final List<AndroidStudio> studios = AndroidStudio.allInstalled();
22
    if (studios.isEmpty) {
23
      validators.add(NoAndroidStudioValidator());
24 25
    } else {
      validators.addAll(studios
26
          .map<DoctorValidator>((AndroidStudio studio) => AndroidStudioValidator(studio)));
27 28 29 30 31 32
    }
    return validators;
  }

  @override
  Future<ValidationResult> validate() async {
33
    final List<ValidationMessage> messages = <ValidationMessage>[];
34
    ValidationType type = ValidationType.missing;
35

36 37
    final String studioVersionText = _studio.version == Version.unknown
        ? null
38
        : userMessages.androidStudioVersion(_studio.version.toString());
39
    messages
40
        .add(ValidationMessage(userMessages.androidStudioLocation(_studio.directory)));
41

42
    final IntelliJPlugins plugins = IntelliJPlugins(_studio.pluginsPath);
43 44 45 46
    plugins.validatePackage(messages, <String>['flutter-intellij', 'flutter-intellij.jar'],
        'Flutter', minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
    plugins.validatePackage(messages, <String>['Dart'], 'Dart');

47
    if (_studio.isValid) {
48
      type = _hasIssues(messages) ? ValidationType.partial : ValidationType.installed;
49
      messages.addAll(_studio.validationMessages
50
          .map<ValidationMessage>((String m) => ValidationMessage(m)));
51 52 53
    } else {
      type = ValidationType.partial;
      messages.addAll(_studio.validationMessages
54
          .map<ValidationMessage>((String m) => ValidationMessage.error(m)));
55
      messages.add(ValidationMessage(userMessages.androidStudioNeedsUpdate));
56
      if (_studio.configured != null) {
57
        messages.add(ValidationMessage(userMessages.androidStudioResetDir));
58 59 60
      }
    }

61
    return ValidationResult(type, messages, statusInfo: studioVersionText);
62
  }
63 64 65 66

  bool _hasIssues(List<ValidationMessage> messages) {
    return messages.any((ValidationMessage message) => message.isError);
  }
67 68 69 70 71 72 73
}

class NoAndroidStudioValidator extends DoctorValidator {
  NoAndroidStudioValidator() : super('Android Studio');

  @override
  Future<ValidationResult> validate() async {
74
    final List<ValidationMessage> messages = <ValidationMessage>[];
75

76
    final String cfgAndroidStudio = config.getValue('android-studio-dir');
77
    if (cfgAndroidStudio != null) {
78
      messages.add(ValidationMessage.error(userMessages.androidStudioMissing(cfgAndroidStudio)));
79
    }
80
    messages.add(ValidationMessage(userMessages.androidStudioInstallation));
81

82
    return ValidationResult(ValidationType.notAvailable, messages,
83 84 85
        statusInfo: 'not installed');
  }
}