From 8e7c8048de9a1dcbefb8b32f23cf2eabafb3e47c Mon Sep 17 00:00:00 2001 From: Danny Tuppeny Date: Mon, 5 Nov 2018 08:57:49 +0000 Subject: [PATCH] Don't search in %LocalAppData% if it's not set (#23933) It's not usual for this not to be set, but it affected at least one user (#23909) and there are a non-zero number of people online saying it's not set. It's better that we don't crash. Fixes #23909. --- .../flutter_tools/lib/src/vscode/vscode.dart | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/flutter_tools/lib/src/vscode/vscode.dart b/packages/flutter_tools/lib/src/vscode/vscode.dart index 3ed7586d39..5fb446cbcc 100644 --- a/packages/flutter_tools/lib/src/vscode/vscode.dart +++ b/packages/flutter_tools/lib/src/vscode/vscode.dart @@ -132,19 +132,38 @@ class VsCode { final String progFiles = platform.environment['programfiles']; final String localAppData = platform.environment['localappdata']; - return _findInstalled(<_VsCodeInstallLocation>[ - _VsCodeInstallLocation(fs.path.join(localAppData, 'Programs\\Microsoft VS Code'), '.vscode'), - _VsCodeInstallLocation(fs.path.join(progFiles86, 'Microsoft VS Code'), '.vscode', - edition: '32-bit edition'), - _VsCodeInstallLocation(fs.path.join(progFiles, 'Microsoft VS Code'), '.vscode', - edition: '64-bit edition'), - _VsCodeInstallLocation(fs.path.join(localAppData, 'Programs\\Microsoft VS Code Insiders'), '.vscode-insiders', - isInsiders: true), - _VsCodeInstallLocation(fs.path.join(progFiles86 , 'Microsoft VS Code Insiders'), '.vscode-insiders', - edition: '32-bit edition', isInsiders: true), - _VsCodeInstallLocation(fs.path.join(progFiles, 'Microsoft VS Code Insiders'), '.vscode-insiders', - edition: '64-bit edition', isInsiders: true), - ]); + final List<_VsCodeInstallLocation> searchLocations = + <_VsCodeInstallLocation>[]; + + if (localAppData != null) { + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(localAppData, 'Programs\\Microsoft VS Code'), + '.vscode')); + } + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(progFiles86, 'Microsoft VS Code'), '.vscode', + edition: '32-bit edition')); + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(progFiles, 'Microsoft VS Code'), '.vscode', + edition: '64-bit edition')); + if (localAppData != null) { + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(localAppData, 'Programs\\Microsoft VS Code Insiders'), + '.vscode-insiders', + isInsiders: true)); + } + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(progFiles86, 'Microsoft VS Code Insiders'), + '.vscode-insiders', + edition: '32-bit edition', + isInsiders: true)); + searchLocations.add(_VsCodeInstallLocation( + fs.path.join(progFiles, 'Microsoft VS Code Insiders'), + '.vscode-insiders', + edition: '64-bit edition', + isInsiders: true)); + + return _findInstalled(searchLocations); } // Linux: