add AidlVariableDeclaration::GetCapitalizedName()

to remove dup in aidl_language.cpp and generate_java.cpp.

Bug: n/a
Test: aidl_unittests
Change-Id: Ib4f9fae0a38c188f97d0d2cf9f47889e170fa784
diff --git a/aidl_language.cpp b/aidl_language.cpp
index e561350..798dc1e 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -69,13 +69,6 @@
   return std::find(kJavaKeywords.begin(), kJavaKeywords.end(), str) != kJavaKeywords.end();
 }
 
-inline std::string CapitalizeFirstLetter(const AidlNode& context, const std::string& str) {
-  AIDL_FATAL_IF(str.size() <= 0, context) << "Input cannot be empty.";
-  std::ostringstream out;
-  out << static_cast<char>(toupper(str[0])) << str.substr(1);
-  return out.str();
-}
-
 void AddHideComment(CodeWriter* writer) {
   writer->Write("/* @hide */\n");
 }
@@ -616,6 +609,13 @@
   return !ValueString(AidlConstantValueDecorator).empty();
 }
 
+string AidlVariableDeclaration::GetCapitalizedName() const {
+  AIDL_FATAL_IF(name_.size() <= 0, *this) << "Name can't be empty.";
+  string str = name_;
+  str[0] = static_cast<char>(toupper(str[0]));
+  return str;
+}
+
 string AidlVariableDeclaration::ToString() const {
   string ret = type_->Signature() + " " + name_;
   if (default_value_ != nullptr && default_user_specified_) {
@@ -902,7 +902,7 @@
   bool success = true;
   std::set<std::string> getters;
   for (const auto& v : GetFields()) {
-    bool duplicated = !getters.emplace(CapitalizeFirstLetter(*v, v->GetName())).second;
+    bool duplicated = !getters.emplace(v->GetCapitalizedName()).second;
     if (duplicated) {
       AIDL_ERROR(v) << "'" << parcel.GetName() << "' has duplicate field name '" << v->GetName()
                     << "' after capitalizing the first letter";
diff --git a/aidl_language.h b/aidl_language.h
index dbd987e..7bc249b 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -347,6 +347,7 @@
   AidlVariableDeclaration& operator=(AidlVariableDeclaration&&) = delete;
 
   std::string GetName() const { return name_; }
+  std::string GetCapitalizedName() const;
   const AidlTypeSpecifier& GetType() const { return *type_; }
   // if this was constructed explicitly with a default value
   bool IsDefaultUserSpecified() const { return default_user_specified_; }
diff --git a/generate_java.cpp b/generate_java.cpp
index 3ee3b3a..7e24c06 100644
--- a/generate_java.cpp
+++ b/generate_java.cpp
@@ -44,18 +44,11 @@
 using android::aidl::java::CodeGeneratorContext;
 using android::aidl::java::ConstantValueDecorator;
 
-// join two non-empty strings according to `camelCase` naming.
-inline string camelcase_join(const string& a, const string& b, const AidlNode& context) {
-  AIDL_FATAL_IF(b.size() <= 0 || a.size() <= 0, context) << "Name cannot be empty.";
-  std::string name = a + b;
-  name[a.size()] = static_cast<char>(toupper(name[a.size()]));
-  return name;
-}
 inline string getter_name(const AidlVariableDeclaration& variable) {
-  return camelcase_join("get", variable.GetName(), variable);
+  return "get" + variable.GetCapitalizedName();
 }
 inline string setter_name(const AidlVariableDeclaration& variable) {
-  return camelcase_join("set", variable.GetName(), variable);
+  return "set" + variable.GetCapitalizedName();
 }
 
 // clang-format off