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)