diff --git a/aidl_language.h b/aidl_language.h
index 73f2d66..dbd987e 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -762,7 +762,24 @@
   std::string cpp_header_;
 };
 
-class AidlStructuredParcelable : public AidlParcelable {
+class AidlWithFields {
+ public:
+  AidlWithFields(std::vector<std::unique_ptr<AidlVariableDeclaration>>* variables)
+      : variables_(std::move(*variables)) {}
+
+  const std::vector<std::unique_ptr<AidlVariableDeclaration>>& GetFields() const {
+    return variables_;
+  }
+
+ protected:
+  bool CheckValid(const AidlParcelable& parcel, const AidlTypenames& typenames) const;
+  bool CheckValidForGetterNames(const AidlParcelable& parcel) const;
+
+ private:
+  const std::vector<std::unique_ptr<AidlVariableDeclaration>> variables_;
+};
+
+class AidlStructuredParcelable : public AidlParcelable, public AidlWithFields {
  public:
   AidlStructuredParcelable(const AidlLocation& location, const std::string& name,
                            const std::string& package, const std::string& comments,
@@ -776,10 +793,6 @@
   AidlStructuredParcelable& operator=(const AidlStructuredParcelable&) = delete;
   AidlStructuredParcelable& operator=(AidlStructuredParcelable&&) = delete;
 
-  const std::vector<std::unique_ptr<AidlVariableDeclaration>>& GetFields() const {
-    return variables_;
-  }
-
   const AidlStructuredParcelable* AsStructuredParcelable() const override { return this; }
   std::string GetPreprocessDeclarationName() const override { return "structured_parcelable"; }
 
@@ -789,9 +802,6 @@
   bool CheckValid(const AidlTypenames& typenames) const override;
   bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
                                   Options::Language lang) const override;
-
- private:
-  const std::vector<std::unique_ptr<AidlVariableDeclaration>> variables_;
 };
 
 class AidlEnumerator : public AidlNode {
@@ -858,7 +868,7 @@
   std::unique_ptr<const AidlTypeSpecifier> backing_type_;
 };
 
-class AidlUnionDecl : public AidlParcelable {
+class AidlUnionDecl : public AidlParcelable, public AidlWithFields {
  public:
   AidlUnionDecl(const AidlLocation& location, const std::string& name, const std::string& package,
                 const std::string& comments,
@@ -876,9 +886,6 @@
 
   const AidlNode& AsAidlNode() const override { return *this; }
 
-  const std::vector<std::unique_ptr<AidlVariableDeclaration>>& GetFields() const {
-    return variables_;
-  }
   bool CheckValid(const AidlTypenames& typenames) const override;
   bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
                                   Options::Language lang) const override;
@@ -886,9 +893,6 @@
 
   void Dump(CodeWriter* writer) const override;
   const AidlUnionDecl* AsUnionDeclaration() const override { return this; }
-
- private:
-  const std::vector<std::unique_ptr<AidlVariableDeclaration>> variables_;
 };
 
 class AidlInterface final : public AidlDefinedType {
