Support Visual Studio 2022 project generation.

Default option is kept at 2019 for now.

BUG=269

Change-Id: I786667bc0ffed2b1ce9bd2106e58ecf222aee1ee
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/12500
Reviewed-by: Scott Graham <scottmg@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/src/gn/command_gen.cc b/src/gn/command_gen.cc
index e391d26..23f15a0 100644
--- a/src/gn/command_gen.cc
+++ b/src/gn/command_gen.cc
@@ -43,6 +43,7 @@
 const char kSwitchIdeValueVs2015[] = "vs2015";
 const char kSwitchIdeValueVs2017[] = "vs2017";
 const char kSwitchIdeValueVs2019[] = "vs2019";
+const char kSwitchIdeValueVs2022[] = "vs2022";
 const char kSwitchIdeValueWinSdk[] = "winsdk";
 const char kSwitchIdeValueXcode[] = "xcode";
 const char kSwitchIdeValueJson[] = "json";
@@ -210,7 +211,7 @@
     return res;
   } else if (ide == kSwitchIdeValueVs || ide == kSwitchIdeValueVs2013 ||
              ide == kSwitchIdeValueVs2015 || ide == kSwitchIdeValueVs2017 ||
-             ide == kSwitchIdeValueVs2019) {
+             ide == kSwitchIdeValueVs2019 || ide == kSwitchIdeValueVs2022) {
     VisualStudioWriter::Version version = VisualStudioWriter::Version::Vs2019;
     if (ide == kSwitchIdeValueVs2013)
       version = VisualStudioWriter::Version::Vs2013;
@@ -218,6 +219,8 @@
       version = VisualStudioWriter::Version::Vs2015;
     else if (ide == kSwitchIdeValueVs2017)
       version = VisualStudioWriter::Version::Vs2017;
+    else if (ide == kSwitchIdeValueVs2022)
+      version = VisualStudioWriter::Version::Vs2022;
 
     std::string sln_name;
     if (command_line->HasSwitch(kSwitchSln))
@@ -468,6 +471,7 @@
       "vs2015" - Visual Studio 2015 project/solution files.
       "vs2017" - Visual Studio 2017 project/solution files.
       "vs2019" - Visual Studio 2019 project/solution files.
+      "vs2022" - Visual Studio 2022 project/solution files.
       "xcode" - Xcode workspace/solution files.
       "qtcreator" - QtCreator project files.
       "json" - JSON file containing target information
diff --git a/src/gn/visual_studio_writer.cc b/src/gn/visual_studio_writer.cc
index e88a469..f567d36 100644
--- a/src/gn/visual_studio_writer.cc
+++ b/src/gn/visual_studio_writer.cc
@@ -73,14 +73,17 @@
 const char kToolsetVersionVs2015[] = "v140";               // Visual Studio 2015
 const char kToolsetVersionVs2017[] = "v141";               // Visual Studio 2017
 const char kToolsetVersionVs2019[] = "v142";               // Visual Studio 2019
+const char kToolsetVersionVs2022[] = "v143";               // Visual Studio 2022
 const char kProjectVersionVs2013[] = "12.0";               // Visual Studio 2013
 const char kProjectVersionVs2015[] = "14.0";               // Visual Studio 2015
 const char kProjectVersionVs2017[] = "15.0";               // Visual Studio 2017
 const char kProjectVersionVs2019[] = "16.0";               // Visual Studio 2019
+const char kProjectVersionVs2022[] = "17.0";               // Visual Studio 2022
 const char kVersionStringVs2013[] = "Visual Studio 2013";  // Visual Studio 2013
 const char kVersionStringVs2015[] = "Visual Studio 2015";  // Visual Studio 2015
 const char kVersionStringVs2017[] = "Visual Studio 2017";  // Visual Studio 2017
 const char kVersionStringVs2019[] = "Visual Studio 2019";  // Visual Studio 2019
+const char kVersionStringVs2022[] = "Visual Studio 2022";  // Visual Studio 2022
 const char kWindowsKitsVersion[] = "10";                   // Windows 10 SDK
 const char kWindowsKitsDefaultVersion[] = "10";            // Windows 10 SDK
 
@@ -311,8 +314,11 @@
       toolset_version_ = kToolsetVersionVs2019;
       version_string_ = kVersionStringVs2019;
       break;
-    default:
-      NOTREACHED() << "Not a valid Visual Studio Version: " << version;
+    case Version::Vs2022:
+      project_version_ = kProjectVersionVs2022;
+      toolset_version_ = kToolsetVersionVs2022;
+      version_string_ = kVersionStringVs2022;
+      break;
   }
 
   windows_kits_include_dirs_ = GetWindowsKitsIncludeDirs(win_kit);
diff --git a/src/gn/visual_studio_writer.h b/src/gn/visual_studio_writer.h
index 428f18b..bcb9e22 100644
--- a/src/gn/visual_studio_writer.h
+++ b/src/gn/visual_studio_writer.h
@@ -30,6 +30,7 @@
     Vs2015,      // Visual Studio 2015
     Vs2017,      // Visual Studio 2017
     Vs2019,      // Visual Studio 2019
+    Vs2022,      // Visual Studio 2022
   };
 
   // Writes Visual Studio project and solution files. |sln_name| is the optional