add dumpapi option
multiple input aidls -> single aidl with fqnames
This will be used to ensure that a set of AIDL interfaces and
parcelables are backwards-compatible with older versions.
Bug: 110758635
Test: m -j
Test: runtests.py (AidlTest.ApiDump added)
Change-Id: I06315dca4c373046a4becfea6a225ea96dec9c9d
diff --git a/aidl_language.cpp b/aidl_language.cpp
index e034613..4da3e79 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -17,6 +17,8 @@
#include "aidl_language_y.h"
#include "logging.h"
+#include "type_java.h"
+#include "type_namespace.h"
#ifdef _WIN32
int isatty(int fd)
@@ -120,6 +122,15 @@
return ret;
}
+string AidlTypeSpecifier::Signature() const {
+ string ret = ToString();
+ string annotations = AidlAnnotatable::ToString();
+ if (annotations != "") {
+ ret = annotations + " " + ret;
+ }
+ return ret;
+}
+
bool AidlTypeSpecifier::Resolve(android::aidl::AidlTypenames& typenames) {
assert(!IsResolved());
pair<string, bool> result = typenames.ResolveTypename(unresolved_name_);
@@ -137,6 +148,10 @@
return type_->ToString() + " " + name_;
}
+string AidlVariableDeclaration::Signature() const {
+ return type_->Signature() + " " + name_;
+}
+
AidlArgument::AidlArgument(AidlArgument::Direction direction, AidlTypeSpecifier* type,
std::string name, unsigned line)
: AidlVariableDeclaration(type, name, line),
@@ -148,9 +163,8 @@
direction_(AidlArgument::IN_DIR),
direction_specified_(false) {}
-string AidlArgument::ToString() const {
+string AidlArgument::GetDirectionSpecifier() const {
string ret;
-
if (direction_specified_) {
switch(direction_) {
case AidlArgument::IN_DIR:
@@ -164,12 +178,17 @@
break;
}
}
-
- ret += AidlVariableDeclaration::ToString();
-
return ret;
}
+string AidlArgument::ToString() const {
+ return GetDirectionSpecifier() + AidlVariableDeclaration::ToString();
+}
+
+std::string AidlArgument::Signature() const {
+ return GetDirectionSpecifier() + AidlVariableDeclaration::Signature();
+}
+
AidlIntConstant::AidlIntConstant(std::string name, int32_t value)
: name_(name),
value_(value),
@@ -236,6 +255,14 @@
has_id_ = false;
}
+string AidlMethod::Signature() const {
+ vector<string> arg_signatures;
+ for (const auto& arg : GetArguments()) {
+ arg_signatures.emplace_back(arg->Signature());
+ }
+ return GetType().Signature() + " " + GetName() + "(" + Join(arg_signatures, ", ") + ")";
+}
+
Parser::Parser(const IoDelegate& io_delegate, android::aidl::AidlTypenames* typenames)
: io_delegate_(io_delegate), typenames_(typenames) {
yylex_init(&scanner_);
@@ -268,11 +295,25 @@
}
}
+void AidlParcelable::Write(CodeWriter* writer) const {
+ writer->Write("parcelable %s ;\n", GetName().c_str());
+}
+
AidlStructuredParcelable::AidlStructuredParcelable(
AidlQualifiedName* name, unsigned line, const std::vector<std::string>& package,
std::vector<std::unique_ptr<AidlVariableDeclaration>>* variables)
: AidlParcelable(name, line, package, "" /*cpp_header*/), variables_(std::move(*variables)) {}
+void AidlStructuredParcelable::Write(CodeWriter* writer) const {
+ writer->Write("parcelable %s {\n", GetName().c_str());
+ writer->Indent();
+ for (const auto& field : GetFields()) {
+ writer->Write("%s;\n", field->Signature().c_str());
+ }
+ writer->Dedent();
+ writer->Write("}\n");
+}
+
AidlInterface::AidlInterface(const std::string& name, unsigned line,
const std::string& comments, bool oneway,
std::vector<std::unique_ptr<AidlMember>>* members,
@@ -299,6 +340,16 @@
delete members;
}
+void AidlInterface::Write(CodeWriter* writer) const {
+ writer->Write("interface %s {\n", GetName().c_str());
+ writer->Indent();
+ for (const auto& method : GetMethods()) {
+ writer->Write("%s;\n", method->Signature().c_str());
+ }
+ writer->Dedent();
+ writer->Write("}\n");
+}
+
AidlDefinedType* AidlDocument::ReleaseDefinedType() {
if (defined_types_.size() == 0) {
return nullptr;