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