summaryrefslogtreecommitdiffstats
path: root/aidl_language.h
diff options
context:
space:
mode:
authorCasey Dahlin <sadmac@google.com>2015-11-17 13:52:06 -0800
committerCasey Dahlin <sadmac@google.com>2015-11-23 11:41:33 -0800
commitb696437d842d59c0cc26411fa3d71cb91897c572 (patch)
tree294c3c9b651fa3284d05fb4321e56da8f3141612 /aidl_language.h
parente392ed7a905e9edca63f571b566a4252059faf14 (diff)
downloadandroid_system_tools_aidl-b696437d842d59c0cc26411fa3d71cb91897c572.tar.gz
android_system_tools_aidl-b696437d842d59c0cc26411fa3d71cb91897c572.tar.bz2
android_system_tools_aidl-b696437d842d59c0cc26411fa3d71cb91897c572.zip
Refactor top-level AST nodes
We now return an AidlDocument from parsing. This type is non-polymorphic and contains either a vector of parcelables or an interface. This gets rid of all of our reinterpret_cast calls and the public item_type field. Change-Id: Ia15ace677f79a153f8ebfad84ed43b08f4a3685f Test: unit and integration tests pass Bug: 25479378 Signed-off-by: Casey Dahlin <sadmac@google.com>
Diffstat (limited to 'aidl_language.h')
-rw-r--r--aidl_language.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/aidl_language.h b/aidl_language.h
index f291a2f..db5a8ec 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -134,20 +134,30 @@ class AidlMethod {
DISALLOW_COPY_AND_ASSIGN(AidlMethod);
};
-enum {
- USER_DATA_TYPE = 12,
- INTERFACE_TYPE_BINDER
-};
-
-class AidlDocumentItem : public AidlNode {
+class AidlParcelable;
+class AidlInterface;
+class AidlDocument : public AidlNode {
public:
- AidlDocumentItem() = default;
- virtual ~AidlDocumentItem() = default;
+ AidlDocument() = default;
+ AidlDocument(AidlInterface* interface);
+ virtual ~AidlDocument() = default;
- unsigned item_type;
+ const AidlInterface* GetInterface() const { return interface_.get(); }
+ AidlInterface* ReleaseInterface() { return interface_.release(); }
+
+ const std::vector<std::unique_ptr<AidlParcelable>>& GetParcelables() const {
+ return parcelables_;
+ }
+
+ void AddParcelable(AidlParcelable* parcelable) {
+ parcelables_.push_back(std::unique_ptr<AidlParcelable>(parcelable));
+ }
private:
- DISALLOW_COPY_AND_ASSIGN(AidlDocumentItem);
+ std::vector<std::unique_ptr<AidlParcelable>> parcelables_;
+ std::unique_ptr<AidlInterface> interface_;
+
+ DISALLOW_COPY_AND_ASSIGN(AidlDocument);
};
class AidlQualifiedName : public AidlNode {
@@ -168,7 +178,7 @@ class AidlQualifiedName : public AidlNode {
DISALLOW_COPY_AND_ASSIGN(AidlQualifiedName);
};
-class AidlParcelable : public AidlDocumentItem {
+class AidlParcelable : public AidlNode {
public:
AidlParcelable(AidlQualifiedName* name, unsigned line,
const std::vector<std::string>& package,
@@ -180,8 +190,7 @@ class AidlParcelable : public AidlDocumentItem {
std::string GetPackage() const;
const std::vector<std::string>& GetSplitPackage() const { return package_; }
std::string GetCppHeader() const { return cpp_header_; }
-
- AidlParcelable* next = nullptr;
+ std::string GetCanonicalName() const;
private:
std::unique_ptr<AidlQualifiedName> name_;
@@ -192,7 +201,7 @@ class AidlParcelable : public AidlDocumentItem {
DISALLOW_COPY_AND_ASSIGN(AidlParcelable);
};
-class AidlInterface : public AidlDocumentItem {
+class AidlInterface : public AidlNode {
public:
AidlInterface(const std::string& name, unsigned line,
const std::string& comments, bool oneway_,
@@ -257,14 +266,14 @@ class Parser {
const std::string& FileName() const { return filename_; }
void* Scanner() const { return scanner_; }
- void SetDocument(AidlDocumentItem* items) { document_ = items; };
+ void SetDocument(AidlDocument* items) { document_ = items; };
void AddImport(AidlQualifiedName* name, unsigned line);
std::vector<std::string> Package() const;
void SetPackage(AidlQualifiedName* name) { package_.reset(name); }
- AidlDocumentItem* GetDocument() const { return document_; }
+ AidlDocument* GetDocument() const { return document_; }
const std::vector<std::unique_ptr<AidlImport>>& GetImports() {
return imports_;
}
@@ -280,7 +289,7 @@ class Parser {
std::string filename_;
std::unique_ptr<AidlQualifiedName> package_;
void* scanner_ = nullptr;
- AidlDocumentItem* document_ = nullptr;
+ AidlDocument* document_ = nullptr;
std::vector<std::unique_ptr<AidlImport>> imports_;
std::unique_ptr<std::string> raw_buffer_;
YY_BUFFER_STATE buffer_;