visual_studio_validator.dart 3.43 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
import 'package:meta/meta.dart';

7
import '../base/context.dart';
8
import '../base/user_messages.dart' hide userMessages;
9 10 11 12 13 14
import '../doctor.dart';
import 'visual_studio.dart';

VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValidator>();

class VisualStudioValidator extends DoctorValidator {
15 16 17 18 19 20 21 22 23
  const VisualStudioValidator({
    @required VisualStudio visualStudio,
    @required UserMessages userMessages,
  }) : _visualStudio = visualStudio,
       _userMessages = userMessages,
       super('Visual Studio - develop for Windows');

  final VisualStudio _visualStudio;
  final UserMessages _userMessages;
24 25 26 27 28 29 30

  @override
  Future<ValidationResult> validate() async {
    final List<ValidationMessage> messages = <ValidationMessage>[];
    ValidationType status = ValidationType.missing;
    String versionInfo;

31
    if (_visualStudio.isInstalled) {
32 33 34
      status = ValidationType.installed;

      messages.add(ValidationMessage(
35
          _userMessages.visualStudioLocation(_visualStudio.installLocation)
36 37
      ));

38 39 40
      messages.add(ValidationMessage(_userMessages.visualStudioVersion(
          _visualStudio.displayName,
          _visualStudio.fullVersion,
41 42
      )));

43 44
      if (_visualStudio.isPrerelease) {
        messages.add(ValidationMessage(_userMessages.visualStudioIsPrerelease));
45 46
      }

47 48 49 50 51
      final String windows10SdkVersion = _visualStudio.getWindows10SDKVersion();
      if (windows10SdkVersion != null) {
        messages.add(ValidationMessage(_userMessages.windows10SdkVersion(windows10SdkVersion)));
      }

52
      // Messages for faulty installations.
53
      if (!_visualStudio.isAtLeastMinimumVersion) {
54 55
        status = ValidationType.partial;
        messages.add(ValidationMessage.error(
56 57 58
            _userMessages.visualStudioTooOld(
                _visualStudio.minimumVersionDescription,
                _visualStudio.workloadDescription,
59 60
            ),
        ));
61
      } else if (_visualStudio.isRebootRequired) {
62
        status = ValidationType.partial;
63 64
        messages.add(ValidationMessage.error(_userMessages.visualStudioRebootRequired));
      } else if (!_visualStudio.isComplete) {
65
        status = ValidationType.partial;
66 67
        messages.add(ValidationMessage.error(_userMessages.visualStudioIsIncomplete));
      } else if (!_visualStudio.isLaunchable) {
68
        status = ValidationType.partial;
69 70
        messages.add(ValidationMessage.error(_userMessages.visualStudioNotLaunchable));
      } else if (!_visualStudio.hasNecessaryComponents) {
71 72
        status = ValidationType.partial;
        messages.add(ValidationMessage.error(
73 74 75
            _userMessages.visualStudioMissingComponents(
                _visualStudio.workloadDescription,
                _visualStudio.necessaryComponentDescriptions(),
76
            ),
77
        ));
78 79 80
      } else if (windows10SdkVersion == null) {
        status = ValidationType.partial;
        messages.add(ValidationMessage.hint(_userMessages.windows10SdkNotFound));
81
      }
82
      versionInfo = '${_visualStudio.displayName} ${_visualStudio.displayVersion}';
83 84
    } else {
      status = ValidationType.missing;
85
      messages.add(ValidationMessage.error(
86 87
        _userMessages.visualStudioMissing(
          _visualStudio.workloadDescription,
88
        ),
89
      ));
90 91 92 93 94
    }

    return ValidationResult(status, messages, statusInfo: versionInfo);
  }
}