Extract the common base class: AidlCommentable

For now it is inherited by AidlMember & AidlDefinedType.

Bug: 174514415
Test: aidl_unittests
Change-Id: Idf8e298f1b029c49030878aa338231e1a545abea
diff --git a/aidl_language.h b/aidl_language.h
index b438aa5..54b6fc0 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -426,9 +426,23 @@
 // Returns the universal value unaltered.
 std::string AidlConstantValueDecorator(const AidlTypeSpecifier& type, const std::string& raw_value);
 
-class AidlMember : public AidlNode {
+class AidlCommentable {
  public:
-  AidlMember(const AidlLocation& location);
+  AidlCommentable(const std::string& comments) : comments_(comments) {}
+  virtual ~AidlCommentable() = default;
+
+  const std::string& GetComments() const { return comments_; }
+  void SetComments(const std::string comments) { comments_ = comments; }
+  bool IsHidden() const;
+  bool IsDeprecated() const;
+
+ private:
+  std::string comments_;
+};
+
+class AidlMember : public AidlNode, public AidlCommentable {
+ public:
+  AidlMember(const AidlLocation& location, const std::string& comments);
   virtual ~AidlMember() = default;
 
   // non-copyable, non-movable
@@ -452,10 +466,6 @@
     return const_cast<AidlVariableDeclaration*>(
         const_cast<const AidlMember*>(this)->AsVariableDeclaration());
   }
-
-  virtual const std::string& GetComments() const = 0;
-  bool IsHidden() const;
-  bool IsDeprecated() const;
 };
 
 // TODO: This class is used for method arguments and also parcelable fields,
@@ -476,7 +486,6 @@
   AidlVariableDeclaration& operator=(AidlVariableDeclaration&&) = delete;
 
   const AidlVariableDeclaration* AsVariableDeclaration() const override { return this; }
-  const std::string& GetComments() const override { return GetType().GetComments(); }
 
   std::string GetName() const { return name_; }
   std::string GetCapitalizedName() const;
@@ -791,7 +800,6 @@
   }
 
   const AidlConstantDeclaration* AsConstantDeclaration() const override { return this; }
-  const std::string& GetComments() const override { return GetType().GetComments(); }
 
   void TraverseChildren(std::function<void(const AidlNode&)> traverse) const override {
     traverse(GetType());
@@ -821,7 +829,6 @@
   AidlMethod& operator=(AidlMethod&&) = delete;
 
   const AidlMethod* AsMethod() const override { return this; }
-  const string& GetComments() const override { return comments_; }
   const AidlTypeSpecifier& GetType() const { return *type_; }
   AidlTypeSpecifier* GetMutableType() { return type_.get(); }
 
@@ -883,7 +890,7 @@
 
 // AidlDefinedType represents either an interface, parcelable, or enum that is
 // defined in the source file.
-class AidlDefinedType : public AidlAnnotatable {
+class AidlDefinedType : public AidlAnnotatable, public AidlCommentable {
  public:
   AidlDefinedType(const AidlLocation& location, const std::string& name,
                   const std::string& comments, const std::string& package,
@@ -897,10 +904,6 @@
   AidlDefinedType& operator=(AidlDefinedType&&) = delete;
 
   const std::string& GetName() const { return name_; };
-  bool IsHidden() const;
-  bool IsDeprecated() const;
-  const std::string& GetComments() const { return comments_; }
-  void SetComments(const std::string comments) { comments_ = comments; }
 
   /* dot joined package, example: "android.package.foo" */
   std::string GetPackage() const { return package_; }