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);