• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import '../base/context.dart';
6import '../base/user_messages.dart';
7import '../doctor.dart';
8import 'visual_studio.dart';
9
10VisualStudioValidator get visualStudioValidator => context.get<VisualStudioValidator>();
11
12class VisualStudioValidator extends DoctorValidator {
13  const VisualStudioValidator() : super('Visual Studio - develop for Windows');
14
15  @override
16  Future<ValidationResult> validate() async {
17    final List<ValidationMessage> messages = <ValidationMessage>[];
18    ValidationType status = ValidationType.missing;
19    String versionInfo;
20
21    if (visualStudio.isInstalled) {
22      status = ValidationType.installed;
23
24      messages.add(ValidationMessage(
25          userMessages.visualStudioLocation(visualStudio.installLocation)
26      ));
27
28      messages.add(ValidationMessage(userMessages.visualStudioVersion(
29          visualStudio.displayName,
30          visualStudio.fullVersion,
31      )));
32
33      if (!visualStudio.hasNecessaryComponents) {
34        status = ValidationType.partial;
35        final int majorVersion = int.tryParse(visualStudio.fullVersion.split('.')[0]);
36        messages.add(ValidationMessage.error(
37            userMessages.visualStudioMissingComponents(
38                visualStudio.workloadDescription,
39                visualStudio.necessaryComponentDescriptions(majorVersion)
40            )
41        ));
42      }
43      versionInfo = '${visualStudio.displayName} ${visualStudio.displayVersion}';
44    } else {
45      status = ValidationType.missing;
46      messages.add(ValidationMessage.error(userMessages.visualStudioMissing));
47    }
48
49    return ValidationResult(status, messages, statusInfo: versionInfo);
50  }
51}
52