Make AidlNode visitable
Pull up DispatchVisit/TraverseChildren to AidlNode.
AidlConstantValue::Visitor is replaced with AidlVisitor as well.
Bug: none
Test: aidl_unittests
Change-Id: I51e0e3fdb06f7deeac9a28d7797e5fe738c28bb2
diff --git a/parser.cpp b/parser.cpp
index 897efa0..083e75c 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -61,14 +61,11 @@
}
}
-class ConstantReferenceResolver : public AidlConstantValue::Visitor {
+class ConstantReferenceResolver : public AidlVisitor {
public:
ConstantReferenceResolver(const AidlDefinedType* scope, const AidlTypenames& typenames,
TypeResolver& resolver, bool* success)
: scope_(scope), typenames_(typenames), resolver_(resolver), success_(success) {}
- void Visit(const AidlConstantValue&) override {}
- void Visit(const AidlUnaryConstExpression&) override {}
- void Visit(const AidlBinaryConstExpression&) override {}
void Visit(const AidlConstantReference& v) override {
if (IsCircularReference(&v)) {
*success_ = false;
@@ -91,7 +88,7 @@
// resolve recursive references
Push(&v);
- const_cast<AidlConstantValue*>(resolved)->Accept(*this);
+ VisitTopDown(*this, *resolved);
Pop();
}
@@ -149,22 +146,7 @@
// resolve "field references" as well.
for (const auto& type : document_->DefinedTypes()) {
ConstantReferenceResolver ref_resolver{type.get(), typenames_, type_resolver, &success};
- if (auto enum_type = type->AsEnumDeclaration(); enum_type) {
- for (const auto& enumerator : enum_type->GetEnumerators()) {
- if (auto value = enumerator->GetValue(); value) {
- value->Accept(ref_resolver);
- }
- }
- } else {
- for (const auto& constant : type->GetConstantDeclarations()) {
- const_cast<AidlConstantValue&>(constant->GetValue()).Accept(ref_resolver);
- }
- for (const auto& field : type->GetFields()) {
- if (field->IsDefaultUserSpecified()) {
- const_cast<AidlConstantValue*>(field->GetDefaultValue())->Accept(ref_resolver);
- }
- }
- }
+ VisitTopDown(ref_resolver, *type);
}
return success;