Use parser to find array brackets
Change-Id: Ib93032113c92fe23e1a7e4ac9b990a065f2b5d19
Test: Unit tests, Full Android Rebuild
Bugs: 24680682
Signed-off-by: Casey Dahlin <sadmac@google.com>
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index 5cfe034..b7ae470 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -289,13 +289,13 @@
decl->comment = method.GetComments();
decl->modifiers = PUBLIC;
decl->returnType = types->Find(method.GetType().GetName());
- decl->returnTypeDimension = method.GetType().GetDimension();
+ decl->returnTypeDimension = method.GetType().IsArray() ? 1 : 0;
decl->name = method.GetName();
for (const std::unique_ptr<AidlArgument>& arg : method.GetArguments()) {
decl->parameters.push_back(new Variable(
types->Find(arg->GetType().GetName()), arg->GetName(),
- arg->GetType().GetDimension()));
+ arg->GetType().IsArray() ? 1 : 0));
}
decl->exceptions.push_back(types->RemoteExceptionType());
@@ -318,7 +318,7 @@
for (const std::unique_ptr<AidlArgument>& arg : method.GetArguments()) {
const Type* t = types->Find(arg->GetType().GetName());
Variable* v = stubArgs.Get(t);
- v->dimension = arg->GetType().GetDimension();
+ v->dimension = arg->GetType().IsArray() ? 1 : 0;
c->statements->Add(new VariableDeclaration(v));
@@ -326,17 +326,12 @@
generate_create_from_parcel(t, c->statements, v,
stubClass->transact_data, &cl);
} else {
- if (arg->GetType().GetDimension() == 0) {
+ if (!arg->GetType().IsArray()) {
c->statements->Add(new Assignment(v, new NewExpression(v->type)));
- }
- else if (arg->GetType().GetDimension() == 1) {
+ } else {
generate_new_array(v->type, c->statements, v,
stubClass->transact_data, types);
}
- else {
- fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__,
- __LINE__);
- }
}
realCall->arguments.push_back(v);
@@ -394,13 +389,13 @@
proxy->comment = method.GetComments();
proxy->modifiers = PUBLIC | OVERRIDE;
proxy->returnType = types->Find(method.GetType().GetName());
- proxy->returnTypeDimension = method.GetType().GetDimension();
+ proxy->returnTypeDimension = method.GetType().IsArray() ? 1 : 0;
proxy->name = method.GetName();
proxy->statements = new StatementBlock;
for (const std::unique_ptr<AidlArgument>& arg : method.GetArguments()) {
proxy->parameters.push_back(new Variable(
types->Find(arg->GetType().GetName()), arg->GetName(),
- arg->GetType().GetDimension()));
+ arg->GetType().IsArray() ? 1 : 0));
}
proxy->exceptions.push_back(types->RemoteExceptionType());
proxyClass->elements.push_back(proxy);
@@ -422,7 +417,7 @@
_result = NULL;
if (method.GetType().GetName() != "void") {
_result = new Variable(proxy->returnType, "_result",
- method.GetType().GetDimension());
+ method.GetType().IsArray() ? 1 : 0);
proxy->statements->Add(new VariableDeclaration(_result));
}
@@ -439,9 +434,9 @@
// the parameters
for (const std::unique_ptr<AidlArgument>& arg : method.GetArguments()) {
const Type* t = types->Find(arg->GetType().GetName());
- Variable* v = new Variable(t, arg->GetName(), arg->GetType().GetDimension());
+ Variable* v = new Variable(t, arg->GetName(), arg->GetType().IsArray() ? 1 : 0);
AidlArgument::Direction dir = arg->GetDirection();
- if (dir == AidlArgument::OUT_DIR && arg->GetType().GetDimension() != 0) {
+ if (dir == AidlArgument::OUT_DIR && arg->GetType().IsArray()) {
IfStatement* checklen = new IfStatement();
checklen->expression = new Comparison(v, "==", NULL_VALUE);
checklen->statements->Add(new MethodCall(_data, "writeInt", 1,
@@ -480,7 +475,7 @@
// the out/inout parameters
for (const std::unique_ptr<AidlArgument>& arg : method.GetArguments()) {
const Type* t = types->Find(arg->GetType().GetName());
- Variable* v = new Variable(t, arg->GetName(), arg->GetType().GetDimension());
+ Variable* v = new Variable(t, arg->GetName(), arg->GetType().IsArray() ? 1 : 0);
if (arg->GetDirection() & AidlArgument::OUT_DIR) {
generate_read_from_parcel(t, tryStatement->statements,
v, _reply, &cl);