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_; }