diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index 091c7ee..53dcc7a 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -217,7 +217,7 @@
     io_delegate_.SetFileContents(path, contents);
     vector<string> args;
     args.emplace_back("aidl");
-    args.emplace_back("--lang=" + Options::LanguageToString(lang));
+    args.emplace_back("--lang=" + to_string(lang));
     for (const string& s : additional_arguments) {
       args.emplace_back(s);
     }
@@ -262,7 +262,7 @@
                          testing::Values(Options::Language::CPP, Options::Language::JAVA,
                                          Options::Language::NDK, Options::Language::RUST),
                          [](const testing::TestParamInfo<Options::Language>& info) {
-                           return Options::LanguageToString(info.param);
+                           return to_string(info.param);
                          });
 
 TEST_P(AidlTest, AcceptMissingPackage) {
@@ -1397,8 +1397,7 @@
 
 TEST_P(AidlTest, RejectNullableParcelableHolderField) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo { @nullable ParcelableHolder ext; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "ERROR: Foo.aidl:1.27-44: ParcelableHolder cannot be nullable.\n";
   CaptureStderr();
   EXPECT_NE(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -1415,8 +1414,7 @@
 
 TEST_P(AidlTest, ParcelablesWithConstants) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo { const int BIT = 0x1 << 3; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -1424,8 +1422,7 @@
 
 TEST_P(AidlTest, UnionWithConstants) {
   io_delegate_.SetFileContents("Foo.aidl", "union Foo { const int BIT = 0x1 << 3; int n; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -2652,8 +2649,7 @@
                                "  int isFixedSize;"
                                "}");
   io_delegate_.SetFileContents("Bar.aidl", "parcelable Bar { int a; }");
-  Options options =
-      Options::From("aidl Foo.aidl -I . --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
 
   CaptureStderr();
   EXPECT_NE(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -2666,8 +2662,7 @@
   io_delegate_.SetFileContents("Foo.aidl", "@FixedSize parcelable Foo { int a; Bar b; }");
   io_delegate_.SetFileContents("Bar.aidl", "@FixedSize parcelable Bar { Val c; }");
   io_delegate_.SetFileContents("Val.aidl", "enum Val { A, B, }");
-  Options options =
-      Options::From("aidl Foo.aidl -I . --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
 
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -3872,8 +3867,7 @@
 
 TEST_P(AidlTest, GenericStructuredParcelable) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T, U> { int a; int A; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -3884,8 +3878,7 @@
   io_delegate_.SetFileContents("Foo.aidl",
                                "parcelable Foo<T, U> { int a; const String s = \"\"; }");
   Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(Options::Language::CPP) +
-                    " -o out -h out");
+      Options::From("aidl Foo.aidl --lang=" + to_string(Options::Language::CPP) + " -o out -h out");
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -3904,8 +3897,7 @@
   io_delegate_.SetFileContents("Foo.aidl",
                                "parcelable Foo<T, U> { int a; const String s = \"\"; }");
   Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(Options::Language::NDK) +
-                    " -o out -h out");
+      Options::From("aidl Foo.aidl --lang=" + to_string(Options::Language::NDK) + " -o out -h out");
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -4007,8 +3999,7 @@
 
 TEST_P(AidlTest, RejectGenericStructuredParcelabelRepeatedParam) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T,T> { int a; int A; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   const string expected_stderr =
       "ERROR: Foo.aidl:1.11-15: Every type parameter should be unique.\n";
   CaptureStderr();
@@ -4018,8 +4009,7 @@
 
 TEST_P(AidlTest, RejectGenericStructuredParcelableField) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T,T> { T a; int A; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "ERROR: Foo.aidl:1.22-24: Failed to resolve 'T'\n";
   CaptureStderr();
   EXPECT_NE(0, ::android::aidl::compile_aidl(options, io_delegate_));
@@ -4028,8 +4018,7 @@
 
 TEST_P(AidlTest, LongCommentWithinConstExpression) {
   io_delegate_.SetFileContents("Foo.aidl", "enum Foo { FOO = (1 << 1) /* comment */ | 0x0 }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_EQ(0, ::android::aidl::compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -4236,8 +4225,8 @@
   io_delegate_.SetFileContents("a/p/Foo.aidl", "package p; parcelable Foo { p.Bar[] bars = {}; }");
   io_delegate_.SetFileContents("a/p/Bar.aidl", "package p; parcelable Bar { }");
   CaptureStderr();
-  auto options = Options::From("aidl -I a --lang " + Options::LanguageToString(GetLanguage()) +
-                               " -o out -h out a/p/Foo.aidl");
+  auto options =
+      Options::From("aidl -I a --lang " + to_string(GetLanguage()) + " -o out -h out a/p/Foo.aidl");
   EXPECT_EQ(0, aidl::compile_aidl(options, io_delegate_));
   auto err = GetCapturedStderr();
   EXPECT_EQ("", err);
@@ -4250,8 +4239,8 @@
                                "  @JavaPassthrough(annotation=ANNOTATION) void foo();\n"
                                "}");
   CaptureStderr();
-  auto options = Options::From("aidl --lang " + Options::LanguageToString(GetLanguage()) +
-                               " -o out -h out a/p/IFoo.aidl");
+  auto options =
+      Options::From("aidl --lang " + to_string(GetLanguage()) + " -o out -h out a/p/IFoo.aidl");
   EXPECT_EQ(1, aidl::compile_aidl(options, io_delegate_));
   auto err = GetCapturedStderr();
   EXPECT_EQ(
@@ -4322,7 +4311,7 @@
 
 TEST_P(AidlTest, WarningInterfaceName) {
   io_delegate_.SetFileContents("p/Foo.aidl", "interface Foo {}");
-  auto options = Options::From("aidl --lang " + Options::LanguageToString(GetLanguage()) +
+  auto options = Options::From("aidl --lang " + to_string(GetLanguage()) +
                                " -Weverything -o out -h out p/Foo.aidl");
   CaptureStderr();
   EXPECT_EQ(0, aidl::compile_aidl(options, io_delegate_));
@@ -4332,7 +4321,7 @@
 
 TEST_P(AidlTest, ErrorInterfaceName) {
   io_delegate_.SetFileContents("p/Foo.aidl", "interface Foo {}");
-  auto options = Options::From("aidl --lang " + Options::LanguageToString(GetLanguage()) +
+  auto options = Options::From("aidl --lang " + to_string(GetLanguage()) +
                                " -Weverything -Werror -o out -h out p/Foo.aidl");
   CaptureStderr();
   EXPECT_EQ(1, aidl::compile_aidl(options, io_delegate_));
@@ -4427,7 +4416,7 @@
   void Run(const std::string& generic_type_decl,
            const std::map<std::string, std::string>& expectations) {
     const auto& param = GetParam();
-    const auto& lang = Options::LanguageToString(std::get<0>(param));
+    const auto& lang = to_string(std::get<0>(param));
     const auto& kind = std::get<1>(param).kind;
 
     FakeIoDelegate io;
@@ -4458,8 +4447,7 @@
                                      Options::Language::NDK, Options::Language::RUST),
                      testing::ValuesIn(kTypeParams)),
     [](const testing::TestParamInfo<std::tuple<Options::Language, TypeParam>>& info) {
-      return Options::LanguageToString(std::get<0>(info.param)) + "_" +
-             std::get<1>(info.param).kind;
+      return to_string(std::get<0>(info.param)) + "_" + std::get<1>(info.param).kind;
     });
 
 TEST_P(AidlTypeParamTest, ListSupportedTypes) {
