Refactor LanguageSpecificCheckValid()

Calls AidlTypeSpecifier::LanguageSpecificCheckValid() from
AidlDefinedType using visitor.

Bug: n/a
Test: aidl_unittests
Change-Id: Idb127d7fa2f091c8979d1c777ca34c3edafcc2c2
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 9c461ca..3b30ee6 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -1271,14 +1271,20 @@
 }
 
 // TODO: we should treat every backend all the same in future.
-bool AidlParcelable::LanguageSpecificCheckValid(const AidlTypenames& typenames,
-                                                Options::Language lang) const {
-  for (const auto& v : this->GetFields()) {
-    if (!v->GetType().LanguageSpecificCheckValid(typenames, lang)) {
-      return false;
+bool AidlDefinedType::LanguageSpecificCheckValid(const AidlTypenames& typenames,
+                                                 Options::Language lang) const {
+  struct Visitor : AidlVisitor {
+    Visitor(const AidlTypenames& typenames, Options::Language lang)
+        : typenames(typenames), lang(lang) {}
+    void Visit(const AidlTypeSpecifier& type) override {
+      success = success && type.LanguageSpecificCheckValid(typenames, lang);
     }
-  }
-  return true;
+    const AidlTypenames& typenames;
+    Options::Language lang;
+    bool success = true;
+  } v(typenames, lang);
+  VisitTopDown(v, *this);
+  return v.success;
 }
 
 AidlEnumerator::AidlEnumerator(const AidlLocation& location, const std::string& name,
@@ -1436,22 +1442,6 @@
   return success;
 }
 
-// TODO: we should treat every backend all the same in future.
-bool AidlInterface::LanguageSpecificCheckValid(const AidlTypenames& typenames,
-                                               Options::Language lang) const {
-  for (const auto& m : this->GetMethods()) {
-    if (!m->GetType().LanguageSpecificCheckValid(typenames, lang)) {
-      return false;
-    }
-    for (const auto& arg : m->GetArguments()) {
-      if (!arg->GetType().LanguageSpecificCheckValid(typenames, lang)) {
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
 AidlInterface::AidlInterface(const AidlLocation& location, const std::string& name,
                              const Comments& comments, bool oneway, const std::string& package,
                              std::vector<std::unique_ptr<AidlMember>>* members)