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;